From b488d3a6df134e0b84b414c43aa82bedf47e9a35 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Mon, 7 Nov 2022 14:27:55 -0500 Subject: [PATCH] client side javascript null checks --- .eslintrc.json | 2 +- public-typescript/adminCleanup.js | 11 +- public-typescript/adminCleanup.ts | 39 +- public-typescript/adminFees.js | 107 +- public-typescript/adminFees.ts | 388 ++--- public-typescript/adminLotTypes.js | 67 +- public-typescript/adminLotTypes.ts | 239 +-- public-typescript/adminOccupancyTypes.js | 74 +- public-typescript/adminOccupancyTypes.ts | 270 ++-- public-typescript/adminTables.js | 154 +- public-typescript/adminTables.ts | 341 ++-- public-typescript/dashboard.js | 2 +- public-typescript/dashboard.ts | 2 +- public-typescript/lotEdit.js | 36 +- public-typescript/lotEdit.ts | 143 +- public-typescript/lotOccupancyEdit.js | 164 +- public-typescript/lotOccupancyEdit.ts | 1433 +++++++++-------- public-typescript/lotOccupancySearch.js | 28 +- public-typescript/lotOccupancySearch.ts | 49 +- public-typescript/lotSearch.js | 22 +- public-typescript/lotSearch.ts | 37 +- public-typescript/lotView.ts | 4 +- public-typescript/main.js | 6 +- public-typescript/main.ts | 22 +- public-typescript/mapEdit.js | 25 +- public-typescript/mapEdit.ts | 57 +- public-typescript/mapSearch.js | 14 +- public-typescript/mapSearch.ts | 28 +- public-typescript/mapView.ts | 11 +- public-typescript/workOrderEdit.js | 196 +-- public-typescript/workOrderEdit.ts | 1035 ++++++------ .../workOrderMilestoneCalendar.js | 19 +- .../workOrderMilestoneCalendar.ts | 44 +- public-typescript/workOrderOutlook.d.ts | 1 + public-typescript/workOrderOutlook.js | 21 +- public-typescript/workOrderOutlook.ts | 52 +- public-typescript/workOrderSearch.js | 17 +- public-typescript/workOrderSearch.ts | 28 +- public-typescript/workOrderView.js | 12 +- public-typescript/workOrderView.ts | 23 +- public/javascripts/adminCleanup.min.js | 2 +- public/javascripts/adminFees.min.js | 2 +- public/javascripts/adminLotTypes.min.js | 2 +- public/javascripts/adminOccupancyTypes.min.js | 2 +- public/javascripts/adminTables.min.js | 2 +- public/javascripts/dashboard.min.js | 2 +- public/javascripts/lotEdit.min.js | 2 +- public/javascripts/lotOccupancyEdit.min.js | 2 +- public/javascripts/lotOccupancySearch.min.js | 2 +- public/javascripts/lotSearch.min.js | 2 +- public/javascripts/main.min.js | 2 +- public/javascripts/mapEdit.min.js | 2 +- public/javascripts/mapSearch.min.js | 2 +- public/javascripts/workOrderEdit.min.js | 2 +- .../workOrderMilestoneCalendar.min.js | 2 +- public/javascripts/workOrderOutlook.min.js | 2 +- public/javascripts/workOrderSearch.min.js | 2 +- public/javascripts/workOrderView.min.js | 2 +- types/globalTypes.d.ts | 2 + types/globalTypes.ts | 3 + 60 files changed, 2653 insertions(+), 2611 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 4d4782c2..1e42c2b9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,7 +5,7 @@ }, "parser": "@typescript-eslint/parser", "parserOptions": { - "project": ["./tsconfig.json", "./public-typescript/tsconfig.json"], + "project": ["./tsconfig.json", "./tsconfig.client.json"], "ecmaVersion": 2020, "sourceType": "module" }, diff --git a/public-typescript/adminCleanup.js b/public-typescript/adminCleanup.js index 66401588..da9cea91 100644 --- a/public-typescript/adminCleanup.js +++ b/public-typescript/adminCleanup.js @@ -1,20 +1,23 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los; const doCleanup = () => { - cityssm.postJSON(urlPrefix + "/admin/doCleanupDatabase", {}, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doCleanupDatabase", {}, (responseJSON) => { if (responseJSON.success) { bulmaJS.alert({ title: "Database Cleaned Up Successfully", - message: responseJSON.inactivedRecordCount + " records inactivated, " + responseJSON.purgedRecordCount + " permanently deleted.", + message: responseJSON.inactivedRecordCount + + " records inactivated, " + + responseJSON.purgedRecordCount + + " permanently deleted.", contextualColorName: "success" }); } else { bulmaJS.alert({ title: "Error Cleaning Database", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/adminCleanup.ts b/public-typescript/adminCleanup.ts index 00db86d1..5ccf8752 100644 --- a/public-typescript/adminCleanup.ts +++ b/public-typescript/adminCleanup.ts @@ -1,4 +1,6 @@ -/* eslint-disable unicorn/prefer-module */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../types/globalTypes"; import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; @@ -8,11 +10,11 @@ declare const cityssm: cityssmGlobal; declare const bulmaJS: BulmaJS; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; const doCleanup = () => { cityssm.postJSON( - urlPrefix + "/admin/doCleanupDatabase", + los.urlPrefix + "/admin/doCleanupDatabase", {}, (responseJSON: { success: boolean; @@ -23,13 +25,17 @@ declare const bulmaJS: BulmaJS; if (responseJSON.success) { bulmaJS.alert({ title: "Database Cleaned Up Successfully", - message: responseJSON.inactivedRecordCount + " records inactivated, " + responseJSON.purgedRecordCount + " permanently deleted.", + message: + responseJSON.inactivedRecordCount + + " records inactivated, " + + responseJSON.purgedRecordCount + + " permanently deleted.", contextualColorName: "success" }); } else { bulmaJS.alert({ title: "Error Cleaning Database", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -37,14 +43,17 @@ declare const bulmaJS: BulmaJS; ); }; - document.querySelector("#button--cleanupDatabase").addEventListener("click", () => { - bulmaJS.confirm({ - title: "Cleanup Database", - message: "Are you sure you want to cleanup up the database?", - okButton: { - text: "Yes, Cleanup Database", - callbackFunction: doCleanup - } - }); - }); + (document.querySelector("#button--cleanupDatabase") as HTMLButtonElement).addEventListener( + "click", + () => { + bulmaJS.confirm({ + title: "Cleanup Database", + message: "Are you sure you want to cleanup up the database?", + okButton: { + text: "Yes, Cleanup Database", + callbackFunction: doCleanup + } + }); + } + ); })(); diff --git a/public-typescript/adminFees.js b/public-typescript/adminFees.js index bd0a4fec..22bb3f00 100644 --- a/public-typescript/adminFees.js +++ b/public-typescript/adminFees.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const feeCategoriesContainerElement = document.querySelector("#container--feeCategories"); let feeCategories = exports.feeCategories; delete exports.feeCategories; @@ -25,7 +24,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + ('
' + '

' + - cityssm.escapeHTML(feeCategory.feeCategory) + + cityssm.escapeHTML(feeCategory.feeCategory || "") + "

" + "
") + ('
' + @@ -71,7 +70,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); feeCategoryContainerElement.insertAdjacentHTML("beforeend", '
' + '
' + '

There are no fees in the "' + - cityssm.escapeHTML(feeCategory.feeCategory) + + cityssm.escapeHTML(feeCategory.feeCategory || "") + '" category.

' + "
" + "
"); @@ -86,10 +85,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); ('
' + "

" + '' + - cityssm.escapeHTML(fee.feeName) + + cityssm.escapeHTML(fee.feeName || "") + "
" + "" + - cityssm.escapeHTML(fee.feeDescription).replace(/\n/g, "
") + + cityssm.escapeHTML(fee.feeDescription || "").replace(/\n/g, "
") + "
" + "

" + '

' + @@ -98,14 +97,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); ? ' ' + - cityssm.escapeHTML(fee.occupancyType) + + cityssm.escapeHTML(fee.occupancyType || "") + "" : "") + (fee.lotTypeId ? ' ' + - cityssm.escapeHTML(fee.lotType) + + cityssm.escapeHTML(fee.lotType || "") + "" : "") + "

" + @@ -130,7 +129,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
") + ('
' + (fee.includeQuantity - ? cityssm.escapeHTML(fee.quantityUnit) + + ? cityssm.escapeHTML(fee.quantityUnit || "") + "
" + "Quantity" : "") + @@ -153,32 +152,18 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
") + "
"; panelBlockElement.querySelector("a").addEventListener("click", openEditFee); - panelBlockElement - .querySelector(".button--moveFeeUp") - .addEventListener("click", moveFeeUp); - panelBlockElement - .querySelector(".button--moveFeeDown") - .addEventListener("click", moveFeeDown); + panelBlockElement.querySelector(".button--moveFeeUp").addEventListener("click", moveFeeUp); + panelBlockElement.querySelector(".button--moveFeeDown").addEventListener("click", moveFeeDown); feeCategoryContainerElement.append(panelBlockElement); } } if (feeCategory.fees.length === 0) { - feeCategoryContainerElement - .querySelector(".button--deleteFeeCategory") - .addEventListener("click", confirmDeleteFeeCategory); + feeCategoryContainerElement.querySelector(".button--deleteFeeCategory").addEventListener("click", confirmDeleteFeeCategory); } - feeCategoryContainerElement - .querySelector(".button--editFeeCategory") - .addEventListener("click", openEditFeeCategory); - feeCategoryContainerElement - .querySelector(".button--addFee") - .addEventListener("click", openAddFee); - feeCategoryContainerElement - .querySelector(".button--moveFeeCategoryUp") - .addEventListener("click", moveFeeCategoryUp); - feeCategoryContainerElement - .querySelector(".button--moveFeeCategoryDown") - .addEventListener("click", moveFeeCategoryDown); + feeCategoryContainerElement.querySelector(".button--editFeeCategory").addEventListener("click", openEditFeeCategory); + feeCategoryContainerElement.querySelector(".button--addFee").addEventListener("click", openAddFee); + feeCategoryContainerElement.querySelector(".button--moveFeeCategoryUp").addEventListener("click", moveFeeCategoryUp); + feeCategoryContainerElement.querySelector(".button--moveFeeCategoryDown").addEventListener("click", moveFeeCategoryDown); feeCategoriesContainerElement.append(feeCategoryContainerElement); } }; @@ -186,7 +171,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAddFeeCategory = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doAddFeeCategory", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddFeeCategory", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { feeCategories = responseJSON.feeCategories; addCloseModalFunction(); @@ -195,7 +180,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Creating Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -206,7 +191,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); bulmaJS.toggleHtmlClipped(); modalElement.querySelector("#feeCategoryAdd--feeCategory").focus(); addCloseModalFunction = closeModalFunction; - modalElement.querySelector("form").addEventListener("submit", doAddFeeCategory); + modalElement + .querySelector("form") + .addEventListener("submit", doAddFeeCategory); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -221,7 +208,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const doUpdateFeeCategory = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateFeeCategory", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateFeeCategory", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { feeCategories = responseJSON.feeCategories; editCloseModalFunction(); @@ -230,7 +217,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -255,7 +242,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const confirmDeleteFeeCategory = (clickEvent) => { const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteFeeCategory", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteFeeCategory", { feeCategoryId }, (responseJSON) => { if (responseJSON.success) { @@ -265,7 +252,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -283,7 +270,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const moveFeeCategoryUp = (clickEvent) => { const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10); - cityssm.postJSON(urlPrefix + "/admin/doMoveFeeCategoryUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveFeeCategoryUp", { feeCategoryId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -294,7 +281,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -302,7 +289,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const moveFeeCategoryDown = (clickEvent) => { const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10); - cityssm.postJSON(urlPrefix + "/admin/doMoveFeeCategoryDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveFeeCategoryDown", { feeCategoryId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -313,7 +300,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -324,7 +311,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAddFee = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doAddFee", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddFee", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { feeCategories = responseJSON.feeCategories; addCloseModalFunction(); @@ -333,7 +320,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -373,9 +360,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); addCloseModalFunction = closeModalFunction; modalElement.querySelector("form").addEventListener("submit", doAddFee); modalElement.querySelector("#feeAdd--feeName").focus(); - modalElement - .querySelector("#feeAdd--feeFunction") - .addEventListener("change", () => { + modalElement.querySelector("#feeAdd--feeFunction").addEventListener("change", () => { const feeAmountElement = modalElement.querySelector("#feeAdd--feeAmount"); const feeFunctionElement = modalElement.querySelector("#feeAdd--feeFunction"); if (feeFunctionElement.value === "") { @@ -389,9 +374,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); feeAmountElement.disabled = true; } }); - modalElement - .querySelector("#feeAdd--taxPercentage") - .addEventListener("keyup", () => { + modalElement.querySelector("#feeAdd--taxPercentage").addEventListener("keyup", () => { const taxAmountElement = modalElement.querySelector("#feeAdd--taxAmount"); const taxPercentageElement = modalElement.querySelector("#feeAdd--taxPercentage"); if (taxPercentageElement.value === "") { @@ -405,9 +388,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); taxAmountElement.disabled = true; } }); - modalElement - .querySelector("#feeAdd--includeQuantity") - .addEventListener("change", () => { + modalElement.querySelector("#feeAdd--includeQuantity").addEventListener("change", () => { modalElement.querySelector("#feeAdd--quantityUnit").disabled = modalElement.querySelector("#feeAdd--includeQuantity").value === ""; }); @@ -433,7 +414,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editModalElement; const doUpdateFee = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateFee", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateFee", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { feeCategories = responseJSON.feeCategories; editCloseModalFunction(); @@ -442,7 +423,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -451,7 +432,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const confirmDeleteFee = (clickEvent) => { clickEvent.preventDefault(); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteFee", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteFee", { feeId }, (responseJSON) => { if (responseJSON.success) { @@ -462,7 +443,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -551,9 +532,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } modalElement.querySelector("#feeEdit--feeAmount").value = fee.feeAmount ? fee.feeAmount.toFixed(2) : ""; - modalElement - .querySelector("#feeEdit--feeFunction") - .addEventListener("change", toggleFeeFields); + modalElement.querySelector("#feeEdit--feeFunction").addEventListener("change", toggleFeeFields); toggleFeeFields(); modalElement.querySelector("#feeEdit--taxAmount").value = fee.taxAmount ? fee.taxAmount.toFixed(2) : ""; @@ -579,9 +558,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); editCloseModalFunction = closeModalFunction; modalElement.querySelector("form").addEventListener("submit", doUpdateFee); bulmaJS.init(modalElement); - modalElement - .querySelector(".button--deleteFee") - .addEventListener("click", confirmDeleteFee); + modalElement.querySelector(".button--deleteFee").addEventListener("click", confirmDeleteFee); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -591,7 +568,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveFeeUp = (clickEvent) => { const feeContainerElement = clickEvent.currentTarget.closest(".container--fee"); const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10); - cityssm.postJSON(urlPrefix + "/admin/doMoveFeeUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveFeeUp", { feeId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -602,7 +579,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -611,7 +588,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveFeeDown = (clickEvent) => { const feeContainerElement = clickEvent.currentTarget.closest(".container--fee"); const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10); - cityssm.postJSON(urlPrefix + "/admin/doMoveFeeDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveFeeDown", { feeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -622,7 +599,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/adminFees.ts b/public-typescript/adminFees.ts index 1c4d181d..cb52b193 100644 --- a/public-typescript/adminFees.ts +++ b/public-typescript/adminFees.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -13,8 +13,6 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const feeCategoriesContainerElement = document.querySelector( "#container--feeCategories" ) as HTMLElement; @@ -40,19 +38,19 @@ declare const bulmaJS: BulmaJS; feeCategoryContainerElement.className = "panel container--feeCategory"; feeCategoryContainerElement.dataset.feeCategoryId = - feeCategory.feeCategoryId.toString(); + feeCategory.feeCategoryId!.toString(); feeCategoryContainerElement.innerHTML = '
' + '
' + ('
' + '

' + - cityssm.escapeHTML(feeCategory.feeCategory) + + cityssm.escapeHTML(feeCategory.feeCategory || "") + "

" + "
") + ('
' + '
' + - (feeCategory.fees.length === 0 + (feeCategory.fees!.length === 0 ? '
' + '
" + "
"; - if (feeCategory.fees.length === 0) { + if (feeCategory.fees!.length === 0) { feeCategoryContainerElement.insertAdjacentHTML( "beforeend", '
' + '
' + '

There are no fees in the "' + - cityssm.escapeHTML(feeCategory.feeCategory) + + cityssm.escapeHTML(feeCategory.feeCategory || "") + '" category.

' + "
" + "
" ); } else { - for (const fee of feeCategory.fees) { + for (const fee of feeCategory.fees!) { const panelBlockElement = document.createElement("div"); panelBlockElement.className = "panel-block is-block container--fee"; - panelBlockElement.dataset.feeId = fee.feeId.toString(); + panelBlockElement.dataset.feeId = fee.feeId!.toString(); panelBlockElement.innerHTML = '
' + ('
' + "

" + '' + - cityssm.escapeHTML(fee.feeName) + + cityssm.escapeHTML(fee.feeName || "") + "
" + "" + - cityssm.escapeHTML(fee.feeDescription).replace(/\n/g, "
") + + cityssm.escapeHTML(fee.feeDescription || "").replace(/\n/g, "
") + "
" + "

" + '

' + @@ -124,14 +122,14 @@ declare const bulmaJS: BulmaJS; ? ' ' + - cityssm.escapeHTML(fee.occupancyType) + + cityssm.escapeHTML(fee.occupancyType || "") + "" : "") + (fee.lotTypeId ? ' ' + - cityssm.escapeHTML(fee.lotType) + + cityssm.escapeHTML(fee.lotType || "") + "" : "") + "

" + @@ -144,19 +142,19 @@ declare const bulmaJS: BulmaJS; "
" + "Fee Function" : "$" + - fee.feeAmount.toFixed(2) + + fee.feeAmount!.toFixed(2) + "
" + "Fee") + "
") + ('
' + (fee.taxPercentage ? fee.taxPercentage + "%" - : "$" + fee.taxAmount.toFixed(2)) + + : "$" + fee.taxAmount!.toFixed(2)) + "
Tax" + "
") + ('
' + (fee.includeQuantity - ? cityssm.escapeHTML(fee.quantityUnit) + + ? cityssm.escapeHTML(fee.quantityUnit || "") + "
" + "Quantity" : "") + @@ -179,40 +177,49 @@ declare const bulmaJS: BulmaJS; "
") + "
"; - panelBlockElement.querySelector("a").addEventListener("click", openEditFee); + panelBlockElement.querySelector("a")!.addEventListener("click", openEditFee); - panelBlockElement - .querySelector(".button--moveFeeUp") - .addEventListener("click", moveFeeUp); - panelBlockElement - .querySelector(".button--moveFeeDown") - .addEventListener("click", moveFeeDown); + ( + panelBlockElement.querySelector(".button--moveFeeUp") as HTMLButtonElement + ).addEventListener("click", moveFeeUp); + + ( + panelBlockElement.querySelector(".button--moveFeeDown") as HTMLButtonElement + ).addEventListener("click", moveFeeDown); feeCategoryContainerElement.append(panelBlockElement); } } - if (feeCategory.fees.length === 0) { - feeCategoryContainerElement - .querySelector(".button--deleteFeeCategory") - .addEventListener("click", confirmDeleteFeeCategory); + if (feeCategory.fees!.length === 0) { + ( + feeCategoryContainerElement.querySelector( + ".button--deleteFeeCategory" + ) as HTMLButtonElement + ).addEventListener("click", confirmDeleteFeeCategory); } - feeCategoryContainerElement - .querySelector(".button--editFeeCategory") - .addEventListener("click", openEditFeeCategory); + ( + feeCategoryContainerElement.querySelector( + ".button--editFeeCategory" + ) as HTMLButtonElement + ).addEventListener("click", openEditFeeCategory); - feeCategoryContainerElement - .querySelector(".button--addFee") - .addEventListener("click", openAddFee); + ( + feeCategoryContainerElement.querySelector(".button--addFee") as HTMLButtonElement + ).addEventListener("click", openAddFee); - feeCategoryContainerElement - .querySelector(".button--moveFeeCategoryUp") - .addEventListener("click", moveFeeCategoryUp); + ( + feeCategoryContainerElement.querySelector( + ".button--moveFeeCategoryUp" + ) as HTMLButtonElement + ).addEventListener("click", moveFeeCategoryUp); - feeCategoryContainerElement - .querySelector(".button--moveFeeCategoryDown") - .addEventListener("click", moveFeeCategoryDown); + ( + feeCategoryContainerElement.querySelector( + ".button--moveFeeCategoryDown" + ) as HTMLButtonElement + ).addEventListener("click", moveFeeCategoryDown); feeCategoriesContainerElement.append(feeCategoryContainerElement); } @@ -222,50 +229,57 @@ declare const bulmaJS: BulmaJS; * Fee Categories */ - document.querySelector("#button--addFeeCategory").addEventListener("click", () => { - let addCloseModalFunction: () => void; + (document.querySelector("#button--addFeeCategory") as HTMLButtonElement).addEventListener( + "click", + () => { + let addCloseModalFunction: () => void; - const doAddFeeCategory = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); + const doAddFeeCategory = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); - cityssm.postJSON( - urlPrefix + "/admin/doAddFeeCategory", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - feeCategories: recordTypes.FeeCategory[]; - }) => { - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - addCloseModalFunction(); - renderFeeCategories(); - } else { - bulmaJS.alert({ - title: "Error Creating Fee Category", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); + cityssm.postJSON( + los.urlPrefix + "/admin/doAddFeeCategory", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + feeCategories: recordTypes.FeeCategory[]; + }) => { + if (responseJSON.success) { + feeCategories = responseJSON.feeCategories; + addCloseModalFunction(); + renderFeeCategories(); + } else { + bulmaJS.alert({ + title: "Error Creating Fee Category", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } } + ); + }; + + cityssm.openHtmlModal("adminFees-addFeeCategory", { + onshown: (modalElement, closeModalFunction) => { + bulmaJS.toggleHtmlClipped(); + ( + modalElement.querySelector( + "#feeCategoryAdd--feeCategory" + ) as HTMLInputElement + ).focus(); + + addCloseModalFunction = closeModalFunction; + modalElement + .querySelector("form")! + .addEventListener("submit", doAddFeeCategory); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); } - ); - }; - - cityssm.openHtmlModal("adminFees-addFeeCategory", { - onshown: (modalElement, closeModalFunction) => { - bulmaJS.toggleHtmlClipped(); - ( - modalElement.querySelector("#feeCategoryAdd--feeCategory") as HTMLInputElement - ).focus(); - - addCloseModalFunction = closeModalFunction; - modalElement.querySelector("form").addEventListener("submit", doAddFeeCategory); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + }); + } + ); const openEditFeeCategory = (clickEvent: Event) => { const feeCategoryId = Number.parseInt( @@ -273,13 +287,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--feeCategory" ) as HTMLElement - ).dataset.feeCategoryId, + ).dataset.feeCategoryId!, 10 ); const feeCategory = feeCategories.find((currentFeeCategory) => { return currentFeeCategory.feeCategoryId === feeCategoryId; - }); + })!; let editCloseModalFunction: () => void; @@ -287,7 +301,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateFeeCategory", + los.urlPrefix + "/admin/doUpdateFeeCategory", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -301,7 +315,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Updating Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -315,17 +329,17 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#feeCategoryEdit--feeCategoryId" ) as HTMLInputElement - ).value = feeCategory.feeCategoryId.toString(); + ).value = feeCategory.feeCategoryId!.toString(); ( modalElement.querySelector("#feeCategoryEdit--feeCategory") as HTMLInputElement - ).value = feeCategory.feeCategory; + ).value = feeCategory.feeCategory!; }, onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); editCloseModalFunction = closeModalFunction; - modalElement.querySelector("form").addEventListener("submit", doUpdateFeeCategory); + modalElement.querySelector("form")!.addEventListener("submit", doUpdateFeeCategory); ( modalElement.querySelector("#feeCategoryEdit--feeCategory") as HTMLInputElement @@ -343,13 +357,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--feeCategory" ) as HTMLElement - ).dataset.feeCategoryId, + ).dataset.feeCategoryId!, 10 ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteFeeCategory", + los.urlPrefix + "/admin/doDeleteFeeCategory", { feeCategoryId }, @@ -359,12 +373,12 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Updating Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -389,12 +403,12 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--feeCategory" ) as HTMLElement - ).dataset.feeCategoryId, + ).dataset.feeCategoryId!, 10 ); cityssm.postJSON( - urlPrefix + "/admin/doMoveFeeCategoryUp", + los.urlPrefix + "/admin/doMoveFeeCategoryUp", { feeCategoryId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -405,12 +419,12 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Moving Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -424,12 +438,12 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--feeCategory" ) as HTMLElement - ).dataset.feeCategoryId, + ).dataset.feeCategoryId!, 10 ); cityssm.postJSON( - urlPrefix + "/admin/doMoveFeeCategoryDown", + los.urlPrefix + "/admin/doMoveFeeCategoryDown", { feeCategoryId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -440,12 +454,12 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Moving Fee Category", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -463,7 +477,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--feeCategory" ) as HTMLElement - ).dataset.feeCategoryId, + ).dataset.feeCategoryId!, 10 ); @@ -473,7 +487,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doAddFee", + los.urlPrefix + "/admin/doAddFee", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -487,7 +501,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Adding Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -503,8 +517,8 @@ declare const bulmaJS: BulmaJS; for (const feeCategory of feeCategories) { const optionElement = document.createElement("option"); - optionElement.value = feeCategory.feeCategoryId.toString(); - optionElement.textContent = feeCategory.feeCategory; + optionElement.value = feeCategory.feeCategoryId!.toString(); + optionElement.textContent = feeCategory.feeCategory!; if (feeCategory.feeCategoryId === feeCategoryId) { optionElement.selected = true; @@ -546,68 +560,68 @@ declare const bulmaJS: BulmaJS; addCloseModalFunction = closeModalFunction; - modalElement.querySelector("form").addEventListener("submit", doAddFee); + modalElement.querySelector("form")!.addEventListener("submit", doAddFee); (modalElement.querySelector("#feeAdd--feeName") as HTMLInputElement).focus(); - modalElement - .querySelector("#feeAdd--feeFunction") - .addEventListener("change", () => { - const feeAmountElement = modalElement.querySelector( - "#feeAdd--feeAmount" - ) as HTMLInputElement; - const feeFunctionElement = modalElement.querySelector( - "#feeAdd--feeFunction" - ) as HTMLSelectElement; + ( + modalElement.querySelector("#feeAdd--feeFunction") as HTMLInputElement + ).addEventListener("change", () => { + const feeAmountElement = modalElement.querySelector( + "#feeAdd--feeAmount" + ) as HTMLInputElement; + const feeFunctionElement = modalElement.querySelector( + "#feeAdd--feeFunction" + ) as HTMLSelectElement; - if (feeFunctionElement.value === "") { - feeFunctionElement.closest(".select").classList.remove("is-success"); + if (feeFunctionElement.value === "") { + feeFunctionElement.closest(".select")!.classList.remove("is-success"); - feeAmountElement.classList.add("is-success"); - feeAmountElement.disabled = false; - } else { - feeFunctionElement.closest(".select").classList.add("is-success"); + feeAmountElement.classList.add("is-success"); + feeAmountElement.disabled = false; + } else { + feeFunctionElement.closest(".select")!.classList.add("is-success"); - feeAmountElement.classList.remove("is-success"); - feeAmountElement.disabled = true; - } - }); + feeAmountElement.classList.remove("is-success"); + feeAmountElement.disabled = true; + } + }); - modalElement - .querySelector("#feeAdd--taxPercentage") - .addEventListener("keyup", () => { - const taxAmountElement = modalElement.querySelector( - "#feeAdd--taxAmount" - ) as HTMLInputElement; - const taxPercentageElement = modalElement.querySelector( - "#feeAdd--taxPercentage" - ) as HTMLInputElement; + ( + modalElement.querySelector("#feeAdd--taxPercentage") as HTMLInputElement + ).addEventListener("keyup", () => { + const taxAmountElement = modalElement.querySelector( + "#feeAdd--taxAmount" + ) as HTMLInputElement; + const taxPercentageElement = modalElement.querySelector( + "#feeAdd--taxPercentage" + ) as HTMLInputElement; - if (taxPercentageElement.value === "") { - taxPercentageElement.classList.remove("is-success"); + if (taxPercentageElement.value === "") { + taxPercentageElement.classList.remove("is-success"); - taxAmountElement.classList.add("is-success"); - taxAmountElement.disabled = false; - } else { - taxPercentageElement.classList.add("is-success"); + taxAmountElement.classList.add("is-success"); + taxAmountElement.disabled = false; + } else { + taxPercentageElement.classList.add("is-success"); - taxAmountElement.classList.remove("is-success"); - taxAmountElement.disabled = true; - } - }); + taxAmountElement.classList.remove("is-success"); + taxAmountElement.disabled = true; + } + }); - modalElement - .querySelector("#feeAdd--includeQuantity") - .addEventListener("change", () => { + ( + modalElement.querySelector("#feeAdd--includeQuantity") as HTMLSelectElement + ).addEventListener("change", () => { + ( + modalElement.querySelector("#feeAdd--quantityUnit") as HTMLInputElement + ).disabled = ( - modalElement.querySelector("#feeAdd--quantityUnit") as HTMLInputElement - ).disabled = - ( - modalElement.querySelector( - "#feeAdd--includeQuantity" - ) as HTMLSelectElement - ).value === ""; - }); + modalElement.querySelector( + "#feeAdd--includeQuantity" + ) as HTMLSelectElement + ).value === ""; + }); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -622,19 +636,19 @@ declare const bulmaJS: BulmaJS; ".container--fee" ) as HTMLElement; - const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10); + const feeId = Number.parseInt(feeContainerElement.dataset.feeId!, 10); const feeCategoryId = Number.parseInt( (feeContainerElement.closest(".container--feeCategory") as HTMLElement).dataset - .feeCategoryId + .feeCategoryId! ); const feeCategory = feeCategories.find((currentFeeCategory) => { return currentFeeCategory.feeCategoryId === feeCategoryId; - }); + })!; - const fee = feeCategory.fees.find((currentFee) => { + const fee = feeCategory.fees!.find((currentFee) => { return currentFee.feeId === feeId; - }); + })!; let editCloseModalFunction: () => void; let editModalElement: HTMLElement; @@ -643,7 +657,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateFee", + los.urlPrefix + "/admin/doUpdateFee", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -651,13 +665,13 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; editCloseModalFunction(); renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Updating Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -670,7 +684,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteFee", + los.urlPrefix + "/admin/doDeleteFee", { feeId }, @@ -680,13 +694,13 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; editCloseModalFunction(); renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Deleting Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -714,12 +728,12 @@ declare const bulmaJS: BulmaJS; ) as HTMLSelectElement; if (feeFunctionElement.value === "") { - feeFunctionElement.closest(".select").classList.remove("is-success"); + feeFunctionElement.closest(".select")!.classList.remove("is-success"); feeAmountElement.classList.add("is-success"); feeAmountElement.disabled = false; } else { - feeFunctionElement.closest(".select").classList.add("is-success"); + feeFunctionElement.closest(".select")!.classList.add("is-success"); feeAmountElement.classList.remove("is-success"); feeAmountElement.disabled = true; @@ -760,7 +774,7 @@ declare const bulmaJS: BulmaJS; editModalElement = modalElement; (modalElement.querySelector("#feeEdit--feeId") as HTMLInputElement).value = - fee.feeId.toString(); + fee.feeId!.toString(); const feeCategoryElement = modalElement.querySelector( "#feeEdit--feeCategoryId" @@ -768,8 +782,8 @@ declare const bulmaJS: BulmaJS; for (const feeCategory of feeCategories) { const optionElement = document.createElement("option"); - optionElement.value = feeCategory.feeCategoryId.toString(); - optionElement.textContent = feeCategory.feeCategory; + optionElement.value = feeCategory.feeCategoryId!.toString(); + optionElement.textContent = feeCategory.feeCategory!; if (feeCategory.feeCategoryId === feeCategoryId) { optionElement.selected = true; @@ -779,10 +793,10 @@ declare const bulmaJS: BulmaJS; } (modalElement.querySelector("#feeEdit--feeName") as HTMLInputElement).value = - fee.feeName; + fee.feeName!; ( modalElement.querySelector("#feeEdit--feeDescription") as HTMLTextAreaElement - ).value = fee.feeDescription; + ).value = fee.feeDescription!; const occupancyTypeElement = modalElement.querySelector( "#feeEdit--occupancyTypeId" @@ -818,9 +832,9 @@ declare const bulmaJS: BulmaJS; (modalElement.querySelector("#feeEdit--feeAmount") as HTMLInputElement).value = fee.feeAmount ? fee.feeAmount.toFixed(2) : ""; - modalElement - .querySelector("#feeEdit--feeFunction") - .addEventListener("change", toggleFeeFields); + ( + modalElement.querySelector("#feeEdit--feeFunction") as HTMLSelectElement + ).addEventListener("change", toggleFeeFields); toggleFeeFields(); @@ -863,13 +877,13 @@ declare const bulmaJS: BulmaJS; editCloseModalFunction = closeModalFunction; - modalElement.querySelector("form").addEventListener("submit", doUpdateFee); + modalElement.querySelector("form")!.addEventListener("submit", doUpdateFee); bulmaJS.init(modalElement); - modalElement - .querySelector(".button--deleteFee") - .addEventListener("click", confirmDeleteFee); + ( + modalElement.querySelector(".button--deleteFee") as HTMLButtonElement + ).addEventListener("click", confirmDeleteFee); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -882,10 +896,10 @@ declare const bulmaJS: BulmaJS; ".container--fee" ) as HTMLElement; - const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10); + const feeId = Number.parseInt(feeContainerElement.dataset.feeId!, 10); cityssm.postJSON( - urlPrefix + "/admin/doMoveFeeUp", + los.urlPrefix + "/admin/doMoveFeeUp", { feeId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -896,12 +910,12 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Moving Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -914,10 +928,10 @@ declare const bulmaJS: BulmaJS; ".container--fee" ) as HTMLElement; - const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10); + const feeId = Number.parseInt(feeContainerElement.dataset.feeId!, 10); cityssm.postJSON( - urlPrefix + "/admin/doMoveFeeDown", + los.urlPrefix + "/admin/doMoveFeeDown", { feeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -928,12 +942,12 @@ declare const bulmaJS: BulmaJS; feeCategories?: recordTypes.FeeCategory[]; }) => { if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; + feeCategories = responseJSON.feeCategories!; renderFeeCategories(); } else { bulmaJS.alert({ title: "Error Moving Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/adminLotTypes.js b/public-typescript/adminLotTypes.js index 462157a3..514b06ba 100644 --- a/public-typescript/adminLotTypes.js +++ b/public-typescript/adminLotTypes.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const containerElement = document.querySelector("#container--lotTypes"); let lotTypes = exports.lotTypes; delete exports.lotTypes; @@ -33,7 +32,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.lot + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -41,7 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteLotType = (clickEvent) => { const lotTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--lotType").dataset.lotTypeId, 10); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteLotType", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteLotType", { lotTypeId }, lotTypeResponseHandler); }; @@ -65,7 +64,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const doEdit = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateLotType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateLotType", submitEvent.currentTarget, (responseJSON) => { lotTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); @@ -96,7 +95,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAdd = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doAddLotTypeField", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddLotTypeField", submitEvent.currentTarget, (responseJSON) => { expandedLotTypes.add(lotTypeId); lotTypeResponseHandler(responseJSON); if (responseJSON.success) { @@ -126,7 +125,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotTypeUp = (clickEvent) => { clickEvent.preventDefault(); const lotTypeId = clickEvent.currentTarget.closest(".container--lotType").dataset.lotTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotTypeUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotTypeUp", { lotTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, lotTypeResponseHandler); @@ -134,7 +133,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotTypeDown = (clickEvent) => { clickEvent.preventDefault(); const lotTypeId = clickEvent.currentTarget.closest(".container--lotType").dataset.lotTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotTypeDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotTypeDown", { lotTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, lotTypeResponseHandler); @@ -168,7 +167,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const doUpdate = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateLotTypeField", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateLotTypeField", submitEvent.currentTarget, (responseJSON) => { lotTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); @@ -177,7 +176,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const doDelete = () => { const _doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteLotTypeField", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteLotTypeField", { lotTypeFieldId }, (responseJSON) => { lotTypeResponseHandler(responseJSON); @@ -221,9 +220,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin); updateMaximumLengthMin(); lotTypeFieldValuesElement.addEventListener("keyup", toggleInputFields); - modalElement - .querySelector("#button--deleteLotTypeField") - .addEventListener("click", doDelete); + modalElement.querySelector("#button--deleteLotTypeField").addEventListener("click", doDelete); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -240,7 +237,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotTypeFieldUp = (clickEvent) => { clickEvent.preventDefault(); const lotTypeFieldId = clickEvent.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotTypeFieldUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotTypeFieldUp", { lotTypeFieldId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, lotTypeResponseHandler); @@ -248,7 +245,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotTypeFieldDown = (clickEvent) => { clickEvent.preventDefault(); const lotTypeFieldId = clickEvent.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotTypeFieldDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotTypeFieldDown", { lotTypeFieldId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, lotTypeResponseHandler); @@ -276,7 +273,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '" + @@ -297,15 +294,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
") + "
" + "
"; - panelBlockElement - .querySelector(".button--editLotTypeField") - .addEventListener("click", openEditLotTypeFieldByClick); - panelBlockElement - .querySelector(".button--moveLotTypeFieldUp") - .addEventListener("click", moveLotTypeFieldUp); - panelBlockElement - .querySelector(".button--moveLotTypeFieldDown") - .addEventListener("click", moveLotTypeFieldDown); + panelBlockElement.querySelector(".button--editLotTypeField").addEventListener("click", openEditLotTypeFieldByClick); + panelBlockElement.querySelector(".button--moveLotTypeFieldUp").addEventListener("click", moveLotTypeFieldUp); + panelBlockElement.querySelector(".button--moveLotTypeFieldDown").addEventListener("click", moveLotTypeFieldDown); panelElement.append(panelBlockElement); } } @@ -380,24 +371,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
" + ""; renderLotTypeFields(lotTypeContainer, lotType.lotTypeId, lotType.lotTypeFields); - lotTypeContainer - .querySelector(".button--toggleLotTypeFields") - .addEventListener("click", toggleLotTypeFields); - lotTypeContainer - .querySelector(".button--deleteLotType") - .addEventListener("click", deleteLotType); - lotTypeContainer - .querySelector(".button--editLotType") - .addEventListener("click", openEditLotType); - lotTypeContainer - .querySelector(".button--addLotTypeField") - .addEventListener("click", openAddLotTypeField); - lotTypeContainer - .querySelector(".button--moveLotTypeUp") - .addEventListener("click", moveLotTypeUp); - lotTypeContainer - .querySelector(".button--moveLotTypeDown") - .addEventListener("click", moveLotTypeDown); + lotTypeContainer.querySelector(".button--toggleLotTypeFields").addEventListener("click", toggleLotTypeFields); + lotTypeContainer.querySelector(".button--deleteLotType").addEventListener("click", deleteLotType); + lotTypeContainer.querySelector(".button--editLotType").addEventListener("click", openEditLotType); + lotTypeContainer.querySelector(".button--addLotTypeField").addEventListener("click", openAddLotTypeField); + lotTypeContainer.querySelector(".button--moveLotTypeUp").addEventListener("click", moveLotTypeUp); + lotTypeContainer.querySelector(".button--moveLotTypeDown").addEventListener("click", moveLotTypeDown); containerElement.append(lotTypeContainer); } }; @@ -405,7 +384,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAdd = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doAddLotType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddLotType", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { addCloseModalFunction(); lotTypes = responseJSON.lotTypes; @@ -414,7 +393,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.lot + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/adminLotTypes.ts b/public-typescript/adminLotTypes.ts index 0126c5d7..29b795b8 100644 --- a/public-typescript/adminLotTypes.ts +++ b/public-typescript/adminLotTypes.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -13,8 +13,6 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const containerElement = document.querySelector("#container--lotTypes") as HTMLElement; let lotTypes: recordTypes.LotType[] = exports.lotTypes; @@ -27,7 +25,7 @@ declare const bulmaJS: BulmaJS; const lotTypeElement = toggleButtonElement.closest(".container--lotType") as HTMLElement; - const lotTypeId = Number.parseInt(lotTypeElement.dataset.lotTypeId, 10); + const lotTypeId = Number.parseInt(lotTypeElement.dataset.lotTypeId!, 10); if (expandedLotTypes.has(lotTypeId)) { expandedLotTypes.delete(lotTypeId); @@ -52,12 +50,12 @@ declare const bulmaJS: BulmaJS; lotTypes?: recordTypes.LotType[]; }) => { if (responseJSON.success) { - lotTypes = responseJSON.lotTypes; + lotTypes = responseJSON.lotTypes!; renderLotTypes(); } else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.lot + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -69,13 +67,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--lotType" ) as HTMLElement - ).dataset.lotTypeId, + ).dataset.lotTypeId!, 10 ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteLotType", + los.urlPrefix + "/admin/doDeleteLotType", { lotTypeId }, @@ -103,13 +101,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--lotType" ) as HTMLElement - ).dataset.lotTypeId, + ).dataset.lotTypeId!, 10 ); const lotType = lotTypes.find((currentLotType) => { return lotTypeId === currentLotType.lotTypeId; - }); + })!; let editCloseModalFunction: () => void; @@ -117,7 +115,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateLotType", + los.urlPrefix + "/admin/doUpdateLotType", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -147,7 +145,7 @@ declare const bulmaJS: BulmaJS; (modalElement.querySelector("#lotTypeEdit--lotType") as HTMLInputElement).focus(); - modalElement.querySelector("form").addEventListener("submit", doEdit); + modalElement.querySelector("form")!.addEventListener("submit", doEdit); bulmaJS.toggleHtmlClipped(); }, @@ -163,7 +161,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--lotType" ) as HTMLElement - ).dataset.lotTypeId, + ).dataset.lotTypeId!, 10 ); @@ -173,7 +171,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doAddLotTypeField", + los.urlPrefix + "/admin/doAddLotTypeField", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -186,7 +184,7 @@ declare const bulmaJS: BulmaJS; if (responseJSON.success) { addCloseModalFunction(); - openEditLotTypeField(lotTypeId, responseJSON.lotTypeFieldId); + openEditLotTypeField(lotTypeId, responseJSON.lotTypeFieldId!); } } ); @@ -211,7 +209,7 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector("#lotTypeFieldAdd--lotTypeField") as HTMLInputElement ).focus(); - modalElement.querySelector("form").addEventListener("submit", doAdd); + modalElement.querySelector("form")!.addEventListener("submit", doAdd); bulmaJS.toggleHtmlClipped(); }, @@ -229,7 +227,7 @@ declare const bulmaJS: BulmaJS; ).dataset.lotTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotTypeUp", + los.urlPrefix + "/admin/doMoveLotTypeUp", { lotTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -246,7 +244,7 @@ declare const bulmaJS: BulmaJS; ).dataset.lotTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotTypeDown", + los.urlPrefix + "/admin/doMoveLotTypeDown", { lotTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -258,11 +256,11 @@ declare const bulmaJS: BulmaJS; const openEditLotTypeField = (lotTypeId: number, lotTypeFieldId: number) => { const lotType = lotTypes.find((currentLotType) => { return currentLotType.lotTypeId === lotTypeId; - }); + })!; - const lotTypeField = lotType.lotTypeFields.find((currentLotTypeField) => { + const lotTypeField = lotType.lotTypeFields!.find((currentLotTypeField) => { return currentLotTypeField.lotTypeFieldId === lotTypeFieldId; - }); + })!; let minimumLengthElement: HTMLInputElement; let maximumLengthElement: HTMLInputElement; @@ -291,7 +289,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateLotTypeField", + los.urlPrefix + "/admin/doUpdateLotTypeField", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -309,7 +307,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { const _doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteLotTypeField", + los.urlPrefix + "/admin/doDeleteLotTypeField", { lotTypeFieldId }, @@ -346,13 +344,13 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#lotTypeFieldEdit--lotTypeFieldId" ) as HTMLInputElement - ).value = lotTypeField.lotTypeFieldId.toString(); + ).value = lotTypeField.lotTypeFieldId!.toString(); ( modalElement.querySelector( "#lotTypeFieldEdit--lotTypeField" ) as HTMLInputElement - ).value = lotTypeField.lotTypeField; + ).value = lotTypeField.lotTypeField!; ( modalElement.querySelector("#lotTypeFieldEdit--isRequired") as HTMLSelectElement @@ -360,25 +358,27 @@ declare const bulmaJS: BulmaJS; minimumLengthElement = modalElement.querySelector( "#lotTypeFieldEdit--minimumLength" - ); + ) as HTMLInputElement; - minimumLengthElement.value = lotTypeField.minimumLength.toString(); + minimumLengthElement.value = lotTypeField.minimumLength!.toString(); maximumLengthElement = modalElement.querySelector( "#lotTypeFieldEdit--maximumLength" - ); + ) as HTMLInputElement; - maximumLengthElement.value = lotTypeField.maximumLength.toString(); + maximumLengthElement.value = lotTypeField.maximumLength!.toString(); - patternElement = modalElement.querySelector("#lotTypeFieldEdit--pattern"); + patternElement = modalElement.querySelector( + "#lotTypeFieldEdit--pattern" + ) as HTMLInputElement; - patternElement.value = lotTypeField.pattern; + patternElement.value = lotTypeField.pattern!; lotTypeFieldValuesElement = modalElement.querySelector( "#lotTypeFieldEdit--lotTypeFieldValues" - ); + ) as HTMLTextAreaElement; - lotTypeFieldValuesElement.value = lotTypeField.lotTypeFieldValues; + lotTypeFieldValuesElement.value = lotTypeField.lotTypeFieldValues!; toggleInputFields(); }, @@ -389,16 +389,16 @@ declare const bulmaJS: BulmaJS; bulmaJS.toggleHtmlClipped(); cityssm.enableNavBlocker(); - modalElement.querySelector("form").addEventListener("submit", doUpdate); + modalElement.querySelector("form")!.addEventListener("submit", doUpdate); minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin); updateMaximumLengthMin(); lotTypeFieldValuesElement.addEventListener("keyup", toggleInputFields); - modalElement - .querySelector("#button--deleteLotTypeField") - .addEventListener("click", doDelete); + ( + modalElement.querySelector("#button--deleteLotTypeField") as HTMLButtonElement + ).addEventListener("click", doDelete); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -415,7 +415,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--lotTypeField" ) as HTMLElement - ).dataset.lotTypeFieldId, + ).dataset.lotTypeFieldId!, 10 ); @@ -424,7 +424,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--lotType" ) as HTMLElement - ).dataset.lotTypeId, + ).dataset.lotTypeId!, 10 ); @@ -441,7 +441,7 @@ declare const bulmaJS: BulmaJS; ).dataset.lotTypeFieldId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotTypeFieldUp", + los.urlPrefix + "/admin/doMoveLotTypeFieldUp", { lotTypeFieldId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -460,7 +460,7 @@ declare const bulmaJS: BulmaJS; ).dataset.lotTypeFieldId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotTypeFieldDown", + los.urlPrefix + "/admin/doMoveLotTypeFieldDown", { lotTypeFieldId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -494,14 +494,14 @@ declare const bulmaJS: BulmaJS; panelBlockElement.classList.add("is-hidden"); } - panelBlockElement.dataset.lotTypeFieldId = lotTypeField.lotTypeFieldId.toString(); + panelBlockElement.dataset.lotTypeFieldId = lotTypeField.lotTypeFieldId!.toString(); panelBlockElement.innerHTML = '
' + '" + @@ -523,17 +523,23 @@ declare const bulmaJS: BulmaJS; "
" + ""; - panelBlockElement - .querySelector(".button--editLotTypeField") - .addEventListener("click", openEditLotTypeFieldByClick); + ( + panelBlockElement.querySelector( + ".button--editLotTypeField" + ) as HTMLButtonElement + ).addEventListener("click", openEditLotTypeFieldByClick); - panelBlockElement - .querySelector(".button--moveLotTypeFieldUp") - .addEventListener("click", moveLotTypeFieldUp); + ( + panelBlockElement.querySelector( + ".button--moveLotTypeFieldUp" + ) as HTMLButtonElement + ).addEventListener("click", moveLotTypeFieldUp); - panelBlockElement - .querySelector(".button--moveLotTypeFieldDown") - .addEventListener("click", moveLotTypeFieldDown); + ( + panelBlockElement.querySelector( + ".button--moveLotTypeFieldDown" + ) as HTMLButtonElement + ).addEventListener("click", moveLotTypeFieldDown); panelElement.append(panelBlockElement); } @@ -619,83 +625,88 @@ declare const bulmaJS: BulmaJS; "" + ""; - renderLotTypeFields(lotTypeContainer, lotType.lotTypeId, lotType.lotTypeFields); + renderLotTypeFields(lotTypeContainer, lotType.lotTypeId, lotType.lotTypeFields!); - lotTypeContainer - .querySelector(".button--toggleLotTypeFields") - .addEventListener("click", toggleLotTypeFields); + ( + lotTypeContainer.querySelector(".button--toggleLotTypeFields") as HTMLButtonElement + ).addEventListener("click", toggleLotTypeFields); - lotTypeContainer - .querySelector(".button--deleteLotType") - .addEventListener("click", deleteLotType); + ( + lotTypeContainer.querySelector(".button--deleteLotType") as HTMLButtonElement + ).addEventListener("click", deleteLotType); - lotTypeContainer - .querySelector(".button--editLotType") - .addEventListener("click", openEditLotType); + ( + lotTypeContainer.querySelector(".button--editLotType") as HTMLButtonElement + ).addEventListener("click", openEditLotType); - lotTypeContainer - .querySelector(".button--addLotTypeField") - .addEventListener("click", openAddLotTypeField); + ( + lotTypeContainer.querySelector(".button--addLotTypeField") as HTMLButtonElement + ).addEventListener("click", openAddLotTypeField); - lotTypeContainer - .querySelector(".button--moveLotTypeUp") - .addEventListener("click", moveLotTypeUp); + ( + lotTypeContainer.querySelector(".button--moveLotTypeUp") as HTMLButtonElement + ).addEventListener("click", moveLotTypeUp); - lotTypeContainer - .querySelector(".button--moveLotTypeDown") - .addEventListener("click", moveLotTypeDown); + ( + lotTypeContainer.querySelector(".button--moveLotTypeDown") as HTMLButtonElement + ).addEventListener("click", moveLotTypeDown); containerElement.append(lotTypeContainer); } }; - document.querySelector("#button--addLotType").addEventListener("click", () => { - let addCloseModalFunction: () => void; + (document.querySelector("#button--addLotType") as HTMLButtonElement).addEventListener( + "click", + () => { + let addCloseModalFunction: () => void; - const doAdd = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); + const doAdd = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); - cityssm.postJSON( - urlPrefix + "/admin/doAddLotType", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotTypes?: recordTypes.LotType[]; - }) => { - if (responseJSON.success) { - addCloseModalFunction(); - lotTypes = responseJSON.lotTypes; - renderLotTypes(); - } else { - bulmaJS.alert({ - title: "Error Adding " + exports.aliases.lot + " Type", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); + cityssm.postJSON( + los.urlPrefix + "/admin/doAddLotType", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotTypes?: recordTypes.LotType[]; + }) => { + if (responseJSON.success) { + addCloseModalFunction(); + lotTypes = responseJSON.lotTypes!; + renderLotTypes(); + } else { + bulmaJS.alert({ + title: "Error Adding " + exports.aliases.lot + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } } + ); + }; + + cityssm.openHtmlModal("adminLotTypes-addLotType", { + onshow: (modalElement) => { + los.populateAliases(modalElement); + }, + onshown: (modalElement, closeModalFunction) => { + addCloseModalFunction = closeModalFunction; + + ( + modalElement.querySelector("#lotTypeAdd--lotType") as HTMLInputElement + ).focus(); + + modalElement.querySelector("form")!.addEventListener("submit", doAdd); + + bulmaJS.toggleHtmlClipped(); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); } - ); - }; - - cityssm.openHtmlModal("adminLotTypes-addLotType", { - onshow: (modalElement) => { - los.populateAliases(modalElement); - }, - onshown: (modalElement, closeModalFunction) => { - addCloseModalFunction = closeModalFunction; - - (modalElement.querySelector("#lotTypeAdd--lotType") as HTMLInputElement).focus(); - - modalElement.querySelector("form").addEventListener("submit", doAdd); - - bulmaJS.toggleHtmlClipped(); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + }); + } + ); renderLotTypes(); })(); diff --git a/public-typescript/adminOccupancyTypes.js b/public-typescript/adminOccupancyTypes.js index 93e292f3..d9273ab4 100644 --- a/public-typescript/adminOccupancyTypes.js +++ b/public-typescript/adminOccupancyTypes.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const containerElement = document.querySelector("#container--occupancyTypes"); let occupancyTypes = exports.occupancyTypes; delete exports.occupancyTypes; @@ -36,7 +35,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.occupancy + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -44,7 +43,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteOccupancyType = (clickEvent) => { const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyType", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteOccupancyType", { occupancyTypeId }, occupancyTypeResponseHandler); }; @@ -68,7 +67,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const doEdit = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateOccupancyType", submitEvent.currentTarget, (responseJSON) => { occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); @@ -97,7 +96,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAdd = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { expandedOccupancyTypes.add(occupancyTypeId); occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { @@ -127,7 +126,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveOccupancyTypeUp = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveOccupancyTypeUp", { occupancyTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); @@ -135,7 +134,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveOccupancyTypeDown = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveOccupancyTypeDown", { occupancyTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); @@ -172,7 +171,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const doUpdate = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); @@ -181,7 +180,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const doDelete = () => { const _doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyTypeField", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteOccupancyTypeField", { occupancyTypeFieldId }, (responseJSON) => { occupancyTypeResponseHandler(responseJSON); @@ -213,7 +212,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern"); patternElement.value = occupancyTypeField.pattern; occupancyTypeFieldValuesElement = modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues"); - occupancyTypeFieldValuesElement.value = occupancyTypeField.occupancyTypeFieldValues; + occupancyTypeFieldValuesElement.value = + occupancyTypeField.occupancyTypeFieldValues; toggleInputFields(); }, onshown: (modalElement, closeModalFunction) => { @@ -225,9 +225,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin); updateMaximumLengthMin(); occupancyTypeFieldValuesElement.addEventListener("keyup", toggleInputFields); - modalElement - .querySelector("#button--deleteOccupancyTypeField") - .addEventListener("click", doDelete); + modalElement.querySelector("#button--deleteOccupancyTypeField").addEventListener("click", doDelete); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -244,7 +242,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveOccupancyTypeFieldUp = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeFieldId = clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId; - cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", { occupancyTypeFieldId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); @@ -252,7 +250,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveOccupancyTypeFieldDown = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeFieldId = clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId; - cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", { occupancyTypeFieldId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); @@ -283,7 +281,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + ('") + "
" + @@ -304,15 +302,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); "") + "" + ""; - panelBlockElement - .querySelector(".button--editOccupancyTypeField") - .addEventListener("click", openEditOccupancyTypeFieldByClick); - panelBlockElement - .querySelector(".button--moveOccupancyTypeFieldUp") - .addEventListener("click", moveOccupancyTypeFieldUp); - panelBlockElement - .querySelector(".button--moveOccupancyTypeFieldDown") - .addEventListener("click", moveOccupancyTypeFieldDown); + panelBlockElement.querySelector(".button--editOccupancyTypeField").addEventListener("click", openEditOccupancyTypeFieldByClick); + panelBlockElement.querySelector(".button--moveOccupancyTypeFieldUp").addEventListener("click", moveOccupancyTypeFieldUp); + panelBlockElement.querySelector(".button--moveOccupancyTypeFieldDown").addEventListener("click", moveOccupancyTypeFieldDown); panelElement.append(panelBlockElement); } } @@ -337,9 +329,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + ""; renderOccupancyTypeFields(containerElement.querySelector("#container--allOccupancyTypeFields"), undefined, allOccupancyTypeFields); - containerElement - .querySelector(".button--addOccupancyTypeField") - .addEventListener("click", openAddOccupancyTypeField); + containerElement.querySelector(".button--addOccupancyTypeField").addEventListener("click", openAddOccupancyTypeField); if (occupancyTypes.length === 0) { containerElement.insertAdjacentHTML("afterbegin", '
There are no active ' + @@ -409,24 +399,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
" + ""; renderOccupancyTypeFields(occupancyTypeContainer, occupancyType.occupancyTypeId, occupancyType.occupancyTypeFields); - occupancyTypeContainer - .querySelector(".button--toggleOccupancyTypeFields") - .addEventListener("click", toggleOccupancyTypeFields); - occupancyTypeContainer - .querySelector(".button--deleteOccupancyType") - .addEventListener("click", deleteOccupancyType); - occupancyTypeContainer - .querySelector(".button--editOccupancyType") - .addEventListener("click", openEditOccupancyType); - occupancyTypeContainer - .querySelector(".button--addOccupancyTypeField") - .addEventListener("click", openAddOccupancyTypeField); - occupancyTypeContainer - .querySelector(".button--moveOccupancyTypeUp") - .addEventListener("click", moveOccupancyTypeUp); - occupancyTypeContainer - .querySelector(".button--moveOccupancyTypeDown") - .addEventListener("click", moveOccupancyTypeDown); + occupancyTypeContainer.querySelector(".button--toggleOccupancyTypeFields").addEventListener("click", toggleOccupancyTypeFields); + occupancyTypeContainer.querySelector(".button--deleteOccupancyType").addEventListener("click", deleteOccupancyType); + occupancyTypeContainer.querySelector(".button--editOccupancyType").addEventListener("click", openEditOccupancyType); + occupancyTypeContainer.querySelector(".button--addOccupancyTypeField").addEventListener("click", openAddOccupancyTypeField); + occupancyTypeContainer.querySelector(".button--moveOccupancyTypeUp").addEventListener("click", moveOccupancyTypeUp); + occupancyTypeContainer.querySelector(".button--moveOccupancyTypeDown").addEventListener("click", moveOccupancyTypeDown); containerElement.append(occupancyTypeContainer); } }; @@ -434,7 +412,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAdd = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doAddOccupancyType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddOccupancyType", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { addCloseModalFunction(); occupancyTypes = responseJSON.occupancyTypes; @@ -443,7 +421,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.occupancy + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/adminOccupancyTypes.ts b/public-typescript/adminOccupancyTypes.ts index 3ca12119..6575afd9 100644 --- a/public-typescript/adminOccupancyTypes.ts +++ b/public-typescript/adminOccupancyTypes.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -13,8 +13,6 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const containerElement = document.querySelector("#container--occupancyTypes") as HTMLElement; let occupancyTypes: recordTypes.OccupancyType[] = exports.occupancyTypes; @@ -32,7 +30,7 @@ declare const bulmaJS: BulmaJS; ".container--occupancyType" ) as HTMLElement; - const occupancyTypeId = Number.parseInt(occupancyTypeElement.dataset.occupancyTypeId, 10); + const occupancyTypeId = Number.parseInt(occupancyTypeElement.dataset.occupancyTypeId!, 10); if (expandedOccupancyTypes.has(occupancyTypeId)) { expandedOccupancyTypes.delete(occupancyTypeId); @@ -58,13 +56,13 @@ declare const bulmaJS: BulmaJS; allOccupancyTypeFields?: recordTypes.OccupancyTypeField[]; }) => { if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; - allOccupancyTypeFields = responseJSON.allOccupancyTypeFields; + occupancyTypes = responseJSON.occupancyTypes!; + allOccupancyTypeFields = responseJSON.allOccupancyTypeFields!; renderOccupancyTypes(); } else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.occupancy + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -76,13 +74,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--occupancyType" ) as HTMLElement - ).dataset.occupancyTypeId, + ).dataset.occupancyTypeId!, 10 ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteOccupancyType", + los.urlPrefix + "/admin/doDeleteOccupancyType", { occupancyTypeId }, @@ -110,13 +108,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--occupancyType" ) as HTMLElement - ).dataset.occupancyTypeId, + ).dataset.occupancyTypeId!, 10 ); const occupancyType = occupancyTypes.find((currentOccupancyType) => { return occupancyTypeId === currentOccupancyType.occupancyTypeId; - }); + })!; let editCloseModalFunction: () => void; @@ -124,7 +122,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateOccupancyType", + los.urlPrefix + "/admin/doUpdateOccupancyType", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -165,7 +163,7 @@ declare const bulmaJS: BulmaJS; ) as HTMLInputElement ).focus(); - modalElement.querySelector("form").addEventListener("submit", doEdit); + modalElement.querySelector("form")!.addEventListener("submit", doEdit); bulmaJS.toggleHtmlClipped(); }, @@ -181,7 +179,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--occupancyType" ) as HTMLElement - ).dataset.occupancyTypeId, + ).dataset.occupancyTypeId!, 10 ); @@ -191,7 +189,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doAddOccupancyTypeField", + los.urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -207,7 +205,7 @@ declare const bulmaJS: BulmaJS; addCloseModalFunction(); openEditOccupancyTypeField( occupancyTypeId, - responseJSON.occupancyTypeFieldId + responseJSON.occupancyTypeFieldId! ); } } @@ -235,7 +233,7 @@ declare const bulmaJS: BulmaJS; ) as HTMLInputElement ).focus(); - modalElement.querySelector("form").addEventListener("submit", doAdd); + modalElement.querySelector("form")!.addEventListener("submit", doAdd); bulmaJS.toggleHtmlClipped(); }, @@ -255,7 +253,7 @@ declare const bulmaJS: BulmaJS; ).dataset.occupancyTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveOccupancyTypeUp", + los.urlPrefix + "/admin/doMoveOccupancyTypeUp", { occupancyTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -274,7 +272,7 @@ declare const bulmaJS: BulmaJS; ).dataset.occupancyTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveOccupancyTypeDown", + los.urlPrefix + "/admin/doMoveOccupancyTypeDown", { occupancyTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -284,7 +282,7 @@ declare const bulmaJS: BulmaJS; }; const openEditOccupancyTypeField = (occupancyTypeId: number, occupancyTypeFieldId: number) => { - let occupancyType: recordTypes.OccupancyType; + let occupancyType: recordTypes.OccupancyType | undefined; if (occupancyTypeId) { occupancyType = occupancyTypes.find((currentOccupancyType) => { @@ -293,10 +291,10 @@ declare const bulmaJS: BulmaJS; } const occupancyTypeField = ( - occupancyType ? occupancyType.occupancyTypeFields : allOccupancyTypeFields + occupancyType ? occupancyType.occupancyTypeFields! : allOccupancyTypeFields ).find((currentOccupancyTypeField) => { return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId; - }); + })!; let minimumLengthElement: HTMLInputElement; let maximumLengthElement: HTMLInputElement; @@ -325,7 +323,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateOccupancyTypeField", + los.urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -343,7 +341,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { const _doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteOccupancyTypeField", + los.urlPrefix + "/admin/doDeleteOccupancyTypeField", { occupancyTypeFieldId }, @@ -380,13 +378,13 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#occupancyTypeFieldEdit--occupancyTypeFieldId" ) as HTMLInputElement - ).value = occupancyTypeField.occupancyTypeFieldId.toString(); + ).value = occupancyTypeField.occupancyTypeFieldId!.toString(); ( modalElement.querySelector( "#occupancyTypeFieldEdit--occupancyTypeField" ) as HTMLInputElement - ).value = occupancyTypeField.occupancyTypeField; + ).value = occupancyTypeField.occupancyTypeField!; ( modalElement.querySelector( @@ -396,25 +394,28 @@ declare const bulmaJS: BulmaJS; minimumLengthElement = modalElement.querySelector( "#occupancyTypeFieldEdit--minimumLength" - ); + ) as HTMLInputElement; - minimumLengthElement.value = occupancyTypeField.minimumLength.toString(); + minimumLengthElement.value = occupancyTypeField.minimumLength!.toString(); maximumLengthElement = modalElement.querySelector( "#occupancyTypeFieldEdit--maximumLength" - ); + ) as HTMLInputElement; - maximumLengthElement.value = occupancyTypeField.maximumLength.toString(); + maximumLengthElement.value = occupancyTypeField.maximumLength!.toString(); - patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern"); + patternElement = modalElement.querySelector( + "#occupancyTypeFieldEdit--pattern" + ) as HTMLInputElement; - patternElement.value = occupancyTypeField.pattern; + patternElement.value = occupancyTypeField.pattern!; occupancyTypeFieldValuesElement = modalElement.querySelector( "#occupancyTypeFieldEdit--occupancyTypeFieldValues" - ); + ) as HTMLTextAreaElement; - occupancyTypeFieldValuesElement.value = occupancyTypeField.occupancyTypeFieldValues; + occupancyTypeFieldValuesElement.value = + occupancyTypeField.occupancyTypeFieldValues!; toggleInputFields(); }, @@ -425,16 +426,18 @@ declare const bulmaJS: BulmaJS; bulmaJS.toggleHtmlClipped(); cityssm.enableNavBlocker(); - modalElement.querySelector("form").addEventListener("submit", doUpdate); + modalElement.querySelector("form")!.addEventListener("submit", doUpdate); minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin); updateMaximumLengthMin(); occupancyTypeFieldValuesElement.addEventListener("keyup", toggleInputFields); - modalElement - .querySelector("#button--deleteOccupancyTypeField") - .addEventListener("click", doDelete); + ( + modalElement.querySelector( + "#button--deleteOccupancyTypeField" + ) as HTMLButtonElement + ).addEventListener("click", doDelete); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -451,7 +454,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--occupancyTypeField" ) as HTMLElement - ).dataset.occupancyTypeFieldId, + ).dataset.occupancyTypeFieldId!, 10 ); @@ -460,7 +463,7 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--occupancyType" ) as HTMLElement - ).dataset.occupancyTypeId, + ).dataset.occupancyTypeId!, 10 ); @@ -477,7 +480,7 @@ declare const bulmaJS: BulmaJS; ).dataset.occupancyTypeFieldId; cityssm.postJSON( - urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", + los.urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", { occupancyTypeFieldId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -496,7 +499,7 @@ declare const bulmaJS: BulmaJS; ).dataset.occupancyTypeFieldId; cityssm.postJSON( - urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", + los.urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", { occupancyTypeFieldId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -533,14 +536,14 @@ declare const bulmaJS: BulmaJS; } panelBlockElement.dataset.occupancyTypeFieldId = - occupancyTypeField.occupancyTypeFieldId.toString(); + occupancyTypeField.occupancyTypeFieldId!.toString(); panelBlockElement.innerHTML = '
' + '" + @@ -562,17 +565,23 @@ declare const bulmaJS: BulmaJS; "
" + ""; - panelBlockElement - .querySelector(".button--editOccupancyTypeField") - .addEventListener("click", openEditOccupancyTypeFieldByClick); + ( + panelBlockElement.querySelector( + ".button--editOccupancyTypeField" + ) as HTMLButtonElement + ).addEventListener("click", openEditOccupancyTypeFieldByClick); - panelBlockElement - .querySelector(".button--moveOccupancyTypeFieldUp") - .addEventListener("click", moveOccupancyTypeFieldUp); + ( + panelBlockElement.querySelector( + ".button--moveOccupancyTypeFieldUp" + ) as HTMLButtonElement + ).addEventListener("click", moveOccupancyTypeFieldUp); - panelBlockElement - .querySelector(".button--moveOccupancyTypeFieldDown") - .addEventListener("click", moveOccupancyTypeFieldDown); + ( + panelBlockElement.querySelector( + ".button--moveOccupancyTypeFieldDown" + ) as HTMLButtonElement + ).addEventListener("click", moveOccupancyTypeFieldDown); panelElement.append(panelBlockElement); } @@ -600,14 +609,14 @@ declare const bulmaJS: BulmaJS; ""; renderOccupancyTypeFields( - containerElement.querySelector("#container--allOccupancyTypeFields"), + containerElement.querySelector("#container--allOccupancyTypeFields") as HTMLElement, undefined, allOccupancyTypeFields ); - containerElement - .querySelector(".button--addOccupancyTypeField") - .addEventListener("click", openAddOccupancyTypeField); + ( + containerElement.querySelector(".button--addOccupancyTypeField") as HTMLButtonElement + ).addEventListener("click", openAddOccupancyTypeField); if (occupancyTypes.length === 0) { containerElement.insertAdjacentHTML( @@ -689,88 +698,103 @@ declare const bulmaJS: BulmaJS; renderOccupancyTypeFields( occupancyTypeContainer, occupancyType.occupancyTypeId, - occupancyType.occupancyTypeFields + occupancyType.occupancyTypeFields! ); - occupancyTypeContainer - .querySelector(".button--toggleOccupancyTypeFields") - .addEventListener("click", toggleOccupancyTypeFields); + ( + occupancyTypeContainer.querySelector( + ".button--toggleOccupancyTypeFields" + ) as HTMLButtonElement + ).addEventListener("click", toggleOccupancyTypeFields); - occupancyTypeContainer - .querySelector(".button--deleteOccupancyType") - .addEventListener("click", deleteOccupancyType); + ( + occupancyTypeContainer.querySelector( + ".button--deleteOccupancyType" + ) as HTMLButtonElement + ).addEventListener("click", deleteOccupancyType); - occupancyTypeContainer - .querySelector(".button--editOccupancyType") - .addEventListener("click", openEditOccupancyType); + ( + occupancyTypeContainer.querySelector( + ".button--editOccupancyType" + ) as HTMLButtonElement + ).addEventListener("click", openEditOccupancyType); - occupancyTypeContainer - .querySelector(".button--addOccupancyTypeField") - .addEventListener("click", openAddOccupancyTypeField); + ( + occupancyTypeContainer.querySelector( + ".button--addOccupancyTypeField" + ) as HTMLButtonElement + ).addEventListener("click", openAddOccupancyTypeField); - occupancyTypeContainer - .querySelector(".button--moveOccupancyTypeUp") - .addEventListener("click", moveOccupancyTypeUp); + ( + occupancyTypeContainer.querySelector( + ".button--moveOccupancyTypeUp" + ) as HTMLButtonElement + ).addEventListener("click", moveOccupancyTypeUp); - occupancyTypeContainer - .querySelector(".button--moveOccupancyTypeDown") - .addEventListener("click", moveOccupancyTypeDown); + ( + occupancyTypeContainer.querySelector( + ".button--moveOccupancyTypeDown" + ) as HTMLButtonElement + ).addEventListener("click", moveOccupancyTypeDown); containerElement.append(occupancyTypeContainer); } }; - document.querySelector("#button--addOccupancyType").addEventListener("click", () => { - let addCloseModalFunction: () => void; + (document.querySelector("#button--addOccupancyType") as HTMLButtonElement).addEventListener( + "click", + () => { + let addCloseModalFunction: () => void; - const doAdd = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); + const doAdd = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); - cityssm.postJSON( - urlPrefix + "/admin/doAddOccupancyType", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - occupancyTypes?: recordTypes.OccupancyType[]; - }) => { - if (responseJSON.success) { - addCloseModalFunction(); - occupancyTypes = responseJSON.occupancyTypes; - renderOccupancyTypes(); - } else { - bulmaJS.alert({ - title: "Error Adding " + exports.aliases.occupancy + " Type", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); + cityssm.postJSON( + los.urlPrefix + "/admin/doAddOccupancyType", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + occupancyTypes?: recordTypes.OccupancyType[]; + }) => { + if (responseJSON.success) { + addCloseModalFunction(); + occupancyTypes = responseJSON.occupancyTypes!; + renderOccupancyTypes(); + } else { + bulmaJS.alert({ + title: "Error Adding " + exports.aliases.occupancy + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } } + ); + }; + + cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyType", { + onshow: (modalElement) => { + los.populateAliases(modalElement); + }, + onshown: (modalElement, closeModalFunction) => { + addCloseModalFunction = closeModalFunction; + + ( + modalElement.querySelector( + "#occupancyTypeAdd--occupancyType" + ) as HTMLInputElement + ).focus(); + + modalElement.querySelector("form")!.addEventListener("submit", doAdd); + + bulmaJS.toggleHtmlClipped(); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); } - ); - }; - - cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyType", { - onshow: (modalElement) => { - los.populateAliases(modalElement); - }, - onshown: (modalElement, closeModalFunction) => { - addCloseModalFunction = closeModalFunction; - - ( - modalElement.querySelector( - "#occupancyTypeAdd--occupancyType" - ) as HTMLInputElement - ).focus(); - - modalElement.querySelector("form").addEventListener("submit", doAdd); - - bulmaJS.toggleHtmlClipped(); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + }); + } + ); renderOccupancyTypes(); })(); diff --git a/public-typescript/adminTables.js b/public-typescript/adminTables.js index 64ed9ea1..da841e24 100644 --- a/public-typescript/adminTables.js +++ b/public-typescript/adminTables.js @@ -1,12 +1,12 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los; let workOrderTypes = exports.workOrderTypes; delete exports.workOrderTypes; const updateWorkOrderType = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateWorkOrderType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateWorkOrderType", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { workOrderTypes = responseJSON.workOrderTypes; bulmaJS.alert({ @@ -17,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -27,7 +27,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const tableRowElement = clickEvent.currentTarget.closest("tr"); const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteWorkOrderType", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteWorkOrderType", { workOrderTypeId }, (responseJSON) => { if (responseJSON.success) { @@ -46,7 +46,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -67,7 +67,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveWorkOrderTypeUp = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveWorkOrderTypeUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderTypeUp", { workOrderTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -78,7 +78,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -87,7 +87,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveWorkOrderTypeDown = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveWorkOrderTypeDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderTypeDown", { workOrderTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -98,7 +98,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -130,7 +130,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); ('
' + '
' + '' + "
" + '
' + @@ -159,24 +159,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
" + ""; tableRowElement.querySelector("form").addEventListener("submit", updateWorkOrderType); - tableRowElement - .querySelector(".button--moveWorkOrderTypeUp") - .addEventListener("click", moveWorkOrderTypeUp); - tableRowElement - .querySelector(".button--moveWorkOrderTypeDown") - .addEventListener("click", moveWorkOrderTypeDown); - tableRowElement - .querySelector(".button--deleteWorkOrderType") - .addEventListener("click", deleteWorkOrderType); + tableRowElement.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click", moveWorkOrderTypeUp); + tableRowElement.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click", moveWorkOrderTypeDown); + tableRowElement.querySelector(".button--deleteWorkOrderType").addEventListener("click", deleteWorkOrderType); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addWorkOrderType") - .addEventListener("submit", (submitEvent) => { + document.querySelector("#form--addWorkOrderType").addEventListener("submit", (submitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget; - cityssm.postJSON(urlPrefix + "/admin/doAddWorkOrderType", formElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddWorkOrderType", formElement, (responseJSON) => { if (responseJSON.success) { workOrderTypes = responseJSON.workOrderTypes; renderWorkOrderTypes(); @@ -186,7 +178,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -197,7 +189,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); delete exports.workOrderMilestoneTypes; const updateWorkOrderMilestoneType = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; bulmaJS.alert({ @@ -208,7 +200,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -218,7 +210,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const tableRowElement = clickEvent.currentTarget.closest("tr"); const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", { workOrderMilestoneTypeId }, (responseJSON) => { if (responseJSON.success) { @@ -237,7 +229,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -258,7 +250,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveWorkOrderMilestoneTypeUp = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", { workOrderMilestoneTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -269,7 +261,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -278,7 +270,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveWorkOrderMilestoneTypeDown = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", { workOrderMilestoneTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -289,7 +281,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -350,27 +342,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
" + "" + ""; - tableRowElement - .querySelector("form") - .addEventListener("submit", updateWorkOrderMilestoneType); - tableRowElement - .querySelector(".button--moveWorkOrderMilestoneTypeUp") - .addEventListener("click", moveWorkOrderMilestoneTypeUp); - tableRowElement - .querySelector(".button--moveWorkOrderMilestoneTypeDown") - .addEventListener("click", moveWorkOrderMilestoneTypeDown); - tableRowElement - .querySelector(".button--deleteWorkOrderMilestoneType") - .addEventListener("click", deleteWorkOrderMilestoneType); + tableRowElement.querySelector("form").addEventListener("submit", updateWorkOrderMilestoneType); + tableRowElement.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click", moveWorkOrderMilestoneTypeUp); + tableRowElement.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click", moveWorkOrderMilestoneTypeDown); + tableRowElement.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click", deleteWorkOrderMilestoneType); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addWorkOrderMilestoneType") - .addEventListener("submit", (submitEvent) => { + document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit", (submitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget; - cityssm.postJSON(urlPrefix + "/admin/doAddWorkOrderMilestoneType", formElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddWorkOrderMilestoneType", formElement, (responseJSON) => { if (responseJSON.success) { workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; renderWorkOrderMilestoneTypes(); @@ -380,7 +362,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -391,7 +373,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); delete exports.lotStatuses; const updateLotStatus = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { lotStatuses = responseJSON.lotStatuses; bulmaJS.alert({ @@ -402,7 +384,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -412,7 +394,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const tableRowElement = clickEvent.currentTarget.closest("tr"); const lotStatusId = tableRowElement.dataset.lotStatusId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteLotStatus", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteLotStatus", { lotStatusId }, (responseJSON) => { if (responseJSON.success) { @@ -431,7 +413,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -454,7 +436,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotStatusUp = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const lotStatusId = tableRowElement.dataset.lotStatusId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotStatusUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotStatusUp", { lotStatusId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -465,7 +447,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -474,7 +456,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotStatusDown = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const lotStatusId = tableRowElement.dataset.lotStatusId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotStatusDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotStatusDown", { lotStatusId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -485,7 +467,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Moving " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -549,24 +531,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + ""; tableRowElement.querySelector("form").addEventListener("submit", updateLotStatus); - tableRowElement - .querySelector(".button--moveLotStatusUp") - .addEventListener("click", moveLotStatusUp); - tableRowElement - .querySelector(".button--moveLotStatusDown") - .addEventListener("click", moveLotStatusDown); - tableRowElement - .querySelector(".button--deleteLotStatus") - .addEventListener("click", deleteLotStatus); + tableRowElement.querySelector(".button--moveLotStatusUp").addEventListener("click", moveLotStatusUp); + tableRowElement.querySelector(".button--moveLotStatusDown").addEventListener("click", moveLotStatusDown); + tableRowElement.querySelector(".button--deleteLotStatus").addEventListener("click", deleteLotStatus); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addLotStatus") - .addEventListener("submit", (submitEvent) => { + document.querySelector("#form--addLotStatus").addEventListener("submit", (submitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget; - cityssm.postJSON(urlPrefix + "/admin/doAddLotStatus", formElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddLotStatus", formElement, (responseJSON) => { if (responseJSON.success) { lotStatuses = responseJSON.lotStatuses; renderLotStatuses(); @@ -576,7 +550,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -587,7 +561,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); delete exports.lotOccupantTypes; const updateLotOccupantType = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/admin/doUpdateLotOccupantType", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateLotOccupantType", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { lotOccupantTypes = responseJSON.lotOccupantTypes; bulmaJS.alert({ @@ -605,7 +579,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -615,7 +589,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const tableRowElement = clickEvent.currentTarget.closest("tr"); const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/admin/doDeleteLotOccupantType", { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteLotOccupantType", { lotOccupantTypeId }, (responseJSON) => { if (responseJSON.success) { @@ -641,7 +615,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -670,7 +644,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotOccupantTypeUp = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotOccupantTypeUp", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotOccupantTypeUp", { lotOccupantTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -685,7 +659,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -694,7 +668,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const moveLotOccupantTypeDown = (clickEvent) => { const tableRowElement = clickEvent.currentTarget.closest("tr"); const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - cityssm.postJSON(urlPrefix + "/admin/doMoveLotOccupantTypeDown", { + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotOccupantTypeDown", { lotOccupantTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" }, (responseJSON) => { @@ -709,7 +683,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -787,25 +761,19 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + "" + ""; - tableRowElement.querySelector("form").addEventListener("submit", updateLotOccupantType); tableRowElement - .querySelector(".button--moveLotOccupantTypeUp") - .addEventListener("click", moveLotOccupantTypeUp); - tableRowElement - .querySelector(".button--moveLotOccupantTypeDown") - .addEventListener("click", moveLotOccupantTypeDown); - tableRowElement - .querySelector(".button--deleteLotOccupantType") - .addEventListener("click", deleteLotOccupantType); + .querySelector("form") + .addEventListener("submit", updateLotOccupantType); + tableRowElement.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click", moveLotOccupantTypeUp); + tableRowElement.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click", moveLotOccupantTypeDown); + tableRowElement.querySelector(".button--deleteLotOccupantType").addEventListener("click", deleteLotOccupantType); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addLotOccupantType") - .addEventListener("submit", (submitEvent) => { + document.querySelector("#form--addLotOccupantType").addEventListener("submit", (submitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget; - cityssm.postJSON(urlPrefix + "/admin/doAddLotOccupantType", formElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/admin/doAddLotOccupantType", formElement, (responseJSON) => { if (responseJSON.success) { lotOccupantTypes = responseJSON.lotOccupantTypes; renderLotOccupantTypes(); @@ -819,7 +787,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/adminTables.ts b/public-typescript/adminTables.ts index 239985f2..d3c53031 100644 --- a/public-typescript/adminTables.ts +++ b/public-typescript/adminTables.ts @@ -1,5 +1,6 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -10,7 +11,7 @@ declare const cityssm: cityssmGlobal; declare const bulmaJS: BulmaJS; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; /* * Work Order Types @@ -23,7 +24,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateWorkOrderType", + los.urlPrefix + "/admin/doUpdateWorkOrderType", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -31,7 +32,7 @@ declare const bulmaJS: BulmaJS; workOrderTypes?: recordTypes.WorkOrderType[]; }) => { if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; + workOrderTypes = responseJSON.workOrderTypes!; bulmaJS.alert({ message: "Work Order Type Updated Successfully", @@ -40,7 +41,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Updating Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -49,13 +50,13 @@ declare const bulmaJS: BulmaJS; }; const deleteWorkOrderType = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteWorkOrderType", + los.urlPrefix + "/admin/doDeleteWorkOrderType", { workOrderTypeId }, @@ -65,7 +66,7 @@ declare const bulmaJS: BulmaJS; workOrderTypes?: recordTypes.WorkOrderType[]; }) => { if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; + workOrderTypes = responseJSON.workOrderTypes!; if (workOrderTypes.length === 0) { renderWorkOrderTypes(); @@ -80,7 +81,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Deleting Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -103,12 +104,12 @@ declare const bulmaJS: BulmaJS; }; const moveWorkOrderTypeUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveWorkOrderTypeUp", + los.urlPrefix + "/admin/doMoveWorkOrderTypeUp", { workOrderTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -119,12 +120,12 @@ declare const bulmaJS: BulmaJS; workOrderTypes?: recordTypes.WorkOrderType[]; }) => { if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; + workOrderTypes = responseJSON.workOrderTypes!; renderWorkOrderTypes(); } else { bulmaJS.alert({ title: "Error Moving Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -133,12 +134,12 @@ declare const bulmaJS: BulmaJS; }; const moveWorkOrderTypeDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveWorkOrderTypeDown", + los.urlPrefix + "/admin/doMoveWorkOrderTypeDown", { workOrderTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -149,12 +150,12 @@ declare const bulmaJS: BulmaJS; workOrderTypes?: recordTypes.WorkOrderType[]; }) => { if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; + workOrderTypes = responseJSON.workOrderTypes!; renderWorkOrderTypes(); } else { bulmaJS.alert({ title: "Error Moving Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -185,18 +186,18 @@ declare const bulmaJS: BulmaJS; for (const workOrderType of workOrderTypes) { const tableRowElement = document.createElement("tr"); - tableRowElement.dataset.workOrderTypeId = workOrderType.workOrderTypeId.toString(); + tableRowElement.dataset.workOrderTypeId = workOrderType.workOrderTypeId!.toString(); tableRowElement.innerHTML = "" + "
" + '' + ('
' + '
' + '' + "
" + '
' + @@ -225,30 +226,33 @@ declare const bulmaJS: BulmaJS; "
" + ""; - tableRowElement.querySelector("form").addEventListener("submit", updateWorkOrderType); - tableRowElement - .querySelector(".button--moveWorkOrderTypeUp") - .addEventListener("click", moveWorkOrderTypeUp); - tableRowElement - .querySelector(".button--moveWorkOrderTypeDown") - .addEventListener("click", moveWorkOrderTypeDown); - tableRowElement - .querySelector(".button--deleteWorkOrderType") - .addEventListener("click", deleteWorkOrderType); + tableRowElement.querySelector("form")!.addEventListener("submit", updateWorkOrderType); + + ( + tableRowElement.querySelector(".button--moveWorkOrderTypeUp") as HTMLButtonElement + ).addEventListener("click", moveWorkOrderTypeUp); + + ( + tableRowElement.querySelector(".button--moveWorkOrderTypeDown") as HTMLButtonElement + ).addEventListener("click", moveWorkOrderTypeDown); + + ( + tableRowElement.querySelector(".button--deleteWorkOrderType") as HTMLButtonElement + ).addEventListener("click", deleteWorkOrderType); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addWorkOrderType") - .addEventListener("submit", (submitEvent: SubmitEvent) => { + (document.querySelector("#form--addWorkOrderType") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget as HTMLFormElement; cityssm.postJSON( - urlPrefix + "/admin/doAddWorkOrderType", + los.urlPrefix + "/admin/doAddWorkOrderType", formElement, (responseJSON: { success: boolean; @@ -256,20 +260,21 @@ declare const bulmaJS: BulmaJS; workOrderTypes?: recordTypes.WorkOrderType[]; }) => { if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; + workOrderTypes = responseJSON.workOrderTypes!; renderWorkOrderTypes(); formElement.reset(); - formElement.querySelector("input").focus(); + formElement.querySelector("input")!.focus(); } else { bulmaJS.alert({ title: "Error Adding Work Order Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); - }); + } + ); renderWorkOrderTypes(); @@ -285,7 +290,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", + los.urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -293,7 +298,7 @@ declare const bulmaJS: BulmaJS; workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; }) => { if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; bulmaJS.alert({ message: "Work Order Milestone Type Updated Successfully", @@ -302,7 +307,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Updating Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -311,13 +316,13 @@ declare const bulmaJS: BulmaJS; }; const deleteWorkOrderMilestoneType = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", + los.urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", { workOrderMilestoneTypeId }, @@ -327,7 +332,7 @@ declare const bulmaJS: BulmaJS; workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; }) => { if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; if (workOrderMilestoneTypes.length === 0) { renderWorkOrderMilestoneTypes(); @@ -342,7 +347,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Deleting Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -365,12 +370,12 @@ declare const bulmaJS: BulmaJS; }; const moveWorkOrderMilestoneTypeUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", + los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", { workOrderMilestoneTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -381,12 +386,12 @@ declare const bulmaJS: BulmaJS; workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; }) => { if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; renderWorkOrderMilestoneTypes(); } else { bulmaJS.alert({ title: "Error Moving Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -395,12 +400,12 @@ declare const bulmaJS: BulmaJS; }; const moveWorkOrderMilestoneTypeDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", + los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", { workOrderMilestoneTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -411,12 +416,12 @@ declare const bulmaJS: BulmaJS; workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; }) => { if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; renderWorkOrderMilestoneTypes(); } else { bulmaJS.alert({ title: "Error Moving Work Order Milestone Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -488,53 +493,63 @@ declare const bulmaJS: BulmaJS; "
" + ""; - tableRowElement - .querySelector("form") - .addEventListener("submit", updateWorkOrderMilestoneType); - tableRowElement - .querySelector(".button--moveWorkOrderMilestoneTypeUp") - .addEventListener("click", moveWorkOrderMilestoneTypeUp); - tableRowElement - .querySelector(".button--moveWorkOrderMilestoneTypeDown") - .addEventListener("click", moveWorkOrderMilestoneTypeDown); - tableRowElement - .querySelector(".button--deleteWorkOrderMilestoneType") - .addEventListener("click", deleteWorkOrderMilestoneType); + (tableRowElement.querySelector("form") as HTMLFormElement).addEventListener( + "submit", + updateWorkOrderMilestoneType + ); + + ( + tableRowElement.querySelector( + ".button--moveWorkOrderMilestoneTypeUp" + ) as HTMLButtonElement + ).addEventListener("click", moveWorkOrderMilestoneTypeUp); + + ( + tableRowElement.querySelector( + ".button--moveWorkOrderMilestoneTypeDown" + ) as HTMLButtonElement + ).addEventListener("click", moveWorkOrderMilestoneTypeDown); + + ( + tableRowElement.querySelector( + ".button--deleteWorkOrderMilestoneType" + ) as HTMLButtonElement + ).addEventListener("click", deleteWorkOrderMilestoneType); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addWorkOrderMilestoneType") - .addEventListener("submit", (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); + ( + document.querySelector("#form--addWorkOrderMilestoneType") as HTMLFormElement + ).addEventListener("submit", (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); - const formElement = submitEvent.currentTarget as HTMLFormElement; + const formElement = submitEvent.currentTarget as HTMLFormElement; - cityssm.postJSON( - urlPrefix + "/admin/doAddWorkOrderMilestoneType", - formElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; - }) => { - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; - renderWorkOrderMilestoneTypes(); - formElement.reset(); - formElement.querySelector("input").focus(); - } else { - bulmaJS.alert({ - title: "Error Adding Work Order Milestone Type", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); - } + cityssm.postJSON( + los.urlPrefix + "/admin/doAddWorkOrderMilestoneType", + formElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; + }) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; + renderWorkOrderMilestoneTypes(); + formElement.reset(); + formElement.querySelector("input")!.focus(); + } else { + bulmaJS.alert({ + title: "Error Adding Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); } - ); - }); + } + ); + }); renderWorkOrderMilestoneTypes(); @@ -549,7 +564,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateLotStatus", + los.urlPrefix + "/admin/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -557,7 +572,7 @@ declare const bulmaJS: BulmaJS; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; + lotStatuses = responseJSON.lotStatuses!; bulmaJS.alert({ message: exports.aliases.lot + " Status Updated Successfully", @@ -566,7 +581,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -575,13 +590,13 @@ declare const bulmaJS: BulmaJS; }; const deleteLotStatus = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotStatusId = tableRowElement.dataset.lotStatusId; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteLotStatus", + los.urlPrefix + "/admin/doDeleteLotStatus", { lotStatusId }, @@ -591,7 +606,7 @@ declare const bulmaJS: BulmaJS; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; + lotStatuses = responseJSON.lotStatuses!; if (lotStatuses.length === 0) { renderLotStatuses(); @@ -606,7 +621,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Deleting " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -631,12 +646,12 @@ declare const bulmaJS: BulmaJS; }; const moveLotStatusUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotStatusId = tableRowElement.dataset.lotStatusId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotStatusUp", + los.urlPrefix + "/admin/doMoveLotStatusUp", { lotStatusId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -647,12 +662,12 @@ declare const bulmaJS: BulmaJS; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; + lotStatuses = responseJSON.lotStatuses!; renderLotStatuses(); } else { bulmaJS.alert({ title: "Error Moving " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -661,12 +676,12 @@ declare const bulmaJS: BulmaJS; }; const moveLotStatusDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotStatusId = tableRowElement.dataset.lotStatusId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotStatusDown", + los.urlPrefix + "/admin/doMoveLotStatusDown", { lotStatusId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -677,12 +692,12 @@ declare const bulmaJS: BulmaJS; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; + lotStatuses = responseJSON.lotStatuses!; renderLotStatuses(); } else { bulmaJS.alert({ title: "Error Moving " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -756,30 +771,33 @@ declare const bulmaJS: BulmaJS; "" + ""; - tableRowElement.querySelector("form").addEventListener("submit", updateLotStatus); - tableRowElement - .querySelector(".button--moveLotStatusUp") - .addEventListener("click", moveLotStatusUp); - tableRowElement - .querySelector(".button--moveLotStatusDown") - .addEventListener("click", moveLotStatusDown); - tableRowElement - .querySelector(".button--deleteLotStatus") - .addEventListener("click", deleteLotStatus); + tableRowElement.querySelector("form")!.addEventListener("submit", updateLotStatus); + + ( + tableRowElement.querySelector(".button--moveLotStatusUp") as HTMLButtonElement + ).addEventListener("click", moveLotStatusUp); + + ( + tableRowElement.querySelector(".button--moveLotStatusDown") as HTMLButtonElement + ).addEventListener("click", moveLotStatusDown); + + ( + tableRowElement.querySelector(".button--deleteLotStatus") as HTMLButtonElement + ).addEventListener("click", deleteLotStatus); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addLotStatus") - .addEventListener("submit", (submitEvent: SubmitEvent) => { + (document.querySelector("#form--addLotStatus") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget as HTMLFormElement; cityssm.postJSON( - urlPrefix + "/admin/doAddLotStatus", + los.urlPrefix + "/admin/doAddLotStatus", formElement, (responseJSON: { success: boolean; @@ -787,20 +805,21 @@ declare const bulmaJS: BulmaJS; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; + lotStatuses = responseJSON.lotStatuses!; renderLotStatuses(); formElement.reset(); - formElement.querySelector("input").focus(); + formElement.querySelector("input")!.focus(); } else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); - }); + } + ); renderLotStatuses(); @@ -815,7 +834,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/admin/doUpdateLotOccupantType", + los.urlPrefix + "/admin/doUpdateLotOccupantType", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -823,7 +842,7 @@ declare const bulmaJS: BulmaJS; lotOccupantTypes?: recordTypes.LotOccupantType[]; }) => { if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; + lotOccupantTypes = responseJSON.lotOccupantTypes!; bulmaJS.alert({ message: @@ -841,7 +860,7 @@ declare const bulmaJS: BulmaJS; " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -850,13 +869,13 @@ declare const bulmaJS: BulmaJS; }; const deleteLotOccupantType = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/admin/doDeleteLotOccupantType", + los.urlPrefix + "/admin/doDeleteLotOccupantType", { lotOccupantTypeId }, @@ -866,7 +885,7 @@ declare const bulmaJS: BulmaJS; lotOccupantTypes?: recordTypes.LotOccupantType[]; }) => { if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; + lotOccupantTypes = responseJSON.lotOccupantTypes!; if (lotOccupantTypes.length === 0) { renderLotOccupantTypes(); @@ -890,7 +909,7 @@ declare const bulmaJS: BulmaJS; " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -922,12 +941,12 @@ declare const bulmaJS: BulmaJS; }; const moveLotOccupantTypeUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotOccupantTypeUp", + los.urlPrefix + "/admin/doMoveLotOccupantTypeUp", { lotOccupantTypeId, moveToTop: clickEvent.shiftKey ? "1" : "0" @@ -938,7 +957,7 @@ declare const bulmaJS: BulmaJS; lotOccupantTypes?: recordTypes.LotOccupantType[]; }) => { if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; + lotOccupantTypes = responseJSON.lotOccupantTypes!; renderLotOccupantTypes(); } else { bulmaJS.alert({ @@ -948,7 +967,7 @@ declare const bulmaJS: BulmaJS; " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -957,12 +976,12 @@ declare const bulmaJS: BulmaJS; }; const moveLotOccupantTypeDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; cityssm.postJSON( - urlPrefix + "/admin/doMoveLotOccupantTypeDown", + los.urlPrefix + "/admin/doMoveLotOccupantTypeDown", { lotOccupantTypeId, moveToBottom: clickEvent.shiftKey ? "1" : "0" @@ -973,7 +992,7 @@ declare const bulmaJS: BulmaJS; lotOccupantTypes?: recordTypes.LotOccupantType[]; }) => { if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; + lotOccupantTypes = responseJSON.lotOccupantTypes!; renderLotOccupantTypes(); } else { bulmaJS.alert({ @@ -983,7 +1002,7 @@ declare const bulmaJS: BulmaJS; " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1072,30 +1091,37 @@ declare const bulmaJS: BulmaJS; "" + ""; - tableRowElement.querySelector("form").addEventListener("submit", updateLotOccupantType); tableRowElement - .querySelector(".button--moveLotOccupantTypeUp") - .addEventListener("click", moveLotOccupantTypeUp); - tableRowElement - .querySelector(".button--moveLotOccupantTypeDown") - .addEventListener("click", moveLotOccupantTypeDown); - tableRowElement - .querySelector(".button--deleteLotOccupantType") - .addEventListener("click", deleteLotOccupantType); + .querySelector("form")! + .addEventListener("submit", updateLotOccupantType); + + ( + tableRowElement.querySelector(".button--moveLotOccupantTypeUp") as HTMLButtonElement + ).addEventListener("click", moveLotOccupantTypeUp); + + ( + tableRowElement.querySelector( + ".button--moveLotOccupantTypeDown" + ) as HTMLButtonElement + ).addEventListener("click", moveLotOccupantTypeDown); + + ( + tableRowElement.querySelector(".button--deleteLotOccupantType") as HTMLButtonElement + ).addEventListener("click", deleteLotOccupantType); containerElement.append(tableRowElement); } }; - document - .querySelector("#form--addLotOccupantType") - .addEventListener("submit", (submitEvent: SubmitEvent) => { + (document.querySelector("#form--addLotOccupantType") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget as HTMLFormElement; cityssm.postJSON( - urlPrefix + "/admin/doAddLotOccupantType", + los.urlPrefix + "/admin/doAddLotOccupantType", formElement, (responseJSON: { success: boolean; @@ -1103,10 +1129,10 @@ declare const bulmaJS: BulmaJS; lotOccupantTypes?: recordTypes.LotOccupantType[]; }) => { if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; + lotOccupantTypes = responseJSON.lotOccupantTypes!; renderLotOccupantTypes(); formElement.reset(); - formElement.querySelector("input").focus(); + formElement.querySelector("input")!.focus(); } else { bulmaJS.alert({ title: @@ -1115,13 +1141,14 @@ declare const bulmaJS: BulmaJS; " " + exports.aliases.occupant + " Type", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); - }); + } + ); renderLotOccupantTypes(); })(); diff --git a/public-typescript/dashboard.js b/public-typescript/dashboard.js index 78c79d8c..43a5c83e 100644 --- a/public-typescript/dashboard.js +++ b/public-typescript/dashboard.js @@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); const los = exports.los; const workOrderNumberCircleElements = document.querySelectorAll(".fa-circle[data-work-order-number"); for (const workOrderNumberCircleElement of workOrderNumberCircleElements) { - workOrderNumberCircleElement.style.color = los.getRandomColor(workOrderNumberCircleElement.dataset.workOrderNumber); + workOrderNumberCircleElement.style.color = los.getRandomColor(workOrderNumberCircleElement.dataset.workOrderNumber || ""); } })(); diff --git a/public-typescript/dashboard.ts b/public-typescript/dashboard.ts index 5218c1ff..f97130d4 100644 --- a/public-typescript/dashboard.ts +++ b/public-typescript/dashboard.ts @@ -8,6 +8,6 @@ import type * as globalTypes from "../types/globalTypes"; const workOrderNumberCircleElements = document.querySelectorAll(".fa-circle[data-work-order-number") as NodeListOf; for (const workOrderNumberCircleElement of workOrderNumberCircleElements) { - workOrderNumberCircleElement.style.color = los.getRandomColor(workOrderNumberCircleElement.dataset.workOrderNumber); + workOrderNumberCircleElement.style.color = los.getRandomColor(workOrderNumberCircleElement.dataset.workOrderNumber || ""); } })(); \ No newline at end of file diff --git a/public-typescript/lotEdit.js b/public-typescript/lotEdit.js index 3f162780..4dcf4352 100644 --- a/public-typescript/lotEdit.js +++ b/public-typescript/lotEdit.js @@ -2,16 +2,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const lotId = document.querySelector("#lot--lotId").value; const isCreate = lotId === ""; const formElement = document.querySelector("#form--lot"); const updateLot = (formEvent) => { formEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lots/" + (isCreate ? "doCreateLot" : "doUpdateLot"), formElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/" + (isCreate ? "doCreateLot" : "doUpdateLot"), formElement, (responseJSON) => { if (responseJSON.success) { if (isCreate) { - window.location.href = urlPrefix + "/lots/" + responseJSON.lotId + "/edit"; + window.location.href = + los.urlPrefix + "/lots/" + responseJSON.lotId + "/edit"; } else { bulmaJS.alert({ @@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -35,17 +35,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); document.querySelector("#button--deleteLot").addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lots/doDeleteLot", { + cityssm.postJSON(los.urlPrefix + "/lots/doDeleteLot", { lotId }, (responseJSON) => { if (responseJSON.success) { cityssm.disableNavBlocker(); - window.location.href = urlPrefix + "/lots/?t=" + Date.now(); + window.location.href = los.urlPrefix + "/lots/?t=" + Date.now(); } else { bulmaJS.alert({ title: "Error Deleting " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -75,7 +75,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const editComment = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lots/doUpdateLotComment", editFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/doUpdateLotComment", editFormElement, (responseJSON) => { if (responseJSON.success) { lotComments = responseJSON.lotComments; editCloseModalFunction(); @@ -84,7 +84,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -123,7 +123,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteLotComment = (clickEvent) => { const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.lotCommentId, 10); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lots/doDeleteLotComment", { + cityssm.postJSON(los.urlPrefix + "/lots/doDeleteLotComment", { lotId, lotCommentId }, (responseJSON) => { @@ -134,7 +134,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Removing Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -174,14 +174,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); tableRowElement.dataset.lotCommentId = lotComment.lotCommentId.toString(); tableRowElement.innerHTML = "" + - cityssm.escapeHTML(lotComment.recordCreate_userName) + + cityssm.escapeHTML(lotComment.recordCreate_userName || "") + "" + "" + lotComment.lotCommentDateString + (lotComment.lotCommentTime === 0 ? "" : " " + lotComment.lotCommentTimeString) + "" + "" + - cityssm.escapeHTML(lotComment.lotComment) + + cityssm.escapeHTML(lotComment.lotComment || "") + "" + ('' + '
' + @@ -194,12 +194,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); "") + "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditLotComment); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteLotComment); + tableRowElement.querySelector(".button--edit").addEventListener("click", openEditLotComment); + tableRowElement.querySelector(".button--delete").addEventListener("click", deleteLotComment); tableElement.querySelector("tbody").append(tableRowElement); } containerElement.innerHTML = ""; @@ -209,7 +205,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCommentCloseModalFunction; const doAddComment = (formEvent) => { formEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lots/doAddLotComment", formEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/doAddLotComment", formEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { lotComments = responseJSON.lotComments; renderLotComments(); diff --git a/public-typescript/lotEdit.ts b/public-typescript/lotEdit.ts index 061f07fc..c7125cb8 100644 --- a/public-typescript/lotEdit.ts +++ b/public-typescript/lotEdit.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -13,8 +13,6 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const lotId = (document.querySelector("#lot--lotId") as HTMLInputElement).value; const isCreate = lotId === ""; @@ -26,12 +24,13 @@ declare const bulmaJS: BulmaJS; formEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/lots/" + (isCreate ? "doCreateLot" : "doUpdateLot"), + los.urlPrefix + "/lots/" + (isCreate ? "doCreateLot" : "doUpdateLot"), formElement, (responseJSON: { success: boolean; lotId?: number; errorMessage?: string }) => { if (responseJSON.success) { if (isCreate) { - window.location.href = urlPrefix + "/lots/" + responseJSON.lotId + "/edit"; + window.location.href = + los.urlPrefix + "/lots/" + responseJSON.lotId + "/edit"; } else { bulmaJS.alert({ message: exports.aliases.lot + " Updated Successfully", @@ -41,7 +40,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -54,43 +53,46 @@ declare const bulmaJS: BulmaJS; los.initializeUnlockFieldButtons(formElement); if (!isCreate) { - document.querySelector("#button--deleteLot").addEventListener("click", (clickEvent) => { - clickEvent.preventDefault(); + (document.querySelector("#button--deleteLot") as HTMLButtonElement).addEventListener( + "click", + (clickEvent) => { + clickEvent.preventDefault(); - const doDelete = () => { - cityssm.postJSON( - urlPrefix + "/lots/doDeleteLot", - { - lotId - }, - (responseJSON: { success: boolean; errorMessage?: string }) => { - if (responseJSON.success) { - cityssm.disableNavBlocker(); - window.location.href = urlPrefix + "/lots/?t=" + Date.now(); - } else { - bulmaJS.alert({ - title: "Error Deleting " + exports.aliases.lot, - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/lots/doDeleteLot", + { + lotId + }, + (responseJSON: { success: boolean; errorMessage?: string }) => { + if (responseJSON.success) { + cityssm.disableNavBlocker(); + window.location.href = los.urlPrefix + "/lots/?t=" + Date.now(); + } else { + bulmaJS.alert({ + title: "Error Deleting " + exports.aliases.lot, + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } } - } - ); - }; + ); + }; - bulmaJS.confirm({ - title: "Delete " + exports.aliases.lot, - message: - "Are you sure you want to delete this " + - exports.aliases.lot.toLowerCase() + - "?", - contextualColorName: "warning", - okButton: { - text: "Yes, Delete " + exports.aliases.lot, - callbackFunction: doDelete - } - }); - }); + bulmaJS.confirm({ + title: "Delete " + exports.aliases.lot, + message: + "Are you sure you want to delete this " + + exports.aliases.lot.toLowerCase() + + "?", + contextualColorName: "warning", + okButton: { + text: "Yes, Delete " + exports.aliases.lot, + callbackFunction: doDelete + } + }); + } + ); } // Comments @@ -100,13 +102,13 @@ declare const bulmaJS: BulmaJS; const openEditLotComment = (clickEvent: Event) => { const lotCommentId = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset.lotCommentId, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotCommentId!, 10 ); const lotComment = lotComments.find((currentLotComment) => { return currentLotComment.lotCommentId === lotCommentId; - }); + })!; let editFormElement: HTMLFormElement; let editCloseModalFunction: () => void; @@ -115,7 +117,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/lots/doUpdateLotComment", + los.urlPrefix + "/lots/doUpdateLotComment", editFormElement, (responseJSON: { success: boolean; @@ -123,13 +125,13 @@ declare const bulmaJS: BulmaJS; lotComments?: recordTypes.LotComment[]; }) => { if (responseJSON.success) { - lotComments = responseJSON.lotComments; + lotComments = responseJSON.lotComments!; editCloseModalFunction(); renderLotComments(); } else { bulmaJS.alert({ title: "Error Updating Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -149,26 +151,26 @@ declare const bulmaJS: BulmaJS; ( modalElement.querySelector("#lotCommentEdit--lotComment") as HTMLInputElement - ).value = lotComment.lotComment; + ).value = lotComment.lotComment!; const lotCommentDateStringElement = modalElement.querySelector( "#lotCommentEdit--lotCommentDateString" ) as HTMLInputElement; - lotCommentDateStringElement.value = lotComment.lotCommentDateString; + lotCommentDateStringElement.value = lotComment.lotCommentDateString!; const currentDateString = cityssm.dateToString(new Date()); lotCommentDateStringElement.max = - lotComment.lotCommentDateString <= currentDateString + lotComment.lotCommentDateString! <= currentDateString ? currentDateString - : lotComment.lotCommentDateString; + : lotComment.lotCommentDateString!; ( modalElement.querySelector( "#lotCommentEdit--lotCommentTimeString" ) as HTMLInputElement - ).value = lotComment.lotCommentTimeString; + ).value = lotComment.lotCommentTimeString!; }, onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); @@ -180,7 +182,7 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector("#lotCommentEdit--lotComment") as HTMLTextAreaElement ).focus(); - editFormElement = modalElement.querySelector("form"); + editFormElement = modalElement.querySelector("form")!; editFormElement.addEventListener("submit", editComment); editCloseModalFunction = closeModalFunction; @@ -193,13 +195,13 @@ declare const bulmaJS: BulmaJS; const deleteLotComment = (clickEvent: Event) => { const lotCommentId = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset.lotCommentId, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotCommentId!, 10 ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/lots/doDeleteLotComment", + los.urlPrefix + "/lots/doDeleteLotComment", { lotId, lotCommentId @@ -215,7 +217,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Removing Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -258,18 +260,18 @@ declare const bulmaJS: BulmaJS; for (const lotComment of lotComments) { const tableRowElement = document.createElement("tr"); - tableRowElement.dataset.lotCommentId = lotComment.lotCommentId.toString(); + tableRowElement.dataset.lotCommentId = lotComment.lotCommentId!.toString(); tableRowElement.innerHTML = "" + - cityssm.escapeHTML(lotComment.recordCreate_userName) + + cityssm.escapeHTML(lotComment.recordCreate_userName || "") + "" + "" + lotComment.lotCommentDateString + (lotComment.lotCommentTime === 0 ? "" : " " + lotComment.lotCommentTimeString) + "" + "" + - cityssm.escapeHTML(lotComment.lotComment) + + cityssm.escapeHTML(lotComment.lotComment || "") + "" + ('' + '
' + @@ -283,14 +285,16 @@ declare const bulmaJS: BulmaJS; "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditLotComment); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteLotComment); + (tableRowElement.querySelector(".button--edit") as HTMLButtonElement).addEventListener( + "click", + openEditLotComment + ); - tableElement.querySelector("tbody").append(tableRowElement); + ( + tableRowElement.querySelector(".button--delete") as HTMLButtonElement + ).addEventListener("click", deleteLotComment); + + tableElement.querySelector("tbody")!.append(tableRowElement); } containerElement.innerHTML = ""; @@ -304,11 +308,11 @@ declare const bulmaJS: BulmaJS; formEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/lots/doAddLotComment", + los.urlPrefix + "/lots/doAddLotComment", formEvent.currentTarget, (responseJSON: { success: boolean; lotComments?: recordTypes.LotComment[] }) => { if (responseJSON.success) { - lotComments = responseJSON.lotComments; + lotComments = responseJSON.lotComments!; renderLotComments(); addCommentCloseModalFunction(); } @@ -321,7 +325,7 @@ declare const bulmaJS: BulmaJS; los.populateAliases(modalElement); (modalElement.querySelector("#lotCommentAdd--lotId") as HTMLInputElement).value = lotId; - modalElement.querySelector("form").addEventListener("submit", doAddComment); + modalElement.querySelector("form")!.addEventListener("submit", doAddComment); }, onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); @@ -338,7 +342,10 @@ declare const bulmaJS: BulmaJS; }; if (!isCreate) { - document.querySelector("#lotComments--add").addEventListener("click", openAddCommentModal); + (document.querySelector("#lotComments--add") as HTMLButtonElement).addEventListener( + "click", + openAddCommentModal + ); renderLotComments(); } })(); diff --git a/public-typescript/lotOccupancyEdit.js b/public-typescript/lotOccupancyEdit.js index 76a9ea40..bdba5b5b 100644 --- a/public-typescript/lotOccupancyEdit.js +++ b/public-typescript/lotOccupancyEdit.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const lotOccupancyId = document.querySelector("#lotOccupancy--lotOccupancyId").value; const isCreate = lotOccupancyId === ""; let hasUnsavedChanges = false; @@ -20,14 +19,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); const formElement = document.querySelector("#form--lotOccupancy"); formElement.addEventListener("submit", (formEvent) => { formEvent.preventDefault(); - cityssm.postJSON(urlPrefix + + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/" + (isCreate ? "doCreateLotOccupancy" : "doUpdateLotOccupancy"), formElement, (responseJSON) => { if (responseJSON.success) { clearUnsavedChanges(); if (isCreate || refreshAfterSave) { window.location.href = - urlPrefix + + los.urlPrefix + "/lotOccupancies/" + responseJSON.lotOccupancyId + "/edit?t=" + @@ -43,7 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Saving " + exports.aliases.occupancy, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -54,23 +53,21 @@ Object.defineProperty(exports, "__esModule", { value: true }); formInputElement.addEventListener("change", setUnsavedChanges); } if (!isCreate) { - document - .querySelector("#button--deleteLotOccupancy") - .addEventListener("click", (clickEvent) => { + document.querySelector("#button--deleteLotOccupancy").addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancy", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancy", { lotOccupancyId }, (responseJSON) => { if (responseJSON.success) { cityssm.disableNavBlocker(); window.location.href = - urlPrefix + "/lotOccupancies?t=" + Date.now(); + los.urlPrefix + "/lotOccupancies?t=" + Date.now(); } else { bulmaJS.alert({ title: "Error Deleting Record", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -100,7 +97,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); ""; return; } - cityssm.postJSON(urlPrefix + "/lotOccupancies/doGetOccupancyTypeFields", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doGetOccupancyTypeFields", { occupancyTypeId: occupancyTypeIdElement.value }, (responseJSON) => { if (responseJSON.occupancyTypeFields.length === 0) { @@ -150,14 +147,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); '">' + '' + ""; - fieldElement.querySelector("select").required = - occupancyTypeField.isRequired; + const selectElement = fieldElement.querySelector("select"); + selectElement.required = occupancyTypeField.isRequired; const optionValues = occupancyTypeField.occupancyTypeFieldValues.split("\n"); for (const optionValue of optionValues) { const optionElement = document.createElement("option"); optionElement.value = optionValue; optionElement.textContent = optionValue; - fieldElement.querySelector("select").append(optionElement); + selectElement.append(optionElement); } } lotOccupancyFieldsContainerElement.append(fieldElement); @@ -220,7 +217,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + "Searching..." + "

"; - cityssm.postJSON(urlPrefix + "/lots/doSearchLots", lotSelectFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/doSearchLots", lotSelectFormElement, (responseJSON) => { if (responseJSON.count === 0) { lotSelectResultsElement.innerHTML = '
' + @@ -241,10 +238,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); panelBlockElement.innerHTML = '
' + ('
' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "
" + '' + - cityssm.escapeHTML(lot.mapName) + + cityssm.escapeHTML(lot.mapName || "") + "" + "
") + ('
' + @@ -265,14 +262,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); const createLotAndSelect = (submitEvent) => { submitEvent.preventDefault(); const lotName = lotSelectModalElement.querySelector("#lotCreate--lotName").value; - cityssm.postJSON(urlPrefix + "/lots/doCreateLot", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/doCreateLot", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { renderSelectedLotAndClose(responseJSON.lotId, lotName); } else { bulmaJS.alert({ title: "Error Creating " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -330,9 +327,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); optionElement.textContent = map.mapName || "(No Name)"; mapElement.append(optionElement); } - modalElement - .querySelector("#form--lotCreate") - .addEventListener("submit", createLotAndSelect); + modalElement.querySelector("#form--lotCreate").addEventListener("submit", createLotAndSelect); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -340,9 +335,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }); document.querySelector(".is-lot-view-button").addEventListener("click", () => { - const lotId = document.querySelector("#lotOccupancy--lotId").value; + const lotId = document.querySelector("#lotOccupancy--lotId") + .value; if (lotId) { - window.open(urlPrefix + "/lots/" + lotId); + window.open(los.urlPrefix + "/lots/" + lotId); } else { bulmaJS.alert({ @@ -365,9 +361,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }); los.initializeDatePickers(formElement); - document - .querySelector("#lotOccupancy--occupancyStartDateString") - .addEventListener("change", () => { + document.querySelector("#lotOccupancy--occupancyStartDateString").addEventListener("change", () => { const endDatePicker = document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker; endDatePicker.min = document.querySelector("#lotOccupancy--occupancyStartDateString").value; endDatePicker.refresh(); @@ -385,7 +379,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const editOccupant = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lotOccupancies/doUpdateLotOccupancyOccupant", editFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doUpdateLotOccupancyOccupant", editFormElement, (responseJSON) => { if (responseJSON.success) { lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; editCloseModalFunction(); @@ -394,7 +388,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.occupant, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -447,10 +441,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }; const deleteLotOccupancyOccupant = (clickEvent) => { - const lotOccupantIndex = clickEvent.currentTarget.closest("tr").dataset - .lotOccupantIndex; + const lotOccupantIndex = clickEvent.currentTarget.closest("tr") + .dataset.lotOccupantIndex; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancyOccupant", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyOccupant", { lotOccupancyId, lotOccupantIndex }, (responseJSON) => { @@ -461,7 +455,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Removing " + exports.aliases.occupant, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -514,7 +508,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + cityssm.escapeHTML(lotOccupancyOccupant.lotOccupantType) + "" + - ("" + cityssm.escapeHTML(lotOccupancyOccupant.occupantName) + "") + + ("" + + cityssm.escapeHTML(lotOccupancyOccupant.occupantName || "") + + "") + ("" + (lotOccupancyOccupant.occupantAddress1 ? cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress1) + "
" @@ -525,9 +521,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); (lotOccupancyOccupant.occupantCity ? cityssm.escapeHTML(lotOccupancyOccupant.occupantCity) + ", " : "") + - cityssm.escapeHTML(lotOccupancyOccupant.occupantProvince) + + cityssm.escapeHTML(lotOccupancyOccupant.occupantProvince || "") + "
" + - cityssm.escapeHTML(lotOccupancyOccupant.occupantPostalCode) + + cityssm.escapeHTML(lotOccupancyOccupant.occupantPostalCode || "") + "") + ("" + (lotOccupancyOccupant.occupantPhoneNumber @@ -551,12 +547,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); "") + "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditLotOccupancyOccupant); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteLotOccupancyOccupant); + tableRowElement.querySelector(".button--edit").addEventListener("click", openEditLotOccupancyOccupant); + tableRowElement.querySelector(".button--delete").addEventListener("click", deleteLotOccupancyOccupant); tableElement.querySelector("tbody").append(tableRowElement); } occupantsContainer.append(tableElement); @@ -567,7 +559,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let searchFormElement; let searchResultsElement; const addOccupant = (formOrObject) => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyOccupant", formOrObject, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doAddLotOccupancyOccupant", formOrObject, (responseJSON) => { if (responseJSON.success) { lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; addCloseModalFunction(); @@ -576,7 +568,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.occupant, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -623,7 +615,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + "Searching..." + "
"; - cityssm.postJSON(urlPrefix + "/lotOccupancies/doSearchPastOccupants", searchFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doSearchPastOccupants", searchFormElement, (responseJSON) => { pastOccupantSearchResults = responseJSON.occupants; const panelElement = document.createElement("div"); panelElement.className = "panel"; @@ -633,28 +625,29 @@ Object.defineProperty(exports, "__esModule", { value: true }); panelBlockElement.dataset.index = index.toString(); panelBlockElement.innerHTML = "" + - cityssm.escapeHTML(occupant.occupantName) + + cityssm.escapeHTML(occupant.occupantName || "") + "" + "
" + '
' + ('
' + - cityssm.escapeHTML(occupant.occupantAddress1) + + cityssm.escapeHTML(occupant.occupantAddress1 || "") + "
" + (occupant.occupantAddress2 - ? cityssm.escapeHTML(occupant.occupantAddress2) + "
" + ? cityssm.escapeHTML(occupant.occupantAddress2) + + "
" : "") + - cityssm.escapeHTML(occupant.occupantCity) + + cityssm.escapeHTML(occupant.occupantCity || "") + ", " + - cityssm.escapeHTML(occupant.occupantProvince) + + cityssm.escapeHTML(occupant.occupantProvince || "") + "
" + - cityssm.escapeHTML(occupant.occupantPostalCode) + + cityssm.escapeHTML(occupant.occupantPostalCode || "") + "
") + ('
' + (occupant.occupantPhoneNumber ? cityssm.escapeHTML(occupant.occupantPhoneNumber) + "
" : "") + - cityssm.escapeHTML(occupant.occupantEmailAddress) + + cityssm.escapeHTML(occupant.occupantEmailAddress || "") + "
" + "
") + "
"; @@ -692,9 +685,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); searchFormElement.addEventListener("submit", (formEvent) => { formEvent.preventDefault(); }); - modalElement - .querySelector("#lotOccupancyOccupantCopy--searchFilter") - .addEventListener("change", searchOccupants); + modalElement.querySelector("#lotOccupancyOccupantCopy--searchFilter").addEventListener("change", searchOccupants); addCloseModalFunction = closeModalFunction; }, onremoved: () => { @@ -717,7 +708,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const editComment = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lotOccupancies/doUpdateLotOccupancyComment", editFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doUpdateLotOccupancyComment", editFormElement, (responseJSON) => { if (responseJSON.success) { lotOccupancyComments = responseJSON.lotOccupancyComments; editCloseModalFunction(); @@ -726,7 +717,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -766,7 +757,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const lotOccupancyCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset .lotOccupancyCommentId, 10); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancyComment", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyComment", { lotOccupancyId, lotOccupancyCommentId }, (responseJSON) => { @@ -777,7 +768,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Removing Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -818,7 +809,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); lotOccupancyComment.lotOccupancyCommentId.toString(); tableRowElement.innerHTML = "" + - cityssm.escapeHTML(lotOccupancyComment.recordCreate_userName) + + cityssm.escapeHTML(lotOccupancyComment.recordCreate_userName || "") + "" + "" + lotOccupancyComment.lotOccupancyCommentDateString + @@ -827,7 +818,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); : " " + lotOccupancyComment.lotOccupancyCommentTimeString) + "" + "" + - cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment) + + cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment || "") + "" + ('' + '
' + @@ -840,12 +831,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); "") + "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditLotOccupancyComment); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteLotOccupancyComment); + tableRowElement.querySelector(".button--edit").addEventListener("click", openEditLotOccupancyComment); + tableRowElement.querySelector(".button--delete").addEventListener("click", deleteLotOccupancyComment); tableElement.querySelector("tbody").append(tableRowElement); } containerElement.innerHTML = ""; @@ -856,7 +843,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const addComment = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyComment", addFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doAddLotOccupancyComment", addFormElement, (responseJSON) => { if (responseJSON.success) { lotOccupancyComments = responseJSON.lotOccupancyComments; addCloseModalFunction(); @@ -865,7 +852,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -906,7 +893,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteLotOccupancyFee = (clickEvent) => { const feeId = clickEvent.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancyFee", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyFee", { lotOccupancyId, feeId }, (responseJSON) => { @@ -917,7 +904,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -973,7 +960,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '' + - cityssm.escapeHTML(lotOccupancyFee.feeName) + + cityssm.escapeHTML(lotOccupancyFee.feeName || "") + "" + (lotOccupancyFee.quantity === 1 ? "" @@ -1017,7 +1004,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let feeFilterElement; let feeFilterResultsElement; const doAddFee = (feeId, quantity = 1) => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyFee", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doAddLotOccupancyFee", { lotOccupancyId, feeId, quantity @@ -1030,7 +1017,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1075,7 +1062,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }; const filterFees = () => { - const filterStringPieces = feeFilterElement.value.trim().toLowerCase().split(" "); + const filterStringPieces = feeFilterElement.value + .trim() + .toLowerCase() + .split(" "); feeFilterResultsElement.innerHTML = ""; for (const feeCategory of feeCategories) { const categoryContainerElement = document.createElement("div"); @@ -1084,7 +1074,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); feeCategory.feeCategoryId.toString(); categoryContainerElement.innerHTML = '

' + - cityssm.escapeHTML(feeCategory.feeCategory) + + cityssm.escapeHTML(feeCategory.feeCategory || "") + "

" + '
'; let hasFees = false; @@ -1111,10 +1101,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); panelBlockElement.href = "#"; panelBlockElement.innerHTML = "" + - cityssm.escapeHTML(fee.feeName) + + cityssm.escapeHTML(fee.feeName || "") + "
" + "" + - cityssm.escapeHTML(fee.feeDescription).replace(/\n/g, "
") + + cityssm.escapeHTML(fee.feeDescription || "").replace(/\n/g, "
") + "
"; panelBlockElement.addEventListener("click", tryAddFee); categoryContainerElement.querySelector(".panel").append(panelBlockElement); @@ -1128,7 +1118,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); onshow: (modalElement) => { feeFilterElement = modalElement.querySelector("#feeSelect--feeName"); feeFilterResultsElement = modalElement.querySelector("#resultsContainer--feeSelect"); - cityssm.postJSON(urlPrefix + "/lotOccupancies/doGetFees", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doGetFees", { lotOccupancyId }, (responseJSON) => { feeCategories = responseJSON.feeCategories; @@ -1162,7 +1152,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteLotOccupancyTransaction = (clickEvent) => { const transactionIndex = clickEvent.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancyTransaction", { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyTransaction", { lotOccupancyId, transactionIndex }, (responseJSON) => { @@ -1173,7 +1163,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Transaction", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1228,10 +1218,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); lotOccupancyTransaction.transactionDateString + "" + ("" + - cityssm.escapeHTML(lotOccupancyTransaction.externalReceiptNumber) + + cityssm.escapeHTML(lotOccupancyTransaction.externalReceiptNumber || "") + "
" + "" + - cityssm.escapeHTML(lotOccupancyTransaction.transactionNote) + + cityssm.escapeHTML(lotOccupancyTransaction.transactionNote || "") + "" + "") + ('$' + @@ -1268,7 +1258,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCloseModalFunction; const doAddTransaction = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyTransaction", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doAddLotOccupancyTransaction", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; addCloseModalFunction(); @@ -1277,7 +1267,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.confirm({ title: "Error Adding Transaction", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1297,7 +1287,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); addCloseModalFunction = closeModalFunction; - modalElement.querySelector("form").addEventListener("submit", doAddTransaction); + modalElement + .querySelector("form") + .addEventListener("submit", doAddTransaction); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); diff --git a/public-typescript/lotOccupancyEdit.ts b/public-typescript/lotOccupancyEdit.ts index f9060fe5..b0c9dd3f 100644 --- a/public-typescript/lotOccupancyEdit.ts +++ b/public-typescript/lotOccupancyEdit.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -13,8 +13,6 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const lotOccupancyId = ( document.querySelector("#lotOccupancy--lotOccupancyId") as HTMLInputElement ).value; @@ -45,7 +43,7 @@ declare const bulmaJS: BulmaJS; formEvent.preventDefault(); cityssm.postJSON( - urlPrefix + + los.urlPrefix + "/lotOccupancies/" + (isCreate ? "doCreateLotOccupancy" : "doUpdateLotOccupancy"), formElement, @@ -59,7 +57,7 @@ declare const bulmaJS: BulmaJS; if (isCreate || refreshAfterSave) { window.location.href = - urlPrefix + + los.urlPrefix + "/lotOccupancies/" + responseJSON.lotOccupancyId + "/edit?t=" + @@ -73,7 +71,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Saving " + exports.aliases.occupancy, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -88,43 +86,43 @@ declare const bulmaJS: BulmaJS; } if (!isCreate) { - document - .querySelector("#button--deleteLotOccupancy") - .addEventListener("click", (clickEvent) => { - clickEvent.preventDefault(); + ( + document.querySelector("#button--deleteLotOccupancy") as HTMLButtonElement + ).addEventListener("click", (clickEvent) => { + clickEvent.preventDefault(); - const doDelete = () => { - cityssm.postJSON( - urlPrefix + "/lotOccupancies/doDeleteLotOccupancy", - { - lotOccupancyId - }, - (responseJSON: { success: boolean; errorMessage?: string }) => { - if (responseJSON.success) { - cityssm.disableNavBlocker(); - window.location.href = - urlPrefix + "/lotOccupancies?t=" + Date.now(); - } else { - bulmaJS.alert({ - title: "Error Deleting Record", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); - } + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancy", + { + lotOccupancyId + }, + (responseJSON: { success: boolean; errorMessage?: string }) => { + if (responseJSON.success) { + cityssm.disableNavBlocker(); + window.location.href = + los.urlPrefix + "/lotOccupancies?t=" + Date.now(); + } else { + bulmaJS.alert({ + title: "Error Deleting Record", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); } - ); - }; - - bulmaJS.confirm({ - title: "Delete " + exports.aliases.occupancy + " Record", - message: "Are you sure you want to delete this record?", - contextualColorName: "warning", - okButton: { - text: "Yes, Delete", - callbackFunction: doDelete } - }); + ); + }; + + bulmaJS.confirm({ + title: "Delete " + exports.aliases.occupancy + " Record", + message: "Are you sure you want to delete this record?", + contextualColorName: "warning", + okButton: { + text: "Yes, Delete", + callbackFunction: doDelete + } }); + }); } // Occupancy Type @@ -151,7 +149,7 @@ declare const bulmaJS: BulmaJS; } cityssm.postJSON( - urlPrefix + "/lotOccupancies/doGetOccupancyTypeFields", + los.urlPrefix + "/lotOccupancies/doGetOccupancyTypeFields", { occupancyTypeId: occupancyTypeIdElement.value }, @@ -187,8 +185,8 @@ declare const bulmaJS: BulmaJS; '">' + '
'; - fieldElement.querySelector("label").textContent = - occupancyTypeField.occupancyTypeField; + (fieldElement.querySelector("label") as HTMLLabelElement).textContent = + occupancyTypeField.occupancyTypeField as string; if (occupancyTypeField.occupancyTypeFieldValues === "") { const inputElement = document.createElement("input"); @@ -201,17 +199,19 @@ declare const bulmaJS: BulmaJS; inputElement.type = "text"; - inputElement.required = occupancyTypeField.isRequired; - inputElement.minLength = occupancyTypeField.minimumLength; - inputElement.maxLength = occupancyTypeField.maximumLength; + inputElement.required = occupancyTypeField.isRequired as boolean; + inputElement.minLength = occupancyTypeField.minimumLength as number; + inputElement.maxLength = occupancyTypeField.maximumLength as number; if (occupancyTypeField.pattern && occupancyTypeField.pattern !== "") { inputElement.pattern = occupancyTypeField.pattern; } - fieldElement.querySelector(".control").append(inputElement); + (fieldElement.querySelector(".control") as HTMLElement).append( + inputElement + ); } else { - fieldElement.querySelector(".control").innerHTML = + (fieldElement.querySelector(".control") as HTMLElement).innerHTML = '
"; - fieldElement.querySelector("select").required = - occupancyTypeField.isRequired; + const selectElement = fieldElement.querySelector( + "select" + ) as HTMLSelectElement; - const optionValues = - occupancyTypeField.occupancyTypeFieldValues.split("\n"); + selectElement.required = occupancyTypeField.isRequired as boolean; + + const optionValues = ( + occupancyTypeField.occupancyTypeFieldValues as string + ).split("\n"); for (const optionValue of optionValues) { const optionElement = document.createElement("option"); optionElement.value = optionValue; optionElement.textContent = optionValue; - fieldElement.querySelector("select").append(optionElement); + selectElement.append(optionElement); } } @@ -304,8 +308,8 @@ declare const bulmaJS: BulmaJS; const selectedLotElement = clickEvent.currentTarget as HTMLElement; renderSelectedLotAndClose( - selectedLotElement.dataset.lotId, - selectedLotElement.dataset.lotName + selectedLotElement.dataset.lotId!, + selectedLotElement.dataset.lotName! ); }; @@ -317,7 +321,7 @@ declare const bulmaJS: BulmaJS; "

"; cityssm.postJSON( - urlPrefix + "/lots/doSearchLots", + los.urlPrefix + "/lots/doSearchLots", lotSelectFormElement, (responseJSON: { count: number; lots: recordTypes.Lot[] }) => { if (responseJSON.count === 0) { @@ -345,17 +349,17 @@ declare const bulmaJS: BulmaJS; panelBlockElement.innerHTML = '
' + ('
' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "
" + '' + - cityssm.escapeHTML(lot.mapName) + + cityssm.escapeHTML(lot.mapName || "") + "" + "
") + ('
' + cityssm.escapeHTML(lot.lotStatus as string) + "
" + '' + - (lot.lotOccupancyCount > 0 ? "Currently Occupied" : "") + + (lot.lotOccupancyCount! > 0 ? "Currently Occupied" : "") + "" + "
") + "
"; @@ -379,15 +383,15 @@ declare const bulmaJS: BulmaJS; ).value; cityssm.postJSON( - urlPrefix + "/lots/doCreateLot", + los.urlPrefix + "/lots/doCreateLot", submitEvent.currentTarget, (responseJSON: { success: boolean; errorMessage?: string; lotId?: number }) => { if (responseJSON.success) { - renderSelectedLotAndClose(responseJSON.lotId, lotName); + renderSelectedLotAndClose(responseJSON.lotId!, lotName); } else { bulmaJS.alert({ title: "Error Creating " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -432,10 +436,12 @@ declare const bulmaJS: BulmaJS; occupancyStatusFilterElement.value = ""; } - lotSelectFormElement = modalElement.querySelector("#form--lotSelect"); + lotSelectFormElement = modalElement.querySelector( + "#form--lotSelect" + ) as HTMLFormElement; lotSelectResultsElement = modalElement.querySelector( "#resultsContainer--lotSelect" - ); + ) as HTMLElement; lotSelectFormElement.addEventListener("submit", (submitEvent) => { submitEvent.preventDefault(); @@ -481,14 +487,14 @@ declare const bulmaJS: BulmaJS; for (const map of exports.maps as recordTypes.Map[]) { const optionElement = document.createElement("option"); - optionElement.value = map.mapId.toString(); + optionElement.value = map.mapId!.toString(); optionElement.textContent = map.mapName || "(No Name)"; mapElement.append(optionElement); } - modalElement - .querySelector("#form--lotCreate") - .addEventListener("submit", createLotAndSelect); + ( + modalElement.querySelector("#form--lotCreate") as HTMLFormElement + ).addEventListener("submit", createLotAndSelect); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -496,51 +502,56 @@ declare const bulmaJS: BulmaJS; }); }); - document.querySelector(".is-lot-view-button").addEventListener("click", () => { - const lotId = (document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value; + (document.querySelector(".is-lot-view-button") as HTMLButtonElement).addEventListener( + "click", + () => { + const lotId = (document.querySelector("#lotOccupancy--lotId") as HTMLInputElement) + .value; - if (lotId) { - window.open(urlPrefix + "/lots/" + lotId); - } else { - bulmaJS.alert({ - message: "No " + exports.aliases.lot.toLowerCase() + " selected.", - contextualColorName: "info" - }); + if (lotId) { + window.open(los.urlPrefix + "/lots/" + lotId); + } else { + bulmaJS.alert({ + message: "No " + exports.aliases.lot.toLowerCase() + " selected.", + contextualColorName: "info" + }); + } } - }); + ); - document.querySelector(".is-clear-lot-button").addEventListener("click", () => { - if (lotNameElement.disabled) { - bulmaJS.alert({ - message: "You need to unlock the field before clearing it.", - contextualColorName: "info" - }); - } else { - lotNameElement.value = "(No " + exports.aliases.lot + ")"; - (document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value = ""; - setUnsavedChanges(); + (document.querySelector(".is-clear-lot-button") as HTMLButtonElement).addEventListener( + "click", + () => { + if (lotNameElement.disabled) { + bulmaJS.alert({ + message: "You need to unlock the field before clearing it.", + contextualColorName: "info" + }); + } else { + lotNameElement.value = "(No " + exports.aliases.lot + ")"; + (document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value = ""; + setUnsavedChanges(); + } } - }); + ); // Start Date los.initializeDatePickers(formElement); - document - .querySelector("#lotOccupancy--occupancyStartDateString") - .addEventListener("change", () => { - const endDatePicker = ( - document.querySelector("#lotOccupancy--occupancyEndDateString") as HTMLInputElement - ).bulmaCalendar.datePicker; + ( + document.querySelector("#lotOccupancy--occupancyStartDateString") as HTMLInputElement + ).addEventListener("change", () => { + const endDatePicker = ( + document.querySelector("#lotOccupancy--occupancyEndDateString") as HTMLInputElement + ).bulmaCalendar.datePicker; - endDatePicker.min = ( - document.querySelector( - "#lotOccupancy--occupancyStartDateString" - ) as HTMLInputElement - ).value; + endDatePicker.min = ( + document.querySelector("#lotOccupancy--occupancyStartDateString") as HTMLInputElement + ).value; - endDatePicker.refresh(); - }); + endDatePicker.refresh(); + }); los.initializeUnlockFieldButtons(formElement); @@ -551,11 +562,12 @@ declare const bulmaJS: BulmaJS; if (!isCreate) { let lotOccupancyOccupants: recordTypes.LotOccupancyOccupant[] = exports.lotOccupancyOccupants; + delete exports.lotOccupancyOccupants; const openEditLotOccupancyOccupant = (clickEvent: Event) => { const lotOccupantIndex = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset.lotOccupantIndex, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotOccupantIndex!, 10 ); @@ -563,7 +575,7 @@ declare const bulmaJS: BulmaJS; (currentLotOccupancyOccupant) => { return currentLotOccupancyOccupant.lotOccupantIndex === lotOccupantIndex; } - ); + )!; let editFormElement: HTMLFormElement; let editCloseModalFunction: () => void; @@ -572,7 +584,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/lotOccupancies/doUpdateLotOccupancyOccupant", + los.urlPrefix + "/lotOccupancies/doUpdateLotOccupancyOccupant", editFormElement, (responseJSON: { success: boolean; @@ -580,13 +592,13 @@ declare const bulmaJS: BulmaJS; lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[]; }) => { if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; + lotOccupancyOccupants = responseJSON.lotOccupancyOccupants!; editCloseModalFunction(); renderLotOccupancyOccupants(); } else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.occupant, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -634,7 +646,7 @@ declare const bulmaJS: BulmaJS; if (!lotOccupantTypeSelected) { const optionElement = document.createElement("option"); - optionElement.value = lotOccupancyOccupant.lotOccupantTypeId.toString(); + optionElement.value = lotOccupancyOccupant.lotOccupantTypeId!.toString(); optionElement.textContent = lotOccupancyOccupant.lotOccupantType as string; optionElement.selected = true; @@ -645,45 +657,45 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantName" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantName; + ).value = lotOccupancyOccupant.occupantName!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantAddress1" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantAddress1; + ).value = lotOccupancyOccupant.occupantAddress1!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantAddress2" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantAddress2; + ).value = lotOccupancyOccupant.occupantAddress2!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantCity" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantCity; + ).value = lotOccupancyOccupant.occupantCity!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantProvince" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantProvince; + ).value = lotOccupancyOccupant.occupantProvince!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantPostalCode" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantPostalCode; + ).value = lotOccupancyOccupant.occupantPostalCode!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantPhoneNumber" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantPhoneNumber; + ).value = lotOccupancyOccupant.occupantPhoneNumber!; ( modalElement.querySelector( "#lotOccupancyOccupantEdit--occupantEmailAddress" ) as HTMLInputElement - ).value = lotOccupancyOccupant.occupantEmailAddress; + ).value = lotOccupancyOccupant.occupantEmailAddress!; }, onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); @@ -694,7 +706,7 @@ declare const bulmaJS: BulmaJS; ) as HTMLInputElement ).focus(); - editFormElement = modalElement.querySelector("form"); + editFormElement = modalElement.querySelector("form")!; editFormElement.addEventListener("submit", editOccupant); editCloseModalFunction = closeModalFunction; @@ -706,12 +718,12 @@ declare const bulmaJS: BulmaJS; }; const deleteLotOccupancyOccupant = (clickEvent: Event) => { - const lotOccupantIndex = (clickEvent.currentTarget as HTMLElement).closest("tr").dataset - .lotOccupantIndex; + const lotOccupantIndex = (clickEvent.currentTarget as HTMLElement).closest("tr")! + .dataset.lotOccupantIndex; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/lotOccupancies/doDeleteLotOccupancyOccupant", + los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyOccupant", { lotOccupancyId, lotOccupantIndex @@ -727,7 +739,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Removing " + exports.aliases.occupant, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -787,13 +799,15 @@ declare const bulmaJS: BulmaJS; for (const lotOccupancyOccupant of lotOccupancyOccupants) { const tableRowElement = document.createElement("tr"); tableRowElement.dataset.lotOccupantIndex = - lotOccupancyOccupant.lotOccupantIndex.toString(); + lotOccupancyOccupant.lotOccupantIndex!.toString(); tableRowElement.innerHTML = "" + cityssm.escapeHTML(lotOccupancyOccupant.lotOccupantType as string) + "" + - ("" + cityssm.escapeHTML(lotOccupancyOccupant.occupantName) + "") + + ("" + + cityssm.escapeHTML(lotOccupancyOccupant.occupantName || "") + + "") + ("" + (lotOccupancyOccupant.occupantAddress1 ? cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress1) + "
" @@ -804,9 +818,9 @@ declare const bulmaJS: BulmaJS; (lotOccupancyOccupant.occupantCity ? cityssm.escapeHTML(lotOccupancyOccupant.occupantCity) + ", " : "") + - cityssm.escapeHTML(lotOccupancyOccupant.occupantProvince) + + cityssm.escapeHTML(lotOccupancyOccupant.occupantProvince || "") + "
" + - cityssm.escapeHTML(lotOccupancyOccupant.occupantPostalCode) + + cityssm.escapeHTML(lotOccupancyOccupant.occupantPostalCode || "") + "") + ("" + (lotOccupancyOccupant.occupantPhoneNumber @@ -831,244 +845,255 @@ declare const bulmaJS: BulmaJS; "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditLotOccupancyOccupant); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteLotOccupancyOccupant); + ( + tableRowElement.querySelector(".button--edit") as HTMLButtonElement + ).addEventListener("click", openEditLotOccupancyOccupant); - tableElement.querySelector("tbody").append(tableRowElement); + ( + tableRowElement.querySelector(".button--delete") as HTMLButtonElement + ).addEventListener("click", deleteLotOccupancyOccupant); + + tableElement.querySelector("tbody")!.append(tableRowElement); } occupantsContainer.append(tableElement); }; - document.querySelector("#button--addOccupant").addEventListener("click", () => { - let addCloseModalFunction: () => void; + (document.querySelector("#button--addOccupant") as HTMLButtonElement).addEventListener( + "click", + () => { + let addCloseModalFunction: () => void; - let addFormElement: HTMLFormElement; + let addFormElement: HTMLFormElement; - let searchFormElement: HTMLFormElement; - let searchResultsElement: HTMLElement; + let searchFormElement: HTMLFormElement; + let searchResultsElement: HTMLElement; - const addOccupant = ( - formOrObject: HTMLFormElement | recordTypes.LotOccupancyOccupant - ) => { - cityssm.postJSON( - urlPrefix + "/lotOccupancies/doAddLotOccupancyOccupant", - formOrObject, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[]; - }) => { - if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; - addCloseModalFunction(); - renderLotOccupancyOccupants(); - } else { - bulmaJS.alert({ - title: "Error Adding " + exports.aliases.occupant, - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); + const addOccupant = ( + formOrObject: HTMLFormElement | recordTypes.LotOccupancyOccupant + ) => { + cityssm.postJSON( + los.urlPrefix + "/lotOccupancies/doAddLotOccupancyOccupant", + formOrObject, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[]; + }) => { + if (responseJSON.success) { + lotOccupancyOccupants = responseJSON.lotOccupancyOccupants!; + addCloseModalFunction(); + renderLotOccupancyOccupants(); + } else { + bulmaJS.alert({ + title: "Error Adding " + exports.aliases.occupant, + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } } + ); + }; + + const addOccupantFromForm = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + addOccupant(addFormElement); + }; + + let pastOccupantSearchResults: recordTypes.LotOccupancyOccupant[] = []; + + const addOccupantFromCopy = (clickEvent: MouseEvent) => { + clickEvent.preventDefault(); + + const panelBlockElement = clickEvent.currentTarget as HTMLElement; + + const occupant = + pastOccupantSearchResults[ + Number.parseInt(panelBlockElement.dataset.index!, 10) + ]; + + const lotOccupantTypeId = ( + panelBlockElement + .closest(".modal")! + .querySelector( + "#lotOccupancyOccupantCopy--lotOccupantTypeId" + ) as HTMLSelectElement + ).value; + + if (lotOccupantTypeId === "") { + bulmaJS.alert({ + title: "No " + exports.aliases.occupant + " Type Selected", + message: + "Select a type to apply to the newly added " + + exports.aliases.occupant.toLowerCase() + + ".", + contextualColorName: "warning" + }); + } else { + occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10); + occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10); + addOccupant(occupant); } - ); - }; + }; - const addOccupantFromForm = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - addOccupant(addFormElement); - }; + const searchOccupants = (event: Event) => { + event.preventDefault(); - let pastOccupantSearchResults: recordTypes.LotOccupancyOccupant[] = []; + if ( + ( + searchFormElement.querySelector( + "#lotOccupancyOccupantCopy--searchFilter" + ) as HTMLInputElement + ).value === "" + ) { + searchResultsElement.innerHTML = + '
' + + '

Enter a partial name or address in the search field above.

' + + "
"; - const addOccupantFromCopy = (clickEvent: MouseEvent) => { - clickEvent.preventDefault(); + return; + } - const panelBlockElement = clickEvent.currentTarget as HTMLElement; - - const occupant = - pastOccupantSearchResults[Number.parseInt(panelBlockElement.dataset.index, 10)]; - - const lotOccupantTypeId = ( - panelBlockElement - .closest(".modal") - .querySelector( - "#lotOccupancyOccupantCopy--lotOccupantTypeId" - ) as HTMLSelectElement - ).value; - - if (lotOccupantTypeId === "") { - bulmaJS.alert({ - title: "No " + exports.aliases.occupant + " Type Selected", - message: - "Select a type to apply to the newly added " + - exports.aliases.occupant.toLowerCase() + - ".", - contextualColorName: "warning" - }); - } else { - occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10); - occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10); - addOccupant(occupant); - } - }; - - const searchOccupants = (event: Event) => { - event.preventDefault(); - - if ( - ( - searchFormElement.querySelector( - "#lotOccupancyOccupantCopy--searchFilter" - ) as HTMLInputElement - ).value === "" - ) { searchResultsElement.innerHTML = - '
' + - '

Enter a partial name or address in the search field above.

' + + '
' + + '
' + + "Searching..." + "
"; - return; - } + cityssm.postJSON( + los.urlPrefix + "/lotOccupancies/doSearchPastOccupants", + searchFormElement, + (responseJSON: { occupants: recordTypes.LotOccupancyOccupant[] }) => { + pastOccupantSearchResults = responseJSON.occupants; - searchResultsElement.innerHTML = - '
' + - '
' + - "Searching..." + - "
"; + const panelElement = document.createElement("div"); + panelElement.className = "panel"; - cityssm.postJSON( - urlPrefix + "/lotOccupancies/doSearchPastOccupants", - searchFormElement, - (responseJSON: { occupants: recordTypes.LotOccupancyOccupant[] }) => { - pastOccupantSearchResults = responseJSON.occupants; + for (const [index, occupant] of pastOccupantSearchResults.entries()) { + const panelBlockElement = document.createElement("a"); + panelBlockElement.className = "panel-block is-block"; + panelBlockElement.dataset.index = index.toString(); - const panelElement = document.createElement("div"); - panelElement.className = "panel"; - - for (const [index, occupant] of pastOccupantSearchResults.entries()) { - const panelBlockElement = document.createElement("a"); - panelBlockElement.className = "panel-block is-block"; - panelBlockElement.dataset.index = index.toString(); - - panelBlockElement.innerHTML = - "" + - cityssm.escapeHTML(occupant.occupantName) + - "" + - "
" + - '
' + - ('
' + - cityssm.escapeHTML(occupant.occupantAddress1) + + panelBlockElement.innerHTML = + "" + + cityssm.escapeHTML(occupant.occupantName || "") + + "" + "
" + - (occupant.occupantAddress2 - ? cityssm.escapeHTML(occupant.occupantAddress2) + "
" - : "") + - cityssm.escapeHTML(occupant.occupantCity) + - ", " + - cityssm.escapeHTML(occupant.occupantProvince) + - "
" + - cityssm.escapeHTML(occupant.occupantPostalCode) + - "
") + - ('
' + - (occupant.occupantPhoneNumber - ? cityssm.escapeHTML(occupant.occupantPhoneNumber) + - "
" - : "") + - cityssm.escapeHTML(occupant.occupantEmailAddress) + - "
" + - "
") + - "
"; + '
' + + ('
' + + cityssm.escapeHTML(occupant.occupantAddress1 || "") + + "
" + + (occupant.occupantAddress2 + ? cityssm.escapeHTML(occupant.occupantAddress2) + + "
" + : "") + + cityssm.escapeHTML(occupant.occupantCity || "") + + ", " + + cityssm.escapeHTML(occupant.occupantProvince || "") + + "
" + + cityssm.escapeHTML(occupant.occupantPostalCode || "") + + "
") + + ('
' + + (occupant.occupantPhoneNumber + ? cityssm.escapeHTML(occupant.occupantPhoneNumber) + + "
" + : "") + + cityssm.escapeHTML(occupant.occupantEmailAddress || "") + + "
" + + "
") + + "
"; - panelBlockElement.addEventListener("click", addOccupantFromCopy); + panelBlockElement.addEventListener("click", addOccupantFromCopy); - panelElement.append(panelBlockElement); + panelElement.append(panelBlockElement); + } + + searchResultsElement.innerHTML = ""; + searchResultsElement.append(panelElement); + } + ); + }; + + cityssm.openHtmlModal("lotOccupancy-addOccupant", { + onshow: (modalElement) => { + los.populateAliases(modalElement); + + ( + modalElement.querySelector( + "#lotOccupancyOccupantAdd--lotOccupancyId" + ) as HTMLInputElement + ).value = lotOccupancyId; + + const lotOccupantTypeSelectElement = modalElement.querySelector( + "#lotOccupancyOccupantAdd--lotOccupantTypeId" + ) as HTMLSelectElement; + + const lotOccupantTypeCopySelectElement = modalElement.querySelector( + "#lotOccupancyOccupantCopy--lotOccupantTypeId" + ) as HTMLSelectElement; + + for (const lotOccupantType of exports.lotOccupantTypes as recordTypes.LotOccupantType[]) { + const optionElement = document.createElement("option"); + optionElement.value = lotOccupantType.lotOccupantTypeId.toString(); + optionElement.textContent = lotOccupantType.lotOccupantType; + + lotOccupantTypeSelectElement.append(optionElement); + + lotOccupantTypeCopySelectElement.append(optionElement.cloneNode(true)); } - searchResultsElement.innerHTML = ""; - searchResultsElement.append(panelElement); + ( + modalElement.querySelector( + "#lotOccupancyOccupantAdd--occupantCity" + ) as HTMLInputElement + ).value = exports.occupantCityDefault; + + ( + modalElement.querySelector( + "#lotOccupancyOccupantAdd--occupantProvince" + ) as HTMLInputElement + ).value = exports.occupantProvinceDefault; + }, + onshown: (modalElement, closeModalFunction) => { + bulmaJS.toggleHtmlClipped(); + bulmaJS.init(modalElement); + + ( + modalElement.querySelector( + "#lotOccupancyOccupantAdd--lotOccupantTypeId" + ) as HTMLInputElement + ).focus(); + + addFormElement = modalElement.querySelector( + "#form--lotOccupancyOccupantAdd" + ) as HTMLFormElement; + addFormElement.addEventListener("submit", addOccupantFromForm); + + searchResultsElement = modalElement.querySelector( + "#lotOccupancyOccupantCopy--searchResults" + ) as HTMLElement; + + searchFormElement = modalElement.querySelector( + "#form--lotOccupancyOccupantCopy" + ) as HTMLFormElement; + searchFormElement.addEventListener("submit", (formEvent) => { + formEvent.preventDefault(); + }); + + ( + modalElement.querySelector( + "#lotOccupancyOccupantCopy--searchFilter" + ) as HTMLInputElement + ).addEventListener("change", searchOccupants); + + addCloseModalFunction = closeModalFunction; + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); } - ); - }; - - cityssm.openHtmlModal("lotOccupancy-addOccupant", { - onshow: (modalElement) => { - los.populateAliases(modalElement); - - ( - modalElement.querySelector( - "#lotOccupancyOccupantAdd--lotOccupancyId" - ) as HTMLInputElement - ).value = lotOccupancyId; - - const lotOccupantTypeSelectElement = modalElement.querySelector( - "#lotOccupancyOccupantAdd--lotOccupantTypeId" - ) as HTMLSelectElement; - - const lotOccupantTypeCopySelectElement = modalElement.querySelector( - "#lotOccupancyOccupantCopy--lotOccupantTypeId" - ) as HTMLSelectElement; - - for (const lotOccupantType of exports.lotOccupantTypes as recordTypes.LotOccupantType[]) { - const optionElement = document.createElement("option"); - optionElement.value = lotOccupantType.lotOccupantTypeId.toString(); - optionElement.textContent = lotOccupantType.lotOccupantType; - - lotOccupantTypeSelectElement.append(optionElement); - - lotOccupantTypeCopySelectElement.append(optionElement.cloneNode(true)); - } - - ( - modalElement.querySelector( - "#lotOccupancyOccupantAdd--occupantCity" - ) as HTMLInputElement - ).value = exports.occupantCityDefault; - - ( - modalElement.querySelector( - "#lotOccupancyOccupantAdd--occupantProvince" - ) as HTMLInputElement - ).value = exports.occupantProvinceDefault; - }, - onshown: (modalElement, closeModalFunction) => { - bulmaJS.toggleHtmlClipped(); - bulmaJS.init(modalElement); - - ( - modalElement.querySelector( - "#lotOccupancyOccupantAdd--lotOccupantTypeId" - ) as HTMLInputElement - ).focus(); - - addFormElement = modalElement.querySelector("#form--lotOccupancyOccupantAdd"); - addFormElement.addEventListener("submit", addOccupantFromForm); - - searchResultsElement = modalElement.querySelector( - "#lotOccupancyOccupantCopy--searchResults" - ); - - searchFormElement = modalElement.querySelector( - "#form--lotOccupancyOccupantCopy" - ); - searchFormElement.addEventListener("submit", (formEvent) => { - formEvent.preventDefault(); - }); - - modalElement - .querySelector("#lotOccupancyOccupantCopy--searchFilter") - .addEventListener("change", searchOccupants); - - addCloseModalFunction = closeModalFunction; - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + }); + } + ); renderLotOccupancyOccupants(); } @@ -1083,14 +1108,14 @@ declare const bulmaJS: BulmaJS; const openEditLotOccupancyComment = (clickEvent: Event) => { const lotOccupancyCommentId = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset - .lotOccupancyCommentId, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset + .lotOccupancyCommentId!, 10 ); const lotOccupancyComment = lotOccupancyComments.find((currentLotOccupancyComment) => { return currentLotOccupancyComment.lotOccupancyCommentId === lotOccupancyCommentId; - }); + })!; let editFormElement: HTMLFormElement; let editCloseModalFunction: () => void; @@ -1099,7 +1124,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/lotOccupancies/doUpdateLotOccupancyComment", + los.urlPrefix + "/lotOccupancies/doUpdateLotOccupancyComment", editFormElement, (responseJSON: { success: boolean; @@ -1107,13 +1132,13 @@ declare const bulmaJS: BulmaJS; lotOccupancyComments?: recordTypes.LotOccupancyComment[]; }) => { if (responseJSON.success) { - lotOccupancyComments = responseJSON.lotOccupancyComments; + lotOccupancyComments = responseJSON.lotOccupancyComments!; editCloseModalFunction(); renderLotOccupancyComments(); } else { bulmaJS.alert({ title: "Error Updating Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1140,27 +1165,27 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#lotOccupancyCommentEdit--lotOccupancyComment" ) as HTMLInputElement - ).value = lotOccupancyComment.lotOccupancyComment; + ).value = lotOccupancyComment.lotOccupancyComment!; const lotOccupancyCommentDateStringElement = modalElement.querySelector( "#lotOccupancyCommentEdit--lotOccupancyCommentDateString" ) as HTMLInputElement; lotOccupancyCommentDateStringElement.value = - lotOccupancyComment.lotOccupancyCommentDateString; + lotOccupancyComment.lotOccupancyCommentDateString!; const currentDateString = cityssm.dateToString(new Date()); lotOccupancyCommentDateStringElement.max = - lotOccupancyComment.lotOccupancyCommentDateString <= currentDateString + lotOccupancyComment.lotOccupancyCommentDateString! <= currentDateString ? currentDateString - : lotOccupancyComment.lotOccupancyCommentDateString; + : lotOccupancyComment.lotOccupancyCommentDateString!; ( modalElement.querySelector( "#lotOccupancyCommentEdit--lotOccupancyCommentTimeString" ) as HTMLInputElement - ).value = lotOccupancyComment.lotOccupancyCommentTimeString; + ).value = lotOccupancyComment.lotOccupancyCommentTimeString!; }, onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); @@ -1174,7 +1199,7 @@ declare const bulmaJS: BulmaJS; ) as HTMLTextAreaElement ).focus(); - editFormElement = modalElement.querySelector("form"); + editFormElement = modalElement.querySelector("form")!; editFormElement.addEventListener("submit", editComment); editCloseModalFunction = closeModalFunction; @@ -1187,14 +1212,14 @@ declare const bulmaJS: BulmaJS; const deleteLotOccupancyComment = (clickEvent: Event) => { const lotOccupancyCommentId = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset - .lotOccupancyCommentId, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset + .lotOccupancyCommentId!, 10 ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/lotOccupancies/doDeleteLotOccupancyComment", + los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyComment", { lotOccupancyId, lotOccupancyCommentId @@ -1210,7 +1235,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Removing Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1256,11 +1281,11 @@ declare const bulmaJS: BulmaJS; for (const lotOccupancyComment of lotOccupancyComments) { const tableRowElement = document.createElement("tr"); tableRowElement.dataset.lotOccupancyCommentId = - lotOccupancyComment.lotOccupancyCommentId.toString(); + lotOccupancyComment.lotOccupancyCommentId!.toString(); tableRowElement.innerHTML = "" + - cityssm.escapeHTML(lotOccupancyComment.recordCreate_userName) + + cityssm.escapeHTML(lotOccupancyComment.recordCreate_userName || "") + "" + "" + lotOccupancyComment.lotOccupancyCommentDateString + @@ -1269,7 +1294,7 @@ declare const bulmaJS: BulmaJS; : " " + lotOccupancyComment.lotOccupancyCommentTimeString) + "" + "" + - cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment) + + cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment || "") + "" + ('' + '
' + @@ -1283,79 +1308,83 @@ declare const bulmaJS: BulmaJS; "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditLotOccupancyComment); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteLotOccupancyComment); + ( + tableRowElement.querySelector(".button--edit") as HTMLButtonElement + ).addEventListener("click", openEditLotOccupancyComment); - tableElement.querySelector("tbody").append(tableRowElement); + ( + tableRowElement.querySelector(".button--delete") as HTMLButtonElement + ).addEventListener("click", deleteLotOccupancyComment); + + tableElement.querySelector("tbody")!.append(tableRowElement); } containerElement.innerHTML = ""; containerElement.append(tableElement); }; - document.querySelector("#button--addComment").addEventListener("click", () => { - let addFormElement: HTMLFormElement; - let addCloseModalFunction: () => void; + (document.querySelector("#button--addComment") as HTMLButtonElement).addEventListener( + "click", + () => { + let addFormElement: HTMLFormElement; + let addCloseModalFunction: () => void; - const addComment = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); + const addComment = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); - cityssm.postJSON( - urlPrefix + "/lotOccupancies/doAddLotOccupancyComment", - addFormElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupancyComments?: recordTypes.LotOccupancyComment[]; - }) => { - if (responseJSON.success) { - lotOccupancyComments = responseJSON.lotOccupancyComments; - addCloseModalFunction(); - renderLotOccupancyComments(); - } else { - bulmaJS.alert({ - title: "Error Adding Comment", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); + cityssm.postJSON( + los.urlPrefix + "/lotOccupancies/doAddLotOccupancyComment", + addFormElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupancyComments?: recordTypes.LotOccupancyComment[]; + }) => { + if (responseJSON.success) { + lotOccupancyComments = responseJSON.lotOccupancyComments!; + addCloseModalFunction(); + renderLotOccupancyComments(); + } else { + bulmaJS.alert({ + title: "Error Adding Comment", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } } + ); + }; + + cityssm.openHtmlModal("lotOccupancy-addComment", { + onshow: (modalElement) => { + los.populateAliases(modalElement); + + ( + modalElement.querySelector( + "#lotOccupancyCommentAdd--lotOccupancyId" + ) as HTMLInputElement + ).value = lotOccupancyId; + }, + onshown: (modalElement, closeModalFunction) => { + bulmaJS.toggleHtmlClipped(); + + ( + modalElement.querySelector( + "#lotOccupancyCommentAdd--lotOccupancyComment" + ) as HTMLTextAreaElement + ).focus(); + + addFormElement = modalElement.querySelector("form")!; + addFormElement.addEventListener("submit", addComment); + + addCloseModalFunction = closeModalFunction; + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); } - ); - }; - - cityssm.openHtmlModal("lotOccupancy-addComment", { - onshow: (modalElement) => { - los.populateAliases(modalElement); - - ( - modalElement.querySelector( - "#lotOccupancyCommentAdd--lotOccupancyId" - ) as HTMLInputElement - ).value = lotOccupancyId; - }, - onshown: (modalElement, closeModalFunction) => { - bulmaJS.toggleHtmlClipped(); - - ( - modalElement.querySelector( - "#lotOccupancyCommentAdd--lotOccupancyComment" - ) as HTMLTextAreaElement - ).focus(); - - addFormElement = modalElement.querySelector("form"); - addFormElement.addEventListener("submit", addComment); - - addCloseModalFunction = closeModalFunction; - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + }); + } + ); renderLotOccupancyComments(); } @@ -1377,8 +1406,8 @@ declare const bulmaJS: BulmaJS; for (const lotOccupancyFee of lotOccupancyFees) { feeGrandTotal += - (lotOccupancyFee.feeAmount + lotOccupancyFee.taxAmount) * - lotOccupancyFee.quantity; + (lotOccupancyFee.feeAmount! + lotOccupancyFee.taxAmount!) * + lotOccupancyFee.quantity!; } return feeGrandTotal; @@ -1393,7 +1422,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/lotOccupancies/doDeleteLotOccupancyFee", + los.urlPrefix + "/lotOccupancies/doDeleteLotOccupancyFee", { lotOccupancyId, feeId @@ -1404,12 +1433,12 @@ declare const bulmaJS: BulmaJS; lotOccupancyFees?: recordTypes.LotOccupancyFee[]; }) => { if (responseJSON.success) { - lotOccupancyFees = responseJSON.lotOccupancyFees; + lotOccupancyFees = responseJSON.lotOccupancyFees!; renderLotOccupancyFees(); } else { bulmaJS.alert({ title: "Error Deleting Fee", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1465,7 +1494,7 @@ declare const bulmaJS: BulmaJS; for (const lotOccupancyFee of lotOccupancyFees) { const tableRowElement = document.createElement("tr"); tableRowElement.className = "container--lotOccupancyFee"; - tableRowElement.dataset.feeId = lotOccupancyFee.feeId.toString(); + tableRowElement.dataset.feeId = lotOccupancyFee.feeId!.toString(); tableRowElement.dataset.includeQuantity = lotOccupancyFee.includeQuantity ? "1" : "0"; @@ -1474,12 +1503,12 @@ declare const bulmaJS: BulmaJS; '' + - cityssm.escapeHTML(lotOccupancyFee.feeName) + + cityssm.escapeHTML(lotOccupancyFee.feeName || "") + "" + (lotOccupancyFee.quantity === 1 ? "" : '$' + - lotOccupancyFee.feeAmount.toFixed(2) + + lotOccupancyFee.feeAmount!.toFixed(2) + "" + "×" + '' + @@ -1487,7 +1516,7 @@ declare const bulmaJS: BulmaJS; "" + "=") + '$' + - (lotOccupancyFee.feeAmount * lotOccupancyFee.quantity).toFixed(2) + + (lotOccupancyFee.feeAmount! * lotOccupancyFee.quantity!).toFixed(2) + "" + ('' + '
"; - cityssm.postJSON(urlPrefix + "/lotOccupancies/doSearchLotOccupancies", searchFilterFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doSearchLotOccupancies", searchFilterFormElement, (responseJSON) => { if (responseJSON.lotOccupancies.length === 0) { searchResultsContainerElement.innerHTML = '
' + @@ -66,16 +66,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); for (const occupant of lotOccupancy.lotOccupancyOccupants) { occupantsHTML += '' + - cityssm.escapeHTML(occupant.occupantName) + + cityssm.escapeHTML(occupant.occupantName || "") + "
"; } resultsTbodyElement.insertAdjacentHTML("beforeend", "" + ('' + occupancyTimeHTML + "") + ("" + '' + @@ -85,9 +85,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); ("" + (lotOccupancy.lotName ? '' + @@ -111,7 +111,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); (lotOccupancyPrints.length > 0 ? "" + '" + cityssm.escapeHTML(exports.aliases.occupancyStartDate) + "") + "End Date" + ("" + cityssm.escapeHTML(exports.aliases.occupants) + "") + - (lotOccupancyPrints.length > 0 ? 'Print' : "") + + (lotOccupancyPrints.length > 0 + ? 'Print' + : "") + "" + "" + '
' + @@ -166,14 +168,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
"; searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); if (offset > 0) { - searchResultsContainerElement - .querySelector("button[data-page='previous']") - .addEventListener("click", previousAndGetLotOccupancies); + searchResultsContainerElement.querySelector("button[data-page='previous']").addEventListener("click", previousAndGetLotOccupancies); } if (limit + offset < responseJSON.count) { - searchResultsContainerElement - .querySelector("button[data-page='next']") - .addEventListener("click", nextAndGetLotOccupancies); + searchResultsContainerElement.querySelector("button[data-page='next']").addEventListener("click", nextAndGetLotOccupancies); } }); }; diff --git a/public-typescript/lotOccupancySearch.ts b/public-typescript/lotOccupancySearch.ts index 0cfc62a6..2c5b0e96 100644 --- a/public-typescript/lotOccupancySearch.ts +++ b/public-typescript/lotOccupancySearch.ts @@ -1,5 +1,6 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -7,7 +8,7 @@ import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; declare const cityssm: cityssmGlobal; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; const lotOccupancyPrints: string[] = exports.lotOccupancyPrints; @@ -37,7 +38,7 @@ declare const cityssm: cityssmGlobal; ""; cityssm.postJSON( - urlPrefix + "/lotOccupancies/doSearchLotOccupancies", + los.urlPrefix + "/lotOccupancies/doSearchLotOccupancies", searchFilterFormElement, (responseJSON: { count: number; lotOccupancies: recordTypes.LotOccupancy[] }) => { if (responseJSON.lotOccupancies.length === 0) { @@ -59,9 +60,9 @@ declare const cityssm: cityssmGlobal; let occupancyTimeHTML = ""; if ( - lotOccupancy.occupancyStartDateString <= nowDateString && + lotOccupancy.occupancyStartDateString! <= nowDateString && (lotOccupancy.occupancyEndDateString === "" || - lotOccupancy.occupancyEndDateString >= nowDateString) + lotOccupancy.occupancyEndDateString! >= nowDateString) ) { occupancyTimeHTML = '') + ""; - } else if (lotOccupancy.occupancyStartDateString > nowDateString) { + } else if (lotOccupancy.occupancyStartDateString! > nowDateString) { occupancyTimeHTML = '' + - cityssm.escapeHTML(occupant.occupantName) + + cityssm.escapeHTML(occupant.occupantName || "") + "
"; } @@ -108,7 +109,7 @@ declare const cityssm: cityssmGlobal; ('") + ("" + ("") + - (lotOccupancyPrints.length > 0 ? '' : "") + + (lotOccupancyPrints.length > 0 + ? '' + : "") + "" + "
' + occupancyTimeHTML + "" + '' + @@ -118,9 +119,9 @@ declare const cityssm: cityssmGlobal; ("" + (lotOccupancy.lotName ? '' + @@ -144,7 +145,7 @@ declare const cityssm: cityssmGlobal; (lotOccupancyPrints.length > 0 ? "" + '" + cityssm.escapeHTML(exports.aliases.occupancyStartDate) + "") + "End Date" + cityssm.escapeHTML(exports.aliases.occupants) + "PrintPrint
" + '
' + @@ -200,18 +203,22 @@ declare const cityssm: cityssmGlobal; "
") + ""; - searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); + searchResultsContainerElement.querySelector("table")!.append(resultsTbodyElement); if (offset > 0) { - searchResultsContainerElement - .querySelector("button[data-page='previous']") - .addEventListener("click", previousAndGetLotOccupancies); + ( + searchResultsContainerElement.querySelector( + "button[data-page='previous']" + ) as HTMLButtonElement + ).addEventListener("click", previousAndGetLotOccupancies); } if (limit + offset < responseJSON.count) { - searchResultsContainerElement - .querySelector("button[data-page='next']") - .addEventListener("click", nextAndGetLotOccupancies); + ( + searchResultsContainerElement.querySelector( + "button[data-page='next']" + ) as HTMLButtonElement + ).addEventListener("click", nextAndGetLotOccupancies); } } ); diff --git a/public-typescript/lotSearch.js b/public-typescript/lotSearch.js index 978750f4..1015fa66 100644 --- a/public-typescript/lotSearch.js +++ b/public-typescript/lotSearch.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los; const searchFilterFormElement = document.querySelector("#form--searchFilters"); const searchResultsContainerElement = document.querySelector("#container--searchResults"); const limit = Number.parseInt(document.querySelector("#searchFilter--limit").value, 10); @@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.aliases.lots + "..." + ""; - cityssm.postJSON(urlPrefix + "/lots/doSearchLots", searchFilterFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/doSearchLots", searchFilterFormElement, (responseJSON) => { if (responseJSON.lots.length === 0) { searchResultsContainerElement.innerHTML = '
' + @@ -30,16 +30,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); resultsTbodyElement.insertAdjacentHTML("beforeend", "
" + ("") + ("") + - ("") + + ("") + ("" + ("") + ("") + - ("") + + ("") + ("") + @@ -127,18 +128,22 @@ declare const cityssm: cityssmGlobal; "") + ""; - searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); + searchResultsContainerElement.querySelector("table")!.append(resultsTbodyElement); if (offset > 0) { - searchResultsContainerElement - .querySelector("button[data-page='previous']") - .addEventListener("click", previousAndGetLots); + ( + searchResultsContainerElement.querySelector( + "button[data-page='previous']" + ) as HTMLButtonElement + ).addEventListener("click", previousAndGetLots); } if (limit + offset < responseJSON.count) { - searchResultsContainerElement - .querySelector("button[data-page='next']") - .addEventListener("click", nextAndGetLots); + ( + searchResultsContainerElement.querySelector( + "button[data-page='next']" + ) as HTMLButtonElement + ).addEventListener("click", nextAndGetLots); } } ); diff --git a/public-typescript/lotView.ts b/public-typescript/lotView.ts index 538f2232..1da7ff26 100644 --- a/public-typescript/lotView.ts +++ b/public-typescript/lotView.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import * as globalTypes from "../types/globalTypes"; @@ -9,7 +9,7 @@ import * as globalTypes from "../types/globalTypes"; if (mapContainerElement) { (exports.los as globalTypes.LOS).highlightMap( mapContainerElement, - mapContainerElement.dataset.mapKey, + mapContainerElement.dataset.mapKey!, "success" ); } diff --git a/public-typescript/main.js b/public-typescript/main.js index 4ea4ad63..dac8df91 100644 --- a/public-typescript/main.js +++ b/public-typescript/main.js @@ -12,11 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); svgId = svgId.slice(0, Math.max(0, svgId.lastIndexOf("-"))); } if (svgElementToHighlight) { - svgElementToHighlight.style.fill = null; + svgElementToHighlight.style.fill = ""; svgElementToHighlight.classList.add("highlight", "is-" + contextualClass); const childPathElements = svgElementToHighlight.querySelectorAll("path"); for (const pathElement of childPathElements) { - pathElement.style.fill = null; + pathElement.style.fill = ""; } } }; @@ -194,6 +194,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }; const los = { + urlPrefix: document.querySelector("main").dataset.urlPrefix, + apiKey: document.querySelector("main").dataset.apiKey, highlightMap, initializeUnlockFieldButtons, initializeDatePickers, diff --git a/public-typescript/main.ts b/public-typescript/main.ts index 750f4393..b7707998 100644 --- a/public-typescript/main.ts +++ b/public-typescript/main.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import type * as globalTypes from "../types/globalTypes"; import type { Options as BulmaCalendarOptions } from "bulma-calendar"; @@ -17,7 +17,7 @@ declare const bulmaJS: BulmaJS; // Search for ID let svgId = mapKey; - let svgElementToHighlight: SVGElement; + let svgElementToHighlight: SVGElement | null; // eslint-disable-next-line no-constant-condition while (true) { @@ -32,20 +32,20 @@ declare const bulmaJS: BulmaJS; if (svgElementToHighlight) { // eslint-disable-next-line unicorn/no-null - svgElementToHighlight.style.fill = null; + svgElementToHighlight.style.fill = ""; svgElementToHighlight.classList.add("highlight", "is-" + contextualClass); const childPathElements = svgElementToHighlight.querySelectorAll("path"); for (const pathElement of childPathElements) { // eslint-disable-next-line unicorn/no-null - pathElement.style.fill = null; + pathElement.style.fill = ""; } } }; const unlockField = (clickEvent: Event) => { - const fieldElement = (clickEvent.currentTarget as HTMLElement).closest(".field"); + const fieldElement = (clickEvent.currentTarget as HTMLElement).closest(".field")!; const inputOrSelectElement = fieldElement.querySelector("input, select") as | HTMLInputElement @@ -115,7 +115,7 @@ declare const bulmaJS: BulmaJS; // Disable html scrolling when calendar is open cal.on("show", () => { - document.querySelector("html").classList.add("is-clipped"); + document.querySelector("html")!.classList.add("is-clipped"); }); // Reenable scrolling, if a modal window is not open @@ -160,7 +160,7 @@ declare const bulmaJS: BulmaJS; const labelElement = document.querySelector("label[for='" + dateElement.id + "']"); if (labelElement) { - datepickerElement.querySelector(".datetimepicker-dummy-input").ariaLabel = labelElement.textContent; + datepickerElement.querySelector(".datetimepicker-dummy-input")!.ariaLabel = labelElement.textContent; } } }; @@ -196,7 +196,7 @@ declare const bulmaJS: BulmaJS; // Disable html scrolling when calendar is open cal.on("show", () => { - document.querySelector("html").classList.add("is-clipped"); + document.querySelector("html")!.classList.add("is-clipped"); }); // Reenable scrolling, if a modal window is not open @@ -290,15 +290,17 @@ declare const bulmaJS: BulmaJS; return exports.randomColor({ seed: actualSeedString + actualSeedString, - hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1) % hues.length], + hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1)! % hues.length], luminosity: luminosity[ - actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length + actualSeedString.codePointAt(actualSeedString.length - 2)! % luminosity.length ] }); }; const los: globalTypes.LOS = { + urlPrefix: document.querySelector("main")!.dataset.urlPrefix!, + apiKey: document.querySelector("main")!.dataset.apiKey!, highlightMap, initializeUnlockFieldButtons, initializeDatePickers, diff --git a/public-typescript/mapEdit.js b/public-typescript/mapEdit.js index e4254795..7bdc8f4b 100644 --- a/public-typescript/mapEdit.js +++ b/public-typescript/mapEdit.js @@ -1,19 +1,18 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const mapId = document.querySelector("#map--mapId") - .value; + const los = exports.los; + const mapId = document.querySelector("#map--mapId").value; const isCreate = mapId === ""; const mapForm = document.querySelector("#form--map"); const updateMap = (formEvent) => { formEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/maps/" + (isCreate ? "doCreateMap" : "doUpdateMap"), mapForm, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/maps/" + (isCreate ? "doCreateMap" : "doUpdateMap"), mapForm, (responseJSON) => { if (responseJSON.success) { cityssm.disableNavBlocker(); if (isCreate) { window.location.href = - urlPrefix + "/maps/" + responseJSON.mapId + "/edit"; + los.urlPrefix + "/maps/" + responseJSON.mapId + "/edit"; } else { bulmaJS.alert({ @@ -25,7 +24,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.map, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -37,22 +36,19 @@ Object.defineProperty(exports, "__esModule", { value: true }); inputElement.addEventListener("change", cityssm.enableNavBlocker); } if (!isCreate) { - document - .querySelector("#button--deleteMap") - .addEventListener("click", (clickEvent) => { + document.querySelector("#button--deleteMap").addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/maps/doDeleteMap", { + cityssm.postJSON(los.urlPrefix + "/maps/doDeleteMap", { mapId }, (responseJSON) => { if (responseJSON.success) { - window.location.href = - urlPrefix + "/maps?t=" + Date.now(); + window.location.href = los.urlPrefix + "/maps?t=" + Date.now(); } else { bulmaJS.alert({ title: "Error Deleting " + exports.aliases.map, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -62,7 +58,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); title: "Delete " + exports.aliases.map, message: "Are you sure you want to delete this " + exports.aliases.map.toLowerCase() + - " and all related " + exports.aliases.lots.toLowerCase() + + " and all related " + + exports.aliases.lots.toLowerCase() + "?", contextualColorName: "warning", okButton: { diff --git a/public-typescript/mapEdit.ts b/public-typescript/mapEdit.ts index a4fb9a25..53237adb 100644 --- a/public-typescript/mapEdit.ts +++ b/public-typescript/mapEdit.ts @@ -1,4 +1,6 @@ -/* eslint-disable unicorn/prefer-module */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../types/globalTypes"; import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; import type { BulmaJS } from "@cityssm/bulma-js/types"; @@ -7,10 +9,9 @@ declare const cityssm: cityssmGlobal; declare const bulmaJS: BulmaJS; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; - const mapId = (document.querySelector("#map--mapId") as HTMLInputElement) - .value; + const mapId = (document.querySelector("#map--mapId") as HTMLInputElement).value; const isCreate = mapId === ""; const mapForm = document.querySelector("#form--map") as HTMLFormElement; @@ -19,30 +20,25 @@ declare const bulmaJS: BulmaJS; formEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/maps/" + (isCreate ? "doCreateMap" : "doUpdateMap"), + los.urlPrefix + "/maps/" + (isCreate ? "doCreateMap" : "doUpdateMap"), mapForm, - (responseJSON: { - success: boolean; - mapId?: number; - errorMessage?: string; - }) => { + (responseJSON: { success: boolean; mapId?: number; errorMessage?: string }) => { if (responseJSON.success) { cityssm.disableNavBlocker(); - + if (isCreate) { window.location.href = - urlPrefix + "/maps/" + responseJSON.mapId + "/edit"; + los.urlPrefix + "/maps/" + responseJSON.mapId + "/edit"; } else { bulmaJS.alert({ - message: - exports.aliases.map + " Updated Successfully", + message: exports.aliases.map + " Updated Successfully", contextualColorName: "success" }); } } else { bulmaJS.alert({ title: "Error Updating " + exports.aliases.map, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -52,36 +48,33 @@ declare const bulmaJS: BulmaJS; mapForm.addEventListener("submit", updateMap); - const inputElements = mapForm.querySelectorAll("input, select") as NodeListOf; + const inputElements = mapForm.querySelectorAll("input, select") as NodeListOf< + HTMLInputElement | HTMLSelectElement + >; for (const inputElement of inputElements) { inputElement.addEventListener("change", cityssm.enableNavBlocker); } if (!isCreate) { - document - .querySelector("#button--deleteMap") - .addEventListener("click", (clickEvent) => { + (document.querySelector("#button--deleteMap") as HTMLButtonElement).addEventListener( + "click", + (clickEvent) => { clickEvent.preventDefault(); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/maps/doDeleteMap", + los.urlPrefix + "/maps/doDeleteMap", { mapId }, - (responseJSON: { - success: boolean; - errorMessage?: string; - }) => { + (responseJSON: { success: boolean; errorMessage?: string }) => { if (responseJSON.success) { - window.location.href = - urlPrefix + "/maps?t=" + Date.now(); + window.location.href = los.urlPrefix + "/maps?t=" + Date.now(); } else { bulmaJS.alert({ - title: - "Error Deleting " + exports.aliases.map, - message: responseJSON.errorMessage, + title: "Error Deleting " + exports.aliases.map, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -94,7 +87,8 @@ declare const bulmaJS: BulmaJS; message: "Are you sure you want to delete this " + exports.aliases.map.toLowerCase() + - " and all related " + exports.aliases.lots.toLowerCase() + + " and all related " + + exports.aliases.lots.toLowerCase() + "?", contextualColorName: "warning", okButton: { @@ -102,6 +96,7 @@ declare const bulmaJS: BulmaJS; callbackFunction: doDelete } }); - }); + } + ); } })(); diff --git a/public-typescript/mapSearch.js b/public-typescript/mapSearch.js index 17af3f8b..461a59ed 100644 --- a/public-typescript/mapSearch.js +++ b/public-typescript/mapSearch.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los; const maps = exports.maps; const searchFilterElement = document.querySelector("#searchFilter--map"); const searchResultsContainerElement = document.querySelector("#container--searchResults"); @@ -36,28 +36,28 @@ Object.defineProperty(exports, "__esModule", { value: true }); searchResultsTbodyElement.insertAdjacentHTML("beforeend", "" + ("") + ("") + - ("") + + ("") + '" + ('" + ("") + ("") + - ("") + + ("") + '" + ('" + (""); if (lotOccupancy.lotId) { rowElement.insertAdjacentHTML("beforeend", "")); if (lotOccupancy.lotId && !hasLotRecord) { - rowElement - .querySelector(".button--addLot") - .addEventListener("click", addLotFromLotOccupancy); + rowElement.querySelector(".button--addLot").addEventListener("click", addLotFromLotOccupancy); } - rowElement - .querySelector(".button--deleteLotOccupancy") - .addEventListener("click", deleteLotOccupancy); + rowElement.querySelector(".button--deleteLotOccupancy").addEventListener("click", deleteLotOccupancy); occupanciesContainerElement.querySelector("tbody").append(rowElement); } }; @@ -336,7 +326,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const doUpdateLotStatus = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/workOrders/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { workOrderLots = responseJSON.workOrderLots; renderRelatedLotsAndOccupancies(); @@ -345,7 +335,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Relationship", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -395,7 +385,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteLot = (clickEvent) => { const lotId = clickEvent.currentTarget.closest(".container--lot").dataset.lotId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doDeleteWorkOrderLot", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderLot", { workOrderId, lotId }, (responseJSON) => { @@ -406,7 +396,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Relationship", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -432,8 +422,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const renderRelatedLots = () => { const lotsContainerElement = document.querySelector("#container--lots"); - document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent = - workOrderLots.length.toString(); + document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent = workOrderLots.length.toString(); if (workOrderLots.length === 0) { lotsContainerElement.innerHTML = '
' + @@ -463,18 +452,18 @@ Object.defineProperty(exports, "__esModule", { value: true }); rowElement.innerHTML = "
" + - ("") + - ("") + + ("") + + ("") + ("") + ('"); - rowElement - .querySelector(".button--editLotStatus") - .addEventListener("click", openEditLotStatus); + rowElement.querySelector(".button--editLotStatus").addEventListener("click", openEditLotStatus); rowElement.querySelector(".button--deleteLot").addEventListener("click", deleteLot); lotsContainerElement.querySelector("tbody").append(rowElement); } @@ -518,7 +505,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + "Searching..." + "

"; - cityssm.postJSON(urlPrefix + "/lotOccupancies/doSearchLotOccupancies", searchFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lotOccupancies/doSearchLotOccupancies", searchFormElement, (responseJSON) => { if (responseJSON.lotOccupancies.length === 0) { searchResultsContainerElement.innerHTML = '
' + @@ -552,10 +539,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + "" + ('
"); if (lotOccupancy.lotId) { - rowElement.insertAdjacentHTML("beforeend", ""); + rowElement.insertAdjacentHTML("beforeend", ""); } else { rowElement.insertAdjacentHTML("beforeend", "")); - rowElement - .querySelector(".button--addLotOccupancy") - .addEventListener("click", doAddLotOccupancy); - searchResultsContainerElement.querySelector("tbody").append(rowElement); + rowElement.querySelector(".button--addLotOccupancy").addEventListener("click", doAddLotOccupancy); + searchResultsContainerElement + .querySelector("tbody") + .append(rowElement); } }); }; @@ -601,12 +593,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); }, onshown: (modalElement) => { bulmaJS.toggleHtmlClipped(); - modalElement - .querySelector("#lotOccupancySearch--occupantName") - .addEventListener("change", doSearch); - modalElement - .querySelector("#lotOccupancySearch--lotName") - .addEventListener("change", doSearch); + modalElement.querySelector("#lotOccupancySearch--occupantName").addEventListener("change", doSearch); + modalElement.querySelector("#lotOccupancySearch--lotName").addEventListener("change", doSearch); searchFormElement.addEventListener("submit", doSearch); }, onremoved: () => { @@ -635,7 +623,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + "Searching..." + "

"; - cityssm.postJSON(urlPrefix + "/lots/doSearchLots", searchFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/lots/doSearchLots", searchFormElement, (responseJSON) => { if (responseJSON.lots.length === 0) { searchResultsContainerElement.innerHTML = '
' + @@ -667,17 +655,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + "" + ('
") + "" + - ("") + - (""); - rowElement - .querySelector(".button--addLot") - .addEventListener("click", doAddLot); - searchResultsContainerElement.querySelector("tbody").append(rowElement); + ("") + + (""); + rowElement.querySelector(".button--addLot").addEventListener("click", doAddLot); + searchResultsContainerElement + .querySelector("tbody") + .append(rowElement); } }); }; @@ -698,12 +686,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); }, onshown: (modalElement) => { bulmaJS.toggleHtmlClipped(); - modalElement - .querySelector("#lotSearch--lotName") - .addEventListener("change", doSearch); - modalElement - .querySelector("#lotSearch--lotStatusId") - .addEventListener("change", doSearch); + modalElement.querySelector("#lotSearch--lotName").addEventListener("change", doSearch); + modalElement.querySelector("#lotSearch--lotStatusId").addEventListener("change", doSearch); searchFormElement.addEventListener("submit", doSearch); }, onremoved: () => { @@ -723,7 +707,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const editComment = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/workOrders/doUpdateWorkOrderComment", editFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderComment", editFormElement, (responseJSON) => { if (responseJSON.success) { workOrderComments = responseJSON.workOrderComments; editCloseModalFunction(); @@ -732,7 +716,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -770,7 +754,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteWorkOrderComment = (clickEvent) => { const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.workOrderCommentId, 10); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doDeleteWorkOrderComment", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderComment", { workOrderId, workOrderCommentId }, (responseJSON) => { @@ -781,7 +765,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Removing Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -822,7 +806,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); workOrderComment.workOrderCommentId.toString(); tableRowElement.innerHTML = "" + "" + "" + ('"); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditWorkOrderComment); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteWorkOrderComment); + tableRowElement.querySelector(".button--edit").addEventListener("click", openEditWorkOrderComment); + tableRowElement.querySelector(".button--delete").addEventListener("click", deleteWorkOrderComment); tableElement.querySelector("tbody").append(tableRowElement); } containerElement.innerHTML = ""; @@ -859,7 +839,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let addCommentCloseModalFunction; const doAddComment = (formEvent) => { formEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/workOrders/doAddWorkOrderComment", formEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderComment", formEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { workOrderComments = responseJSON.workOrderComments; renderWorkOrderComments(); @@ -885,9 +865,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }; if (!isCreate) { - document - .querySelector("#workOrderComments--add") - .addEventListener("click", openAddCommentModal); + document.querySelector("#workOrderComments--add").addEventListener("click", openAddCommentModal); renderWorkOrderComments(); } if (!isCreate) { @@ -901,7 +879,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Reopening Milestone", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -914,7 +892,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; }); const doComplete = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { workOrderId, workOrderMilestoneId }, processMilestoneResponse); @@ -937,7 +915,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); clickEvent.preventDefault(); const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; const doReopen = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { workOrderId, workOrderMilestoneId }, processMilestoneResponse); @@ -956,7 +934,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); clickEvent.preventDefault(); const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { workOrderMilestoneId, workOrderId }, processMilestoneResponse); @@ -980,7 +958,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); let editCloseModalFunction; const doEdit = (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON) => { processMilestoneResponse(responseJSON); if (responseJSON.success) { editCloseModalFunction(); @@ -1059,7 +1037,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); ('
' + (milestone.workOrderMilestoneTypeId ? "" + - cityssm.escapeHTML(milestone.workOrderMilestoneType) + + cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + "
" : "") + milestone.workOrderMilestoneDateString + @@ -1068,7 +1046,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); : "") + "
" + '' + - cityssm.escapeHTML(milestone.workOrderMilestoneDescription) + + cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + "" + "
") + ('
' + @@ -1100,21 +1078,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
") + ""; if (milestone.workOrderMilestoneCompletionDate) { - panelBlockElement - .querySelector(".button--reopenMilestone") - .addEventListener("click", reopenMilestone); + panelBlockElement.querySelector(".button--reopenMilestone").addEventListener("click", reopenMilestone); } else { - panelBlockElement - .querySelector(".button--editMilestone") - .addEventListener("click", editMilestone); - panelBlockElement - .querySelector(".button--completeMilestone") - .addEventListener("click", completeMilestone); + panelBlockElement.querySelector(".button--editMilestone").addEventListener("click", editMilestone); + panelBlockElement.querySelector(".button--completeMilestone").addEventListener("click", completeMilestone); } - panelBlockElement - .querySelector(".button--deleteMilestone") - .addEventListener("click", deleteMilestone); + panelBlockElement.querySelector(".button--deleteMilestone").addEventListener("click", deleteMilestone); milestonesPanelElement.append(panelBlockElement); } bulmaJS.init(milestonesPanelElement); @@ -1130,7 +1100,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } const currentDateString = cityssm.dateToString(new Date()); const _doAdd = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doAddWorkOrderMilestone", addFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderMilestone", addFormElement, (responseJSON) => { processMilestoneResponse(responseJSON); if (responseJSON.success) { addCloseModalFunction(); diff --git a/public-typescript/workOrderEdit.ts b/public-typescript/workOrderEdit.ts index 069eb15c..1a08626a 100644 --- a/public-typescript/workOrderEdit.ts +++ b/public-typescript/workOrderEdit.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; import type { BulmaJS } from "@cityssm/bulma-js/types"; @@ -12,8 +12,6 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const workOrderId = (document.querySelector("#workOrderEdit--workOrderId") as HTMLInputElement) .value; @@ -22,9 +20,11 @@ declare const bulmaJS: BulmaJS; const workOrderFormElement = document.querySelector("#form--workOrderEdit") as HTMLFormElement; los.initializeDatePickers( - workOrderFormElement - .querySelector("#workOrderEdit--workOrderOpenDateString") - .closest(".field") + ( + workOrderFormElement.querySelector( + "#workOrderEdit--workOrderOpenDateString" + ) as HTMLInputElement + ).closest(".field") as HTMLElement ); los.initializeUnlockFieldButtons(workOrderFormElement); @@ -32,7 +32,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/workOrders/" + (isCreate ? "doCreateWorkOrder" : "doUpdateWorkOrder"), + los.urlPrefix + "/workOrders/" + (isCreate ? "doCreateWorkOrder" : "doUpdateWorkOrder"), submitEvent.currentTarget, (responseJSON: { success: boolean; workOrderId?: number; errorMessage?: string }) => { if (responseJSON.success) { @@ -40,7 +40,7 @@ declare const bulmaJS: BulmaJS; if (isCreate) { window.location.href = - urlPrefix + "/workOrders/" + responseJSON.workOrderId + "/edit"; + los.urlPrefix + "/workOrders/" + responseJSON.workOrderId + "/edit"; } else { bulmaJS.alert({ message: "Work Order Updated Successfully", @@ -50,7 +50,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Updating Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -75,18 +75,18 @@ declare const bulmaJS: BulmaJS; if (!isCreate) { const doClose = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doCloseWorkOrder", + los.urlPrefix + "/workOrders/doCloseWorkOrder", { workOrderId }, (responseJSON: { success: boolean; errorMessage?: string }) => { if (responseJSON.success) { window.location.href = - urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); + los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); } else { bulmaJS.alert({ title: "Error Closing Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -94,48 +94,51 @@ declare const bulmaJS: BulmaJS; ); }; - document.querySelector("#button--closeWorkOrder").addEventListener("click", () => { - const hasOpenMilestones = workOrderMilestones.some((milestone) => { - return !milestone.workOrderMilestoneCompletionDate; - }); + (document.querySelector("#button--closeWorkOrder") as HTMLButtonElement).addEventListener( + "click", + () => { + const hasOpenMilestones = workOrderMilestones.some((milestone) => { + return !milestone.workOrderMilestoneCompletionDate; + }); - if (hasOpenMilestones) { - bulmaJS.confirm({ - title: "Close Work Order with Outstanding Milestones", - message: - "Are you sure you want to close this work order with outstanding milestones?", - contextualColorName: "danger", - okButton: { - text: "Yes, Close Work Order", - callbackFunction: doClose - } - }); - } else { - bulmaJS.confirm({ - title: "Close Work Order", - message: "Are you sure you want to close this work order?", - contextualColorName: "info", - okButton: { - text: "Yes, Close Work Order", - callbackFunction: doClose - } - }); + if (hasOpenMilestones) { + bulmaJS.confirm({ + title: "Close Work Order with Outstanding Milestones", + message: + "Are you sure you want to close this work order with outstanding milestones?", + contextualColorName: "danger", + okButton: { + text: "Yes, Close Work Order", + callbackFunction: doClose + } + }); + } else { + bulmaJS.confirm({ + title: "Close Work Order", + message: "Are you sure you want to close this work order?", + contextualColorName: "info", + okButton: { + text: "Yes, Close Work Order", + callbackFunction: doClose + } + }); + } } - }); + ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doDeleteWorkOrder", + los.urlPrefix + "/workOrders/doDeleteWorkOrder", { workOrderId }, (responseJSON: { success: boolean; errorMessage?: string }) => { if (responseJSON.success) { - window.location.href = urlPrefix + "/workOrders"; + window.location.href = los.urlPrefix + "/workOrders"; } else { bulmaJS.alert({ title: "Error Deleting Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -143,9 +146,9 @@ declare const bulmaJS: BulmaJS; ); }; - document - .querySelector("#button--deleteWorkOrder") - .addEventListener("click", (clickEvent: Event) => { + (document.querySelector("#button--deleteWorkOrder") as HTMLButtonElement).addEventListener( + "click", + (clickEvent: Event) => { clickEvent.preventDefault(); bulmaJS.confirm({ @@ -157,7 +160,8 @@ declare const bulmaJS: BulmaJS; callbackFunction: doDelete } }); - }); + } + ); } /* @@ -180,7 +184,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doDeleteWorkOrderLotOccupancy", + los.urlPrefix + "/workOrders/doDeleteWorkOrderLotOccupancy", { workOrderId, lotOccupancyId @@ -191,12 +195,12 @@ declare const bulmaJS: BulmaJS; workOrderLotOccupancies?: recordTypes.LotOccupancy[]; }) => { if (responseJSON.success) { - workOrderLotOccupancies = responseJSON.workOrderLotOccupancies; + workOrderLotOccupancies = responseJSON.workOrderLotOccupancies!; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: "Error Deleting Relationship", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -227,7 +231,7 @@ declare const bulmaJS: BulmaJS; const addLot = (lotId: number | string, callbackFunction?: (success?: boolean) => void) => { cityssm.postJSON( - urlPrefix + "/workOrders/doAddWorkOrderLot", + los.urlPrefix + "/workOrders/doAddWorkOrderLot", { workOrderId, lotId @@ -238,12 +242,12 @@ declare const bulmaJS: BulmaJS; workOrderLots?: recordTypes.Lot[]; }) => { if (responseJSON.success) { - workOrderLots = responseJSON.workOrderLots; + workOrderLots = responseJSON.workOrderLots!; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -260,7 +264,7 @@ declare const bulmaJS: BulmaJS; callbackFunction?: (success?: boolean) => void ) => { cityssm.postJSON( - urlPrefix + "/workOrders/doAddWorkOrderLotOccupancy", + los.urlPrefix + "/workOrders/doAddWorkOrderLotOccupancy", { workOrderId, lotOccupancyId @@ -271,12 +275,12 @@ declare const bulmaJS: BulmaJS; workOrderLotOccupancies?: recordTypes.LotOccupancy[]; }) => { if (responseJSON.success) { - workOrderLotOccupancies = responseJSON.workOrderLotOccupancies; + workOrderLotOccupancies = responseJSON.workOrderLotOccupancies!; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.occupancy, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -289,7 +293,7 @@ declare const bulmaJS: BulmaJS; }; const addLotFromLotOccupancy = (clickEvent: Event) => { - const lotId = (clickEvent.currentTarget as HTMLElement).dataset.lotId; + const lotId = (clickEvent.currentTarget as HTMLElement).dataset.lotId!; addLot(lotId); }; @@ -298,8 +302,11 @@ declare const bulmaJS: BulmaJS; "#container--lotOccupancies" ) as HTMLElement; - document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = - workOrderLotOccupancies.length.toString(); + ( + document.querySelector( + ".tabs a[href='#relatedTab--lotOccupancies'] .tag" + ) as HTMLElement + ).textContent = workOrderLotOccupancies.length.toString(); if (workOrderLotOccupancies.length === 0) { occupanciesContainerElement.innerHTML = @@ -333,11 +340,11 @@ declare const bulmaJS: BulmaJS; for (const lotOccupancy of workOrderLotOccupancies) { const rowElement = document.createElement("tr"); rowElement.className = "container--lotOccupancy"; - rowElement.dataset.lotOccupancyId = lotOccupancy.lotOccupancyId.toString(); + rowElement.dataset.lotOccupancyId = lotOccupancy.lotOccupancyId!.toString(); const isActive = !( lotOccupancy.occupancyEndDate && - lotOccupancy.occupancyEndDateString < currentDateString + lotOccupancy.occupancyEndDateString! < currentDateString ); const hasLotRecord = @@ -358,11 +365,11 @@ declare const bulmaJS: BulmaJS; "" + (""); @@ -370,7 +377,7 @@ declare const bulmaJS: BulmaJS; rowElement.insertAdjacentHTML( "beforeend", "") + ("") + ("" + - ("") + - ("") + + ("") + + ("") + ("") + ('"); - rowElement - .querySelector(".button--editLotStatus") - .addEventListener("click", openEditLotStatus); + ( + rowElement.querySelector(".button--editLotStatus") as HTMLButtonElement + ).addEventListener("click", openEditLotStatus); - rowElement.querySelector(".button--deleteLot").addEventListener("click", deleteLot); + ( + rowElement.querySelector(".button--deleteLot") as HTMLButtonElement + ).addEventListener("click", deleteLot); - lotsContainerElement.querySelector("tbody").append(rowElement); + lotsContainerElement.querySelector("tbody")!.append(rowElement); } }; @@ -684,9 +695,9 @@ declare const bulmaJS: BulmaJS; renderRelatedLotsAndOccupancies(); const doAddLotOccupancy = (clickEvent: Event) => { - const rowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const rowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - const lotOccupancyId = rowElement.dataset.lotOccupancyId; + const lotOccupancyId = rowElement.dataset.lotOccupancyId!; addLotOccupancy(lotOccupancyId, (success) => { if (success) { @@ -695,165 +706,183 @@ declare const bulmaJS: BulmaJS; }); }; - document.querySelector("#button--addLotOccupancy").addEventListener("click", () => { - let searchFormElement: HTMLFormElement; - let searchResultsContainerElement: HTMLElement; + (document.querySelector("#button--addLotOccupancy") as HTMLButtonElement).addEventListener( + "click", + () => { + let searchFormElement: HTMLFormElement; + let searchResultsContainerElement: HTMLElement; - const doSearch = (event?: Event) => { - if (event) { - event.preventDefault(); - } + const doSearch = (event?: Event) => { + if (event) { + event.preventDefault(); + } - searchResultsContainerElement.innerHTML = - '

' + - '
' + - "Searching..." + - "

"; + searchResultsContainerElement.innerHTML = + '

' + + '
' + + "Searching..." + + "

"; + + cityssm.postJSON( + los.urlPrefix + "/lotOccupancies/doSearchLotOccupancies", + searchFormElement, + (responseJSON: { lotOccupancies: recordTypes.LotOccupancy[] }) => { + if (responseJSON.lotOccupancies.length === 0) { + searchResultsContainerElement.innerHTML = + '
' + + '

There are no records that meet the search criteria.

' + + "
"; + + return; + } - cityssm.postJSON( - urlPrefix + "/lotOccupancies/doSearchLotOccupancies", - searchFormElement, - (responseJSON: { lotOccupancies: recordTypes.LotOccupancy[] }) => { - if (responseJSON.lotOccupancies.length === 0) { searchResultsContainerElement.innerHTML = - '
' + - '

There are no records that meet the search criteria.

' + - "
"; + '
" + '' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + "" + '' + @@ -48,10 +48,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); : '(No Name)') + "" + "" + cityssm.escapeHTML(lot.lotType) + "" + cityssm.escapeHTML(lot.lotType || "") + "" + (lot.lotStatusId - ? cityssm.escapeHTML(lot.lotStatus) + ? cityssm.escapeHTML(lot.lotStatus || "") : '(No Status)') + "
" + (lot.lotOccupancyCount > 0 @@ -100,14 +100,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); ""; searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); if (offset > 0) { - searchResultsContainerElement - .querySelector("button[data-page='previous']") - .addEventListener("click", previousAndGetLots); + searchResultsContainerElement.querySelector("button[data-page='previous']").addEventListener("click", previousAndGetLots); } if (limit + offset < responseJSON.count) { - searchResultsContainerElement - .querySelector("button[data-page='next']") - .addEventListener("click", nextAndGetLots); + searchResultsContainerElement.querySelector("button[data-page='next']").addEventListener("click", nextAndGetLots); } }); }; diff --git a/public-typescript/lotSearch.ts b/public-typescript/lotSearch.ts index dc5f2502..9b8a6f09 100644 --- a/public-typescript/lotSearch.ts +++ b/public-typescript/lotSearch.ts @@ -1,5 +1,6 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -7,7 +8,7 @@ import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; declare const cityssm: cityssmGlobal; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; const searchFilterFormElement = document.querySelector( "#form--searchFilters" @@ -34,7 +35,7 @@ declare const cityssm: cityssmGlobal; ""; cityssm.postJSON( - urlPrefix + "/lots/doSearchLots", + los.urlPrefix + "/lots/doSearchLots", searchFilterFormElement, (responseJSON: { count: number; lots: recordTypes.Lot[] }) => { if (responseJSON.lots.length === 0) { @@ -56,16 +57,16 @@ declare const cityssm: cityssmGlobal; "
" + '' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + "" + '' + @@ -74,13 +75,13 @@ declare const cityssm: cityssmGlobal; : '(No Name)') + "" + "" + cityssm.escapeHTML(lot.lotType) + "" + cityssm.escapeHTML(lot.lotType || "") + "" + (lot.lotStatusId - ? cityssm.escapeHTML(lot.lotStatus) + ? cityssm.escapeHTML(lot.lotStatus || "") : '(No Status)') + "
" + - (lot.lotOccupancyCount > 0 + (lot.lotOccupancyCount! > 0 ? 'Currently Occupied' : "") + "
" + '' + cityssm.escapeHTML(map.mapName || "(No Name)") + "
" + '' + - cityssm.escapeHTML(map.mapDescription) + + cityssm.escapeHTML(map.mapDescription || "") + "" + "
" + (map.mapAddress1 ? cityssm.escapeHTML(map.mapAddress1) + "
" : "") + (map.mapAddress2 ? cityssm.escapeHTML(map.mapAddress2) + "
" : "") + (map.mapCity || map.mapProvince - ? cityssm.escapeHTML(map.mapCity) + + ? cityssm.escapeHTML(map.mapCity || "") + ", " + - cityssm.escapeHTML(map.mapProvince) + + cityssm.escapeHTML(map.mapProvince || "") + "
" : "") + (map.mapPostalCode ? cityssm.escapeHTML(map.mapPostalCode) : "") + "
" + cityssm.escapeHTML(map.mapPhoneNumber) + "" + cityssm.escapeHTML(map.mapPhoneNumber || "") + "' + (map.mapLatitude && map.mapLongitude ? '' @@ -70,7 +70,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); "' + '' + diff --git a/public-typescript/mapSearch.ts b/public-typescript/mapSearch.ts index 68a25a2d..4315ea73 100644 --- a/public-typescript/mapSearch.ts +++ b/public-typescript/mapSearch.ts @@ -1,5 +1,6 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -7,7 +8,7 @@ import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; declare const cityssm: cityssmGlobal; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; const maps: recordTypes.Map[] = exports.maps; @@ -60,28 +61,28 @@ declare const cityssm: cityssmGlobal; "
" + '' + cityssm.escapeHTML(map.mapName || "(No Name)") + "
" + '' + - cityssm.escapeHTML(map.mapDescription) + + cityssm.escapeHTML(map.mapDescription || "") + "" + "
" + (map.mapAddress1 ? cityssm.escapeHTML(map.mapAddress1) + "
" : "") + (map.mapAddress2 ? cityssm.escapeHTML(map.mapAddress2) + "
" : "") + (map.mapCity || map.mapProvince - ? cityssm.escapeHTML(map.mapCity) + + ? cityssm.escapeHTML(map.mapCity || "") + ", " + - cityssm.escapeHTML(map.mapProvince) + + cityssm.escapeHTML(map.mapProvince || "") + "
" : "") + (map.mapPostalCode ? cityssm.escapeHTML(map.mapPostalCode) : "") + "
" + cityssm.escapeHTML(map.mapPhoneNumber) + "" + cityssm.escapeHTML(map.mapPhoneNumber || "") + "' + (map.mapLatitude && map.mapLongitude ? '' @@ -94,7 +95,7 @@ declare const cityssm: cityssmGlobal; "' + '' + @@ -138,10 +139,13 @@ declare const cityssm: cityssmGlobal; searchFilterElement.addEventListener("keyup", renderResults); - document.querySelector("#form--searchFilters").addEventListener("submit", (formEvent) => { - formEvent.preventDefault(); - renderResults(); - }); + (document.querySelector("#form--searchFilters") as HTMLFormElement).addEventListener( + "submit", + (formEvent) => { + formEvent.preventDefault(); + renderResults(); + } + ); renderResults(); })(); diff --git a/public-typescript/mapView.ts b/public-typescript/mapView.ts index a396e5d2..a2ee881e 100644 --- a/public-typescript/mapView.ts +++ b/public-typescript/mapView.ts @@ -1,9 +1,7 @@ -// import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; -// import type { BulmaJS } from "@cityssm/bulma-js/types"; +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + import type * as Leaflet from "leaflet"; -// declare const cityssm: cityssmGlobal; -// declare const bulmaJS: BulmaJS; declare const L; (() => { @@ -13,14 +11,15 @@ declare const L; if (mapContainerElement) { const mapLatitude = Number.parseFloat( - mapContainerElement.dataset.mapLatitude + mapContainerElement.dataset.mapLatitude! ); const mapLongitude = Number.parseFloat( - mapContainerElement.dataset.mapLongitude + mapContainerElement.dataset.mapLongitude! ); const mapCoordinates: Leaflet.LatLngTuple = [mapLatitude, mapLongitude]; + // eslint-disable-next-line unicorn/no-array-callback-reference const map: Leaflet.Map = L.map(mapContainerElement); map.setView(mapCoordinates, 15); diff --git a/public-typescript/workOrderEdit.js b/public-typescript/workOrderEdit.js index c82f7ead..6e6bae1a 100644 --- a/public-typescript/workOrderEdit.js +++ b/public-typescript/workOrderEdit.js @@ -2,23 +2,20 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const workOrderId = document.querySelector("#workOrderEdit--workOrderId") .value; const isCreate = workOrderId === ""; const workOrderFormElement = document.querySelector("#form--workOrderEdit"); - los.initializeDatePickers(workOrderFormElement - .querySelector("#workOrderEdit--workOrderOpenDateString") - .closest(".field")); + los.initializeDatePickers(workOrderFormElement.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")); los.initializeUnlockFieldButtons(workOrderFormElement); workOrderFormElement.addEventListener("submit", (submitEvent) => { submitEvent.preventDefault(); - cityssm.postJSON(urlPrefix + "/workOrders/" + (isCreate ? "doCreateWorkOrder" : "doUpdateWorkOrder"), submitEvent.currentTarget, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/" + (isCreate ? "doCreateWorkOrder" : "doUpdateWorkOrder"), submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { cityssm.disableNavBlocker(); if (isCreate) { window.location.href = - urlPrefix + "/workOrders/" + responseJSON.workOrderId + "/edit"; + los.urlPrefix + "/workOrders/" + responseJSON.workOrderId + "/edit"; } else { bulmaJS.alert({ @@ -30,7 +27,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Updating Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -43,17 +40,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); let workOrderMilestones; if (!isCreate) { const doClose = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doCloseWorkOrder", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doCloseWorkOrder", { workOrderId }, (responseJSON) => { if (responseJSON.success) { window.location.href = - urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); + los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); } else { bulmaJS.alert({ title: "Error Closing Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -87,24 +84,22 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }); const doDelete = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doDeleteWorkOrder", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrder", { workOrderId }, (responseJSON) => { if (responseJSON.success) { - window.location.href = urlPrefix + "/workOrders"; + window.location.href = los.urlPrefix + "/workOrders"; } else { bulmaJS.alert({ title: "Error Deleting Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } }); }; - document - .querySelector("#button--deleteWorkOrder") - .addEventListener("click", (clickEvent) => { + document.querySelector("#button--deleteWorkOrder").addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); bulmaJS.confirm({ title: "Delete Work Order", @@ -125,7 +120,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const deleteLotOccupancy = (clickEvent) => { const lotOccupancyId = clickEvent.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId; const doDelete = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doDeleteWorkOrderLotOccupancy", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderLotOccupancy", { workOrderId, lotOccupancyId }, (responseJSON) => { @@ -136,7 +131,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Deleting Relationship", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -161,7 +156,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }; const addLot = (lotId, callbackFunction) => { - cityssm.postJSON(urlPrefix + "/workOrders/doAddWorkOrderLot", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderLot", { workOrderId, lotId }, (responseJSON) => { @@ -172,7 +167,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.lot, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -182,7 +177,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }; const addLotOccupancy = (lotOccupancyId, callbackFunction) => { - cityssm.postJSON(urlPrefix + "/workOrders/doAddWorkOrderLotOccupancy", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderLotOccupancy", { workOrderId, lotOccupancyId }, (responseJSON) => { @@ -193,7 +188,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { bulmaJS.alert({ title: "Error Adding " + exports.aliases.occupancy, - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -208,8 +203,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const renderRelatedOccupancies = () => { const occupanciesContainerElement = document.querySelector("#container--lotOccupancies"); - document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = - workOrderLotOccupancies.length.toString(); + document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = workOrderLotOccupancies.length.toString(); if (workOrderLotOccupancies.length === 0) { occupanciesContainerElement.innerHTML = '
' + @@ -257,16 +251,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
" + '' + - cityssm.escapeHTML(lotOccupancy.occupancyType) + + cityssm.escapeHTML(lotOccupancy.occupancyType || "") + "" + "" + - cityssm.escapeHTML(lotOccupancy.lotName) + + cityssm.escapeHTML(lotOccupancy.lotName || "") + (hasLotRecord ? "" : ' " + '' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + "" + cityssm.escapeHTML(lot.mapName) + "" + cityssm.escapeHTML(lot.lotType) + "" + cityssm.escapeHTML(lot.mapName || "") + "" + cityssm.escapeHTML(lot.lotType || "") + "" + (lot.lotStatusId - ? cityssm.escapeHTML(lot.lotStatus) + ? cityssm.escapeHTML(lot.lotStatus || "") : '(No Status)') + "' + @@ -485,9 +474,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '' + "" + "' + - cityssm.escapeHTML(lotOccupancy.occupancyType) + + cityssm.escapeHTML(lotOccupancy.occupancyType || "") + "" + cityssm.escapeHTML(lotOccupancy.lotName) + "" + + cityssm.escapeHTML(lotOccupancy.lotName || "") + + "" + @@ -577,16 +566,19 @@ Object.defineProperty(exports, "__esModule", { value: true }); ? '(No ' + cityssm.escapeHTML(exports.aliases.occupants) + ")" - : cityssm.escapeHTML(lotOccupancy.lotOccupancyOccupants[0].occupantName) + + : cityssm.escapeHTML(lotOccupancy.lotOccupancyOccupants[0] + .occupantName) + (lotOccupancy.lotOccupancyOccupants.length > 1 ? " plus " + - (lotOccupancy.lotOccupancyOccupants.length - 1) + (lotOccupancy.lotOccupancyOccupants + .length - + 1) : "")) + "' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + - cityssm.escapeHTML(lot.mapName) + + cityssm.escapeHTML(lot.mapName || "") + "" + cityssm.escapeHTML(lot.lotType) + "" + cityssm.escapeHTML(lot.lotStatus) + "" + cityssm.escapeHTML(lot.lotType || "") + "" + cityssm.escapeHTML(lot.lotStatus || "") + "" + - cityssm.escapeHTML(workOrderComment.recordCreate_userName) + + cityssm.escapeHTML(workOrderComment.recordCreate_userName || "") + "" + workOrderComment.workOrderCommentDateString + @@ -831,7 +815,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); : " " + workOrderComment.workOrderCommentTimeString) + "" + - cityssm.escapeHTML(workOrderComment.workOrderComment) + + cityssm.escapeHTML(workOrderComment.workOrderComment || "") + "' + '
' + @@ -844,12 +828,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); "") + "
" + "
" + '' + - cityssm.escapeHTML(lotOccupancy.occupancyType) + + cityssm.escapeHTML(lotOccupancy.occupancyType || "") + "" + "" + - cityssm.escapeHTML(lotOccupancy.lotName) + + cityssm.escapeHTML(lotOccupancy.lotName || "") + (hasLotRecord ? "" : ' " + - (lotOccupancy.lotOccupancyOccupants.length === 0 + (lotOccupancy.lotOccupancyOccupants!.length === 0 ? '(No ' + cityssm.escapeHTML(exports.aliases.occupants) + ")" : '' + cityssm.escapeHTML( - lotOccupancy.lotOccupancyOccupants[0].occupantName + lotOccupancy.lotOccupancyOccupants![0].occupantName! ) + "") + - (lotOccupancy.lotOccupancyOccupants.length > 1 - ? " plus " + (lotOccupancy.lotOccupancyOccupants.length - 1) + (lotOccupancy.lotOccupancyOccupants!.length > 1 + ? " plus " + (lotOccupancy.lotOccupancyOccupants!.length - 1) : "") + "" + @@ -434,16 +441,16 @@ declare const bulmaJS: BulmaJS; ); if (lotOccupancy.lotId && !hasLotRecord) { - rowElement - .querySelector(".button--addLot") - .addEventListener("click", addLotFromLotOccupancy); + ( + rowElement.querySelector(".button--addLot") as HTMLButtonElement + ).addEventListener("click", addLotFromLotOccupancy); } - rowElement - .querySelector(".button--deleteLotOccupancy") - .addEventListener("click", deleteLotOccupancy); + ( + rowElement.querySelector(".button--deleteLotOccupancy") as HTMLButtonElement + ).addEventListener("click", deleteLotOccupancy); - occupanciesContainerElement.querySelector("tbody").append(rowElement); + occupanciesContainerElement.querySelector("tbody")!.append(rowElement); } }; @@ -453,13 +460,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--lot" ) as HTMLElement - ).dataset.lotId, + ).dataset.lotId!, 10 ); const lot = workOrderLots.find((possibleLot) => { return possibleLot.lotId === lotId; - }); + })!; let editCloseModalFunction: () => void; @@ -467,7 +474,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/workOrders/doUpdateLotStatus", + los.urlPrefix + "/workOrders/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -475,13 +482,13 @@ declare const bulmaJS: BulmaJS; workOrderLots?: recordTypes.Lot[]; }) => { if (responseJSON.success) { - workOrderLots = responseJSON.workOrderLots; + workOrderLots = responseJSON.workOrderLots!; renderRelatedLotsAndOccupancies(); editCloseModalFunction(); } else { bulmaJS.alert({ title: "Error Deleting Relationship", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -496,9 +503,10 @@ declare const bulmaJS: BulmaJS; ( modalElement.querySelector("#lotStatusEdit--lotId") as HTMLInputElement ).value = lotId.toString(); + ( modalElement.querySelector("#lotStatusEdit--lotName") as HTMLInputElement - ).value = lot.lotName; + ).value = lot.lotName!; const lotStatusElement = modalElement.querySelector( "#lotStatusEdit--lotStatusId" @@ -521,7 +529,7 @@ declare const bulmaJS: BulmaJS; if (!lotStatusFound && lot.lotStatusId) { const optionElement = document.createElement("option"); optionElement.value = lot.lotStatusId.toString(); - optionElement.textContent = lot.lotStatus; + optionElement.textContent = lot.lotStatus!; lotStatusElement.append(optionElement); } @@ -530,7 +538,7 @@ declare const bulmaJS: BulmaJS; } modalElement - .querySelector("form") + .querySelector("form")! .insertAdjacentHTML( "beforeend", '' @@ -542,7 +550,7 @@ declare const bulmaJS: BulmaJS; bulmaJS.toggleHtmlClipped(); modalElement - .querySelector("form") + .querySelector("form")! .addEventListener("submit", doUpdateLotStatus); }, onremoved: () => { @@ -558,7 +566,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doDeleteWorkOrderLot", + los.urlPrefix + "/workOrders/doDeleteWorkOrderLot", { workOrderId, lotId @@ -569,12 +577,12 @@ declare const bulmaJS: BulmaJS; workOrderLots?: recordTypes.Lot[]; }) => { if (responseJSON.success) { - workOrderLots = responseJSON.workOrderLots; + workOrderLots = responseJSON.workOrderLots!; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: "Error Deleting Relationship", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -606,8 +614,9 @@ declare const bulmaJS: BulmaJS; const renderRelatedLots = () => { const lotsContainerElement = document.querySelector("#container--lots") as HTMLElement; - document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent = - workOrderLots.length.toString(); + ( + document.querySelector(".tabs a[href='#relatedTab--lots'] .tag") as HTMLElement + ).textContent = workOrderLots.length.toString(); if (workOrderLots.length === 0) { lotsContainerElement.innerHTML = @@ -643,18 +652,18 @@ declare const bulmaJS: BulmaJS; rowElement.innerHTML = "" + '' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + "" + cityssm.escapeHTML(lot.mapName) + "" + cityssm.escapeHTML(lot.lotType) + "" + cityssm.escapeHTML(lot.mapName || "") + "" + cityssm.escapeHTML(lot.lotType || "") + "" + (lot.lotStatusId - ? cityssm.escapeHTML(lot.lotStatus) + ? cityssm.escapeHTML(lot.lotStatus || "") : '(No Status)') + "' + @@ -666,13 +675,15 @@ declare const bulmaJS: BulmaJS; "" + "
' + + "" + + "" + + '' + + ("") + + ("") + + "" + + "" + + ("") + + "" + + "" + + "" + + "
" + exports.aliases.occupancy + " Type" + exports.aliases.lot + "Start DateEnd Date" + exports.aliases.occupants + "
"; - return; - } + for (const lotOccupancy of responseJSON.lotOccupancies) { + const rowElement = document.createElement("tr"); + rowElement.className = "container--lotOccupancy"; + rowElement.dataset.lotOccupancyId = + lotOccupancy.lotOccupancyId!.toString(); - searchResultsContainerElement.innerHTML = - '' + - "" + - "" + - '' + - ("") + - ("") + - "" + - "" + - ("") + - "" + - "" + - "" + - "
" + exports.aliases.occupancy + " Type" + exports.aliases.lot + "Start DateEnd Date" + exports.aliases.occupants + "
"; + rowElement.innerHTML = + '' + + '" + + "" + + ('' + + cityssm.escapeHTML(lotOccupancy.occupancyType || "") + + ""); - for (const lotOccupancy of responseJSON.lotOccupancies) { - const rowElement = document.createElement("tr"); - rowElement.className = "container--lotOccupancy"; - rowElement.dataset.lotOccupancyId = - lotOccupancy.lotOccupancyId.toString(); + if (lotOccupancy.lotId) { + rowElement.insertAdjacentHTML( + "beforeend", + "" + + cityssm.escapeHTML(lotOccupancy.lotName || "") + + "" + ); + } else { + rowElement.insertAdjacentHTML( + "beforeend", + "" + + '(No ' + + exports.aliases.lot + + ")" + + "" + ); + } - rowElement.innerHTML = - '' + - '" + - "" + - ('' + - cityssm.escapeHTML(lotOccupancy.occupancyType) + - ""); - - if (lotOccupancy.lotId) { - rowElement.insertAdjacentHTML( - "beforeend", - "" + cityssm.escapeHTML(lotOccupancy.lotName) + "" - ); - } else { rowElement.insertAdjacentHTML( "beforeend", "" + - '(No ' + - exports.aliases.lot + - ")" + - "" + lotOccupancy.occupancyStartDateString + + "" + + ("" + + (lotOccupancy.occupancyEndDate + ? lotOccupancy.occupancyEndDateString + : '(No End Date)') + + "") + + ("" + + (lotOccupancy.lotOccupancyOccupants!.length === 0 + ? '(No ' + + cityssm.escapeHTML(exports.aliases.occupants) + + ")" + : cityssm.escapeHTML( + lotOccupancy.lotOccupancyOccupants![0] + .occupantName! + ) + + (lotOccupancy.lotOccupancyOccupants!.length > 1 + ? " plus " + + (lotOccupancy.lotOccupancyOccupants! + .length - + 1) + : "")) + + "") ); + + ( + rowElement.querySelector( + ".button--addLotOccupancy" + ) as HTMLButtonElement + ).addEventListener("click", doAddLotOccupancy); + + searchResultsContainerElement + .querySelector("tbody")! + .append(rowElement); } - - rowElement.insertAdjacentHTML( - "beforeend", - "" + - lotOccupancy.occupancyStartDateString + - "" + - ("" + - (lotOccupancy.occupancyEndDate - ? lotOccupancy.occupancyEndDateString - : '(No End Date)') + - "") + - ("" + - (lotOccupancy.lotOccupancyOccupants.length === 0 - ? '(No ' + - cityssm.escapeHTML(exports.aliases.occupants) + - ")" - : cityssm.escapeHTML( - lotOccupancy.lotOccupancyOccupants[0].occupantName - ) + - (lotOccupancy.lotOccupancyOccupants.length > 1 - ? " plus " + - (lotOccupancy.lotOccupancyOccupants.length - 1) - : "")) + - "") - ); - - rowElement - .querySelector(".button--addLotOccupancy") - .addEventListener("click", doAddLotOccupancy); - - searchResultsContainerElement.querySelector("tbody").append(rowElement); } - } - ); - }; - - cityssm.openHtmlModal("workOrder-addLotOccupancy", { - onshow: (modalElement) => { - los.populateAliases(modalElement); - - searchFormElement = modalElement.querySelector("form"); - searchResultsContainerElement = modalElement.querySelector( - "#resultsContainer--lotOccupancyAdd" ); + }; - ( - modalElement.querySelector( - "#lotOccupancySearch--notWorkOrderId" - ) as HTMLInputElement - ).value = workOrderId; + cityssm.openHtmlModal("workOrder-addLotOccupancy", { + onshow: (modalElement) => { + los.populateAliases(modalElement); - ( - modalElement.querySelector( - "#lotOccupancySearch--occupancyEffectiveDateString" - ) as HTMLInputElement - ).value = ( - document.querySelector( - "#workOrderEdit--workOrderOpenDateString" - ) as HTMLInputElement - ).value; + searchFormElement = modalElement.querySelector("form")!; - doSearch(); - }, - onshown: (modalElement) => { - bulmaJS.toggleHtmlClipped(); + searchResultsContainerElement = modalElement.querySelector( + "#resultsContainer--lotOccupancyAdd" + ) as HTMLElement; - modalElement - .querySelector("#lotOccupancySearch--occupantName") - .addEventListener("change", doSearch); - modalElement - .querySelector("#lotOccupancySearch--lotName") - .addEventListener("change", doSearch); + ( + modalElement.querySelector( + "#lotOccupancySearch--notWorkOrderId" + ) as HTMLInputElement + ).value = workOrderId; - searchFormElement.addEventListener("submit", doSearch); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + ( + modalElement.querySelector( + "#lotOccupancySearch--occupancyEffectiveDateString" + ) as HTMLInputElement + ).value = ( + document.querySelector( + "#workOrderEdit--workOrderOpenDateString" + ) as HTMLInputElement + ).value; + + doSearch(); + }, + onshown: (modalElement) => { + bulmaJS.toggleHtmlClipped(); + + ( + modalElement.querySelector( + "#lotOccupancySearch--occupantName" + ) as HTMLInputElement + ).addEventListener("change", doSearch); + + ( + modalElement.querySelector( + "#lotOccupancySearch--lotName" + ) as HTMLInputElement + ).addEventListener("change", doSearch); + + searchFormElement.addEventListener("submit", doSearch); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); + } + }); + } + ); const doAddLot = (clickEvent: Event) => { - const rowElement = (clickEvent.currentTarget as HTMLElement).closest("tr"); + const rowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - const lotId = rowElement.dataset.lotId; + const lotId = rowElement.dataset.lotId!; addLot(lotId, (success) => { if (success) { @@ -862,122 +891,132 @@ declare const bulmaJS: BulmaJS; }); }; - document.querySelector("#button--addLot").addEventListener("click", () => { - let searchFormElement: HTMLFormElement; - let searchResultsContainerElement: HTMLElement; + (document.querySelector("#button--addLot") as HTMLButtonElement).addEventListener( + "click", + () => { + let searchFormElement: HTMLFormElement; + let searchResultsContainerElement: HTMLElement; - const doSearch = (event?: Event) => { - if (event) { - event.preventDefault(); - } + const doSearch = (event?: Event) => { + if (event) { + event.preventDefault(); + } - searchResultsContainerElement.innerHTML = - '

' + - '
' + - "Searching..." + - "

"; + searchResultsContainerElement.innerHTML = + '

' + + '
' + + "Searching..." + + "

"; + + cityssm.postJSON( + los.urlPrefix + "/lots/doSearchLots", + searchFormElement, + (responseJSON: { lots: recordTypes.Lot[] }) => { + if (responseJSON.lots.length === 0) { + searchResultsContainerElement.innerHTML = + '
' + + '

There are no records that meet the search criteria.

' + + "
"; + + return; + } - cityssm.postJSON( - urlPrefix + "/lots/doSearchLots", - searchFormElement, - (responseJSON: { lots: recordTypes.Lot[] }) => { - if (responseJSON.lots.length === 0) { searchResultsContainerElement.innerHTML = - '
' + - '

There are no records that meet the search criteria.

' + - "
"; + '' + + "" + + "" + + '' + + ("") + + ("") + + ("") + + "" + + "" + + "" + + "" + + "
" + exports.aliases.lot + "" + exports.aliases.map + "" + exports.aliases.lot + " TypeStatus
"; - return; + for (const lot of responseJSON.lots) { + const rowElement = document.createElement("tr"); + rowElement.className = "container--lot"; + rowElement.dataset.lotId = lot.lotId.toString(); + + rowElement.innerHTML = + '' + + '" + + "" + + ('' + + cityssm.escapeHTML(lot.lotName || "") + + "") + + "" + + cityssm.escapeHTML(lot.mapName || "") + + "" + + ("" + cityssm.escapeHTML(lot.lotType || "") + "") + + ("" + cityssm.escapeHTML(lot.lotStatus || "") + ""); + + ( + rowElement.querySelector(".button--addLot") as HTMLButtonElement + ).addEventListener("click", doAddLot); + + searchResultsContainerElement + .querySelector("tbody")! + .append(rowElement); + } } - - searchResultsContainerElement.innerHTML = - '' + - "" + - "" + - '' + - ("") + - ("") + - ("") + - "" + - "" + - "" + - "" + - "
" + exports.aliases.lot + "" + exports.aliases.map + "" + exports.aliases.lot + " TypeStatus
"; - - for (const lot of responseJSON.lots) { - const rowElement = document.createElement("tr"); - rowElement.className = "container--lot"; - rowElement.dataset.lotId = lot.lotId.toString(); - - rowElement.innerHTML = - '' + - '" + - "" + - ('' + - cityssm.escapeHTML(lot.lotName) + - "") + - "" + - cityssm.escapeHTML(lot.mapName) + - "" + - ("" + cityssm.escapeHTML(lot.lotType) + "") + - ("" + cityssm.escapeHTML(lot.lotStatus) + ""); - - rowElement - .querySelector(".button--addLot") - .addEventListener("click", doAddLot); - - searchResultsContainerElement.querySelector("tbody").append(rowElement); - } - } - ); - }; - - cityssm.openHtmlModal("workOrder-addLot", { - onshow: (modalElement) => { - los.populateAliases(modalElement); - - searchFormElement = modalElement.querySelector("form"); - searchResultsContainerElement = modalElement.querySelector( - "#resultsContainer--lotAdd" ); + }; - ( - modalElement.querySelector("#lotSearch--notWorkOrderId") as HTMLInputElement - ).value = workOrderId; + cityssm.openHtmlModal("workOrder-addLot", { + onshow: (modalElement) => { + los.populateAliases(modalElement); - const lotStatusElement = modalElement.querySelector( - "#lotSearch--lotStatusId" - ) as HTMLSelectElement; + searchFormElement = modalElement.querySelector("form")!; - for (const lotStatus of exports.lotStatuses as recordTypes.LotStatus[]) { - const optionElement = document.createElement("option"); - optionElement.value = lotStatus.lotStatusId.toString(); - optionElement.textContent = lotStatus.lotStatus; - lotStatusElement.append(optionElement); + searchResultsContainerElement = modalElement.querySelector( + "#resultsContainer--lotAdd" + ) as HTMLElement; + + ( + modalElement.querySelector( + "#lotSearch--notWorkOrderId" + ) as HTMLInputElement + ).value = workOrderId; + + const lotStatusElement = modalElement.querySelector( + "#lotSearch--lotStatusId" + ) as HTMLSelectElement; + + for (const lotStatus of exports.lotStatuses as recordTypes.LotStatus[]) { + const optionElement = document.createElement("option"); + optionElement.value = lotStatus.lotStatusId.toString(); + optionElement.textContent = lotStatus.lotStatus; + lotStatusElement.append(optionElement); + } + + doSearch(); + }, + onshown: (modalElement) => { + bulmaJS.toggleHtmlClipped(); + + ( + modalElement.querySelector("#lotSearch--lotName") as HTMLInputElement + ).addEventListener("change", doSearch); + + ( + modalElement.querySelector( + "#lotSearch--lotStatusId" + ) as HTMLSelectElement + ).addEventListener("change", doSearch); + + searchFormElement.addEventListener("submit", doSearch); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); } - - doSearch(); - }, - onshown: (modalElement) => { - bulmaJS.toggleHtmlClipped(); - - modalElement - .querySelector("#lotSearch--lotName") - .addEventListener("change", doSearch); - - modalElement - .querySelector("#lotSearch--lotStatusId") - .addEventListener("change", doSearch); - - searchFormElement.addEventListener("submit", doSearch); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + }); + } + ); } /* @@ -989,13 +1028,13 @@ declare const bulmaJS: BulmaJS; const openEditWorkOrderComment = (clickEvent: Event) => { const workOrderCommentId = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset.workOrderCommentId, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.workOrderCommentId!, 10 ); const workOrderComment = workOrderComments.find((currentComment) => { return currentComment.workOrderCommentId === workOrderCommentId; - }); + })!; let editFormElement: HTMLFormElement; let editCloseModalFunction: () => void; @@ -1004,7 +1043,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/workOrders/doUpdateWorkOrderComment", + los.urlPrefix + "/workOrders/doUpdateWorkOrderComment", editFormElement, (responseJSON: { success: boolean; @@ -1012,13 +1051,13 @@ declare const bulmaJS: BulmaJS; workOrderComments?: recordTypes.WorkOrderComment[]; }) => { if (responseJSON.success) { - workOrderComments = responseJSON.workOrderComments; + workOrderComments = responseJSON.workOrderComments!; editCloseModalFunction(); renderWorkOrderComments(); } else { bulmaJS.alert({ title: "Error Updating Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1043,27 +1082,27 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#workOrderCommentEdit--workOrderComment" ) as HTMLInputElement - ).value = workOrderComment.workOrderComment; + ).value = workOrderComment.workOrderComment!; const workOrderCommentDateStringElement = modalElement.querySelector( "#workOrderCommentEdit--workOrderCommentDateString" ) as HTMLInputElement; workOrderCommentDateStringElement.value = - workOrderComment.workOrderCommentDateString; + workOrderComment.workOrderCommentDateString!; const currentDateString = cityssm.dateToString(new Date()); workOrderCommentDateStringElement.max = - workOrderComment.workOrderCommentDateString <= currentDateString + workOrderComment.workOrderCommentDateString! <= currentDateString ? currentDateString - : workOrderComment.workOrderCommentDateString; + : workOrderComment.workOrderCommentDateString!; ( modalElement.querySelector( "#workOrderCommentEdit--workOrderCommentTimeString" ) as HTMLInputElement - ).value = workOrderComment.workOrderCommentTimeString; + ).value = workOrderComment.workOrderCommentTimeString!; }, onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); @@ -1077,7 +1116,7 @@ declare const bulmaJS: BulmaJS; ) as HTMLTextAreaElement ).focus(); - editFormElement = modalElement.querySelector("form"); + editFormElement = modalElement.querySelector("form")!; editFormElement.addEventListener("submit", editComment); editCloseModalFunction = closeModalFunction; @@ -1090,13 +1129,13 @@ declare const bulmaJS: BulmaJS; const deleteWorkOrderComment = (clickEvent: Event) => { const workOrderCommentId = Number.parseInt( - (clickEvent.currentTarget as HTMLElement).closest("tr").dataset.workOrderCommentId, + (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.workOrderCommentId!, 10 ); const doDelete = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doDeleteWorkOrderComment", + los.urlPrefix + "/workOrders/doDeleteWorkOrderComment", { workOrderId, workOrderCommentId @@ -1112,7 +1151,7 @@ declare const bulmaJS: BulmaJS; } else { bulmaJS.alert({ title: "Error Removing Comment", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1158,11 +1197,11 @@ declare const bulmaJS: BulmaJS; for (const workOrderComment of workOrderComments) { const tableRowElement = document.createElement("tr"); tableRowElement.dataset.workOrderCommentId = - workOrderComment.workOrderCommentId.toString(); + workOrderComment.workOrderCommentId!.toString(); tableRowElement.innerHTML = "" + - cityssm.escapeHTML(workOrderComment.recordCreate_userName) + + cityssm.escapeHTML(workOrderComment.recordCreate_userName || "") + "" + "" + workOrderComment.workOrderCommentDateString + @@ -1171,7 +1210,7 @@ declare const bulmaJS: BulmaJS; : " " + workOrderComment.workOrderCommentTimeString) + "" + "" + - cityssm.escapeHTML(workOrderComment.workOrderComment) + + cityssm.escapeHTML(workOrderComment.workOrderComment || "") + "" + ('' + '
' + @@ -1185,14 +1224,16 @@ declare const bulmaJS: BulmaJS; "
" + ""); - tableRowElement - .querySelector(".button--edit") - .addEventListener("click", openEditWorkOrderComment); - tableRowElement - .querySelector(".button--delete") - .addEventListener("click", deleteWorkOrderComment); + (tableRowElement.querySelector(".button--edit") as HTMLButtonElement).addEventListener( + "click", + openEditWorkOrderComment + ); - tableElement.querySelector("tbody").append(tableRowElement); + ( + tableRowElement.querySelector(".button--delete") as HTMLButtonElement + ).addEventListener("click", deleteWorkOrderComment); + + tableElement.querySelector("tbody")!.append(tableRowElement); } containerElement.innerHTML = ""; @@ -1206,14 +1247,14 @@ declare const bulmaJS: BulmaJS; formEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/workOrders/doAddWorkOrderComment", + los.urlPrefix + "/workOrders/doAddWorkOrderComment", formEvent.currentTarget, (responseJSON: { success: boolean; workOrderComments?: recordTypes.WorkOrderComment[]; }) => { if (responseJSON.success) { - workOrderComments = responseJSON.workOrderComments; + workOrderComments = responseJSON.workOrderComments!; renderWorkOrderComments(); addCommentCloseModalFunction(); } @@ -1229,7 +1270,7 @@ declare const bulmaJS: BulmaJS; "#workOrderCommentAdd--workOrderId" ) as HTMLInputElement ).value = workOrderId; - modalElement.querySelector("form").addEventListener("submit", doAddComment); + modalElement.querySelector("form")!.addEventListener("submit", doAddComment); }, onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); @@ -1248,9 +1289,10 @@ declare const bulmaJS: BulmaJS; }; if (!isCreate) { - document - .querySelector("#workOrderComments--add") - .addEventListener("click", openAddCommentModal); + (document.querySelector("#workOrderComments--add") as HTMLButtonElement).addEventListener( + "click", + openAddCommentModal + ); renderWorkOrderComments(); } @@ -1268,12 +1310,12 @@ declare const bulmaJS: BulmaJS; workOrderMilestones?: recordTypes.WorkOrderMilestone[]; }) => { if (responseJSON.success) { - workOrderMilestones = responseJSON.workOrderMilestones; + workOrderMilestones = responseJSON.workOrderMilestones!; renderMilestones(); } else { bulmaJS.alert({ title: "Error Reopening Milestone", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } @@ -1289,17 +1331,17 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--milestone" ) as HTMLElement - ).dataset.workOrderMilestoneId, + ).dataset.workOrderMilestoneId!, 10 ); const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - }); + })!; const doComplete = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", + los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { workOrderId, workOrderMilestoneId @@ -1312,7 +1354,7 @@ declare const bulmaJS: BulmaJS; title: "Complete Milestone", message: "Are you sure you want to complete this milestone?" + - (workOrderMilestone.workOrderMilestoneDateString > currentDateString + (workOrderMilestone.workOrderMilestoneDateString! > currentDateString ? "
Note that this milestone is expected to be completed in the future." : ""), messageIsHtml: true, @@ -1335,7 +1377,7 @@ declare const bulmaJS: BulmaJS; const doReopen = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doReopenWorkOrderMilestone", + los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { workOrderId, workOrderMilestoneId @@ -1367,7 +1409,7 @@ declare const bulmaJS: BulmaJS; const doDelete = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", + los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { workOrderMilestoneId, workOrderId @@ -1395,13 +1437,13 @@ declare const bulmaJS: BulmaJS; (clickEvent.currentTarget as HTMLElement).closest( ".container--milestone" ) as HTMLElement - ).dataset.workOrderMilestoneId, + ).dataset.workOrderMilestoneId!, 10 ); const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - }); + })!; let editCloseModalFunction: () => void; @@ -1409,7 +1451,7 @@ declare const bulmaJS: BulmaJS; submitEvent.preventDefault(); cityssm.postJSON( - urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", + los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON: { success: boolean; @@ -1436,7 +1478,7 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#milestoneEdit--workOrderMilestoneId" ) as HTMLInputElement - ).value = workOrderMilestone.workOrderMilestoneId.toString(); + ).value = workOrderMilestone.workOrderMilestoneId!.toString(); const milestoneTypeElement = modalElement.querySelector( "#milestoneEdit--workOrderMilestoneTypeId" @@ -1465,7 +1507,7 @@ declare const bulmaJS: BulmaJS; const optionElement = document.createElement("option"); optionElement.value = workOrderMilestone.workOrderMilestoneTypeId.toString(); - optionElement.textContent = workOrderMilestone.workOrderMilestoneType; + optionElement.textContent = workOrderMilestone.workOrderMilestoneType!; optionElement.selected = true; milestoneTypeElement.append(optionElement); } @@ -1474,21 +1516,21 @@ declare const bulmaJS: BulmaJS; modalElement.querySelector( "#milestoneEdit--workOrderMilestoneDateString" ) as HTMLInputElement - ).value = workOrderMilestone.workOrderMilestoneDateString; + ).value = workOrderMilestone.workOrderMilestoneDateString!; if (workOrderMilestone.workOrderMilestoneTime) { ( modalElement.querySelector( "#milestoneEdit--workOrderMilestoneTimeString" ) as HTMLInputElement - ).value = workOrderMilestone.workOrderMilestoneTimeString; + ).value = workOrderMilestone.workOrderMilestoneTimeString!; } ( modalElement.querySelector( "#milestoneEdit--workOrderMilestoneDescription" ) as HTMLTextAreaElement - ).value = workOrderMilestone.workOrderMilestoneDescription; + ).value = workOrderMilestone.workOrderMilestoneDescription!; }, onshown: (modalElement, closeModalFunction) => { editCloseModalFunction = closeModalFunction; @@ -1498,7 +1540,7 @@ declare const bulmaJS: BulmaJS; los.initializeDatePickers(modalElement); los.initializeTimePickers(modalElement); - modalElement.querySelector("form").addEventListener("submit", doEdit); + modalElement.querySelector("form")!.addEventListener("submit", doEdit); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); @@ -1525,7 +1567,7 @@ declare const bulmaJS: BulmaJS; panelBlockElement.className = "panel-block is-block container--milestone"; panelBlockElement.dataset.workOrderMilestoneId = - milestone.workOrderMilestoneId.toString(); + milestone.workOrderMilestoneId!.toString(); panelBlockElement.innerHTML = '
' + @@ -1545,7 +1587,7 @@ declare const bulmaJS: BulmaJS; ('
' + (milestone.workOrderMilestoneTypeId ? "" + - cityssm.escapeHTML(milestone.workOrderMilestoneType) + + cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + "
" : "") + milestone.workOrderMilestoneDateString + @@ -1554,7 +1596,7 @@ declare const bulmaJS: BulmaJS; : "") + "
" + '' + - cityssm.escapeHTML(milestone.workOrderMilestoneDescription) + + cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + "" + "
") + ('
' + @@ -1587,22 +1629,28 @@ declare const bulmaJS: BulmaJS; "
"; if (milestone.workOrderMilestoneCompletionDate) { - panelBlockElement - .querySelector(".button--reopenMilestone") - .addEventListener("click", reopenMilestone); + ( + panelBlockElement.querySelector( + ".button--reopenMilestone" + ) as HTMLButtonElement + ).addEventListener("click", reopenMilestone); } else { - panelBlockElement - .querySelector(".button--editMilestone") - .addEventListener("click", editMilestone); + ( + panelBlockElement.querySelector( + ".button--editMilestone" + ) as HTMLButtonElement + ).addEventListener("click", editMilestone); - panelBlockElement - .querySelector(".button--completeMilestone") - .addEventListener("click", completeMilestone); + ( + panelBlockElement.querySelector( + ".button--completeMilestone" + ) as HTMLButtonElement + ).addEventListener("click", completeMilestone); } - panelBlockElement - .querySelector(".button--deleteMilestone") - .addEventListener("click", deleteMilestone); + ( + panelBlockElement.querySelector(".button--deleteMilestone") as HTMLButtonElement + ).addEventListener("click", deleteMilestone); milestonesPanelElement.append(panelBlockElement); } @@ -1612,99 +1660,104 @@ declare const bulmaJS: BulmaJS; renderMilestones(); - document.querySelector("#button--addMilestone").addEventListener("click", () => { - let addModalElement: HTMLElement; - let addFormElement: HTMLFormElement; - let addCloseModalFunction: () => void; + (document.querySelector("#button--addMilestone") as HTMLButtonElement).addEventListener( + "click", + () => { + let addModalElement: HTMLElement; + let addFormElement: HTMLFormElement; + let addCloseModalFunction: () => void; - const doAdd = (submitEvent: SubmitEvent) => { - if (submitEvent) { - submitEvent.preventDefault(); - } - - const currentDateString = cityssm.dateToString(new Date()); - - const _doAdd = () => { - cityssm.postJSON( - urlPrefix + "/workOrders/doAddWorkOrderMilestone", - addFormElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestones?: recordTypes.WorkOrderMilestone[]; - }) => { - processMilestoneResponse(responseJSON); - - if (responseJSON.success) { - addCloseModalFunction(); - } - } - ); - }; - - if ( - ( - addModalElement.querySelector( - "#milestoneAdd--workOrderMilestoneDateString" - ) as HTMLInputElement - ).value < currentDateString - ) { - bulmaJS.confirm({ - title: "Milestone Date in the Past", - message: - "Are you sure you want to create a milestone with a date in the past?", - contextualColorName: "warning", - okButton: { - text: "Yes, Create a Past Milestone", - callbackFunction: _doAdd - } - }); - } else { - _doAdd(); - } - }; - - cityssm.openHtmlModal("workOrder-addMilestone", { - onshow: (modalElement) => { - ( - modalElement.querySelector("#milestoneAdd--workOrderId") as HTMLInputElement - ).value = workOrderId; - - const milestoneTypeElement = modalElement.querySelector( - "#milestoneAdd--workOrderMilestoneTypeId" - ) as HTMLSelectElement; - - for (const milestoneType of exports.workOrderMilestoneTypes as recordTypes.WorkOrderMilestoneType[]) { - const optionElement = document.createElement("option"); - - optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); - optionElement.textContent = milestoneType.workOrderMilestoneType; - - milestoneTypeElement.append(optionElement); + const doAdd = (submitEvent: SubmitEvent) => { + if (submitEvent) { + submitEvent.preventDefault(); } - ( - modalElement.querySelector( - "#milestoneAdd--workOrderMilestoneDateString" - ) as HTMLInputElement - ).valueAsDate = new Date(); - }, - onshown: (modalElement, closeModalFunction) => { - addModalElement = modalElement; - addCloseModalFunction = closeModalFunction; + const currentDateString = cityssm.dateToString(new Date()); - los.initializeDatePickers(modalElement); - los.initializeTimePickers(modalElement); + const _doAdd = () => { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doAddWorkOrderMilestone", + addFormElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestones?: recordTypes.WorkOrderMilestone[]; + }) => { + processMilestoneResponse(responseJSON); - bulmaJS.toggleHtmlClipped(); + if (responseJSON.success) { + addCloseModalFunction(); + } + } + ); + }; - addFormElement = modalElement.querySelector("form"); - addFormElement.addEventListener("submit", doAdd); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); + if ( + ( + addModalElement.querySelector( + "#milestoneAdd--workOrderMilestoneDateString" + ) as HTMLInputElement + ).value < currentDateString + ) { + bulmaJS.confirm({ + title: "Milestone Date in the Past", + message: + "Are you sure you want to create a milestone with a date in the past?", + contextualColorName: "warning", + okButton: { + text: "Yes, Create a Past Milestone", + callbackFunction: _doAdd + } + }); + } else { + _doAdd(); + } + }; + + cityssm.openHtmlModal("workOrder-addMilestone", { + onshow: (modalElement) => { + ( + modalElement.querySelector( + "#milestoneAdd--workOrderId" + ) as HTMLInputElement + ).value = workOrderId; + + const milestoneTypeElement = modalElement.querySelector( + "#milestoneAdd--workOrderMilestoneTypeId" + ) as HTMLSelectElement; + + for (const milestoneType of exports.workOrderMilestoneTypes as recordTypes.WorkOrderMilestoneType[]) { + const optionElement = document.createElement("option"); + + optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); + optionElement.textContent = milestoneType.workOrderMilestoneType; + + milestoneTypeElement.append(optionElement); + } + + ( + modalElement.querySelector( + "#milestoneAdd--workOrderMilestoneDateString" + ) as HTMLInputElement + ).valueAsDate = new Date(); + }, + onshown: (modalElement, closeModalFunction) => { + addModalElement = modalElement; + addCloseModalFunction = closeModalFunction; + + los.initializeDatePickers(modalElement); + los.initializeTimePickers(modalElement); + + bulmaJS.toggleHtmlClipped(); + + addFormElement = modalElement.querySelector("form")!; + addFormElement.addEventListener("submit", doAdd); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); + } + }); + } + ); } })(); diff --git a/public-typescript/workOrderMilestoneCalendar.js b/public-typescript/workOrderMilestoneCalendar.js index 9a58d6b3..a34f3dec 100644 --- a/public-typescript/workOrderMilestoneCalendar.js +++ b/public-typescript/workOrderMilestoneCalendar.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const workOrderSearchFiltersFormElement = document.querySelector("#form--searchFilters"); const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateFilter"); const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateString"); @@ -40,12 +39,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); for (const lot of milestone.workOrderLots) { lotOccupancyHTML += '' + ' ' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + "
"; } @@ -53,12 +52,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); for (const occupant of lotOccupancy.lotOccupancyOccupants) { lotOccupancyHTML += '' + ' ' + - cityssm.escapeHTML(occupant.occupantName) + + cityssm.escapeHTML(occupant.occupantName || "") + "" + "
"; } @@ -87,17 +86,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
") + ('
' + '' + ' ' + - cityssm.escapeHTML(milestone.workOrderNumber) + + cityssm.escapeHTML(milestone.workOrderNumber || "") + "
" + '' + - cityssm.escapeHTML(milestone.workOrderDescription) + + cityssm.escapeHTML(milestone.workOrderDescription || "") + "" + "
") + ('
' + lotOccupancyHTML + "
") + @@ -115,7 +114,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + "Loading Milestones..." + "
"; - cityssm.postJSON(urlPrefix + "/workOrders/doGetWorkOrderMilestones", workOrderSearchFiltersFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doGetWorkOrderMilestones", workOrderSearchFiltersFormElement, (responseJSON) => { renderMilestones(responseJSON.workOrderMilestones); }); }; diff --git a/public-typescript/workOrderMilestoneCalendar.ts b/public-typescript/workOrderMilestoneCalendar.ts index 1f3e47b4..3ba4f10c 100644 --- a/public-typescript/workOrderMilestoneCalendar.ts +++ b/public-typescript/workOrderMilestoneCalendar.ts @@ -1,4 +1,4 @@ -/* eslint-disable unicorn/prefer-module */ +/* 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"; @@ -9,8 +9,6 @@ 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; @@ -40,7 +38,7 @@ declare const cityssm: cityssmGlobal; const currentDate = cityssm.dateToString(new Date()); - let currentPanelElement: HTMLElement; + let currentPanelElement: HTMLElement | undefined; let currentPanelDateString = ""; for (const milestone of workOrderMilestones) { @@ -55,7 +53,7 @@ declare const cityssm: cityssmGlobal; currentPanelElement.innerHTML = '

' + milestone.workOrderMilestoneDateString + "

"; - currentPanelDateString = milestone.workOrderMilestoneDateString; + currentPanelDateString = milestone.workOrderMilestoneDateString!; } const panelBlockElement = document.createElement("div"); @@ -64,36 +62,36 @@ declare const cityssm: cityssmGlobal; if ( !milestone.workOrderMilestoneCompletionDate && - milestone.workOrderMilestoneDateString < currentDate + milestone.workOrderMilestoneDateString! < currentDate ) { panelBlockElement.classList.add("has-background-warning-light"); } let lotOccupancyHTML = ""; - for (const lot of milestone.workOrderLots) { + for (const lot of milestone.workOrderLots!) { lotOccupancyHTML += '' + ' ' + - cityssm.escapeHTML(lot.lotName) + + cityssm.escapeHTML(lot.lotName || "") + "" + "
"; } - for (const lotOccupancy of milestone.workOrderLotOccupancies) { - for (const occupant of lotOccupancy.lotOccupancyOccupants) { + for (const lotOccupancy of milestone.workOrderLotOccupancies!) { + for (const occupant of lotOccupancy.lotOccupancyOccupants!) { lotOccupancyHTML += '' + ' ' + - cityssm.escapeHTML(occupant.occupantName) + + cityssm.escapeHTML(occupant.occupantName || "") + "" + "
"; } @@ -114,35 +112,35 @@ declare const cityssm: cityssmGlobal; : milestone.workOrderMilestoneTimeString + "
") + (milestone.workOrderMilestoneTypeId ? "" + - cityssm.escapeHTML(milestone.workOrderMilestoneType) + + cityssm.escapeHTML(milestone.workOrderMilestoneType!) + "
" : "") + '' + - cityssm.escapeHTML(milestone.workOrderMilestoneDescription) + + cityssm.escapeHTML(milestone.workOrderMilestoneDescription!) + "" + "") + ('
' + '' + ' ' + - cityssm.escapeHTML(milestone.workOrderNumber) + + cityssm.escapeHTML(milestone.workOrderNumber || "") + "
" + '' + - cityssm.escapeHTML(milestone.workOrderDescription) + + cityssm.escapeHTML(milestone.workOrderDescription || "") + "" + "
") + ('
' + lotOccupancyHTML + "
") + ""; - currentPanelElement.append(panelBlockElement); + (currentPanelElement as HTMLElement).append(panelBlockElement); } - milestoneCalendarContainerElement.append(currentPanelElement); + milestoneCalendarContainerElement.append(currentPanelElement!); }; const getMilestones = (event?: Event) => { @@ -157,7 +155,7 @@ declare const cityssm: cityssmGlobal; ""; cityssm.postJSON( - urlPrefix + "/workOrders/doGetWorkOrderMilestones", + los.urlPrefix + "/workOrders/doGetWorkOrderMilestones", workOrderSearchFiltersFormElement, (responseJSON: { workOrderMilestones: recordTypes.WorkOrderMilestone[] }) => { renderMilestones(responseJSON.workOrderMilestones); @@ -166,7 +164,7 @@ declare const cityssm: cityssmGlobal; }; workOrderMilestoneDateFilterElement.addEventListener("change", () => { - workOrderMilestoneDateStringElement.closest("fieldset").disabled = + workOrderMilestoneDateStringElement.closest("fieldset")!.disabled = workOrderMilestoneDateFilterElement.value !== "date"; getMilestones(); }); diff --git a/public-typescript/workOrderOutlook.d.ts b/public-typescript/workOrderOutlook.d.ts index e69de29b..cb0ff5c3 100644 --- a/public-typescript/workOrderOutlook.d.ts +++ b/public-typescript/workOrderOutlook.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/workOrderOutlook.js b/public-typescript/workOrderOutlook.js index b3922313..f2ee24f3 100644 --- a/public-typescript/workOrderOutlook.js +++ b/public-typescript/workOrderOutlook.js @@ -1,14 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const apiKey = document.querySelector("main").dataset.apiKey; + const los = exports.los; const workOrderTypeIdsElement = document.querySelector("#icsFilters--workOrderTypeIds"); const workOrderMilestoneTypeIdsElement = document.querySelector("#icsFilters--workOrderMilestoneTypeIds"); const calendarLinkElement = document.querySelector("#icsFilters--calendarURL"); const updateCalendarURL = () => { let url = window.location.href.slice(0, Math.max(0, window.location.href.indexOf(window.location.pathname) + 1)) + - urlPrefix + + los.urlPrefix + "api/" + - apiKey + + los.apiKey + "/" + "milestoneICS/" + "?"; @@ -30,19 +31,13 @@ } calendarLinkElement.value = url.slice(0, -1); }; - document - .querySelector("#icsFilters--workOrderTypeIds-all") - .addEventListener("change", (changeEvent) => { + document.querySelector("#icsFilters--workOrderTypeIds-all").addEventListener("change", (changeEvent) => { workOrderTypeIdsElement.disabled = changeEvent.currentTarget.checked; }); - document - .querySelector("#icsFilters--workOrderMilestoneTypeIds-all") - .addEventListener("change", (changeEvent) => { + document.querySelector("#icsFilters--workOrderMilestoneTypeIds-all").addEventListener("change", (changeEvent) => { workOrderMilestoneTypeIdsElement.disabled = changeEvent.currentTarget.checked; }); - const inputSelectElements = document - .querySelector("#panel--icsFilters") - .querySelectorAll("input, select"); + const inputSelectElements = document.querySelector("#panel--icsFilters").querySelectorAll("input, select"); for (const element of inputSelectElements) { element.addEventListener("change", updateCalendarURL); } diff --git a/public-typescript/workOrderOutlook.ts b/public-typescript/workOrderOutlook.ts index 53341976..429f6db9 100644 --- a/public-typescript/workOrderOutlook.ts +++ b/public-typescript/workOrderOutlook.ts @@ -1,6 +1,9 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../types/globalTypes"; + (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const apiKey = document.querySelector("main").dataset.apiKey; + const los = exports.los as globalTypes.LOS; const workOrderTypeIdsElement = document.querySelector( "#icsFilters--workOrderTypeIds" @@ -18,14 +21,11 @@ let url = window.location.href.slice( 0, - Math.max( - 0, - window.location.href.indexOf(window.location.pathname) + 1 - ) + Math.max(0, window.location.href.indexOf(window.location.pathname) + 1) ) + - urlPrefix + + los.urlPrefix + "api/" + - apiKey + + los.apiKey + "/" + "milestoneICS/" + "?"; @@ -59,27 +59,23 @@ calendarLinkElement.value = url.slice(0, -1); }; - document - .querySelector("#icsFilters--workOrderTypeIds-all") - .addEventListener("change", (changeEvent) => { - workOrderTypeIdsElement.disabled = ( - changeEvent.currentTarget as HTMLInputElement - ).checked; - }); + ( + document.querySelector("#icsFilters--workOrderTypeIds-all") as HTMLInputElement + ).addEventListener("change", (changeEvent) => { + workOrderTypeIdsElement.disabled = (changeEvent.currentTarget as HTMLInputElement).checked; + }); - document - .querySelector("#icsFilters--workOrderMilestoneTypeIds-all") - .addEventListener("change", (changeEvent) => { - workOrderMilestoneTypeIdsElement.disabled = ( - changeEvent.currentTarget as HTMLInputElement - ).checked; - }); + ( + document.querySelector("#icsFilters--workOrderMilestoneTypeIds-all") as HTMLInputElement + ).addEventListener("change", (changeEvent) => { + workOrderMilestoneTypeIdsElement.disabled = ( + changeEvent.currentTarget as HTMLInputElement + ).checked; + }); - const inputSelectElements = document - .querySelector("#panel--icsFilters") - .querySelectorAll("input, select") as NodeListOf< - HTMLInputElement | HTMLSelectElement - >; + const inputSelectElements = ( + document.querySelector("#panel--icsFilters") as HTMLElement + ).querySelectorAll("input, select") as NodeListOf; for (const element of inputSelectElements) { element.addEventListener("change", updateCalendarURL); @@ -90,5 +86,5 @@ calendarLinkElement.addEventListener("click", () => { calendarLinkElement.focus(); calendarLinkElement.select(); - }) + }); })(); diff --git a/public-typescript/workOrderSearch.js b/public-typescript/workOrderSearch.js index d5cf04b4..6957168e 100644 --- a/public-typescript/workOrderSearch.js +++ b/public-typescript/workOrderSearch.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; const workOrderPrints = exports.workOrderPrints; const searchFilterFormElement = document.querySelector("#form--searchFilters"); los.initializeDatePickers(searchFilterFormElement); @@ -16,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + "Loading Work Orders..." + ""; - cityssm.postJSON(urlPrefix + "/workOrders/doSearchWorkOrders", searchFilterFormElement, (responseJSON) => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doSearchWorkOrders", searchFilterFormElement, (responseJSON) => { if (responseJSON.workOrders.length === 0) { searchResultsContainerElement.innerHTML = '
' + @@ -30,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); for (const lot of workOrder.workOrderLots) { relatedHTML += '' + '' + '" + ("" + '' + (workOrder.workOrderNumber.trim() - ? cityssm.escapeHTML(workOrder.workOrderNumber) + ? cityssm.escapeHTML(workOrder.workOrderNumber || "") : "(No Number)") + "" + "") + ("" + - cityssm.escapeHTML(workOrder.workOrderType) + + cityssm.escapeHTML(workOrder.workOrderType || "") + "
" + '' + - cityssm.escapeHTML(workOrder.workOrderDescription) + + cityssm.escapeHTML(workOrder.workOrderDescription || "") + "" + "") + ('' + @@ -95,7 +94,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); (workOrderPrints.length > 0 ? "" + ' { const los = exports.los as globalTypes.LOS; - const urlPrefix = document.querySelector("main").dataset.urlPrefix; - const workOrderPrints: string[] = exports.workOrderPrints; const searchFilterFormElement = document.querySelector( @@ -40,7 +38,7 @@ declare const cityssm: cityssmGlobal; "
"; cityssm.postJSON( - urlPrefix + "/workOrders/doSearchWorkOrders", + los.urlPrefix + "/workOrders/doSearchWorkOrders", searchFilterFormElement, (responseJSON: { count: number; workOrders: recordTypes.WorkOrder[] }) => { if (responseJSON.workOrders.length === 0) { @@ -57,10 +55,10 @@ declare const cityssm: cityssmGlobal; for (const workOrder of responseJSON.workOrders) { let relatedHTML = ""; - for (const lot of workOrder.workOrderLots) { + for (const lot of workOrder.workOrderLots!) { relatedHTML += '' + '
"; } - for (const occupancy of workOrder.workOrderLotOccupancies) { - for (const occupant of occupancy.lotOccupancyOccupants) { + for (const occupancy of workOrder.workOrderLotOccupancies!) { + for (const occupant of occupancy.lotOccupancyOccupants!) { relatedHTML += '' + '" + ("" + '
' + - (workOrder.workOrderNumber.trim() - ? cityssm.escapeHTML(workOrder.workOrderNumber) + (workOrder.workOrderNumber!.trim() + ? cityssm.escapeHTML(workOrder.workOrderNumber || "") : "(No Number)") + "" + "") + ("" + - cityssm.escapeHTML(workOrder.workOrderType) + + cityssm.escapeHTML(workOrder.workOrderType || "") + "
" + '' + - cityssm.escapeHTML(workOrder.workOrderDescription) + + cityssm.escapeHTML(workOrder.workOrderDescription || "") + "" + "") + ('' + @@ -129,7 +127,7 @@ declare const cityssm: cityssmGlobal; (workOrderPrints.length > 0 ? "" + ' { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los; const reopenWorkOrderButtonElement = document.querySelector("#button--reopenWorkOrder"); if (reopenWorkOrderButtonElement) { reopenWorkOrderButtonElement.addEventListener("click", () => { const workOrderId = reopenWorkOrderButtonElement.dataset.workOrderId; const doReopen = () => { - cityssm.postJSON(urlPrefix + "/workOrders/doReopenWorkOrder", { + cityssm.postJSON(los.urlPrefix + "/workOrders/doReopenWorkOrder", { workOrderId }, (responseJSON) => { if (responseJSON.success) { window.location.href = - urlPrefix + - "/workOrders/" + - workOrderId + - "/edit/?t=" + - Date.now(); + los.urlPrefix + "/workOrders/" + workOrderId + "/edit/?t=" + Date.now(); } else { bulmaJS.alert({ title: "Error Reopening Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public-typescript/workOrderView.ts b/public-typescript/workOrderView.ts index 6e0de277..bda6a6ac 100644 --- a/public-typescript/workOrderView.ts +++ b/public-typescript/workOrderView.ts @@ -1,13 +1,16 @@ /* eslint-disable unicorn/prefer-module */ +import type * as globalTypes from "../types/globalTypes"; + 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; (() => { - const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const los = exports.los as globalTypes.LOS; const reopenWorkOrderButtonElement = document.querySelector( "#button--reopenWorkOrder" @@ -15,30 +18,22 @@ declare const bulmaJS: BulmaJS; if (reopenWorkOrderButtonElement) { reopenWorkOrderButtonElement.addEventListener("click", () => { - const workOrderId = - reopenWorkOrderButtonElement.dataset.workOrderId; + const workOrderId = reopenWorkOrderButtonElement.dataset.workOrderId; const doReopen = () => { cityssm.postJSON( - urlPrefix + "/workOrders/doReopenWorkOrder", + los.urlPrefix + "/workOrders/doReopenWorkOrder", { workOrderId }, - (responseJSON: { - success: boolean; - errorMessage?: string; - }) => { + (responseJSON: { success: boolean; errorMessage?: string }) => { if (responseJSON.success) { window.location.href = - urlPrefix + - "/workOrders/" + - workOrderId + - "/edit/?t=" + - Date.now(); + los.urlPrefix + "/workOrders/" + workOrderId + "/edit/?t=" + Date.now(); } else { bulmaJS.alert({ title: "Error Reopening Work Order", - message: responseJSON.errorMessage, + message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } diff --git a/public/javascripts/adminCleanup.min.js b/public/javascripts/adminCleanup.min.js index 8cbf468e..cda53e10 100644 --- a/public/javascripts/adminCleanup.min.js +++ b/public/javascripts/adminCleanup.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,a=()=>{cityssm.postJSON(e+"/admin/doCleanupDatabase",{},e=>{e.success?bulmaJS.alert({title:"Database Cleaned Up Successfully",message:e.inactivedRecordCount+" records inactivated, "+e.purgedRecordCount+" permanently deleted.",contextualColorName:"success"}):bulmaJS.alert({title:"Error Cleaning Database",message:e.errorMessage,contextualColorName:"danger"})})};document.querySelector("#button--cleanupDatabase").addEventListener("click",()=>{bulmaJS.confirm({title:"Cleanup Database",message:"Are you sure you want to cleanup up the database?",okButton:{text:"Yes, Cleanup Database",callbackFunction:a}})})})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,a=()=>{cityssm.postJSON(e.urlPrefix+"/admin/doCleanupDatabase",{},e=>{e.success?bulmaJS.alert({title:"Database Cleaned Up Successfully",message:e.inactivedRecordCount+" records inactivated, "+e.purgedRecordCount+" permanently deleted.",contextualColorName:"success"}):bulmaJS.alert({title:"Error Cleaning Database",message:e.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--cleanupDatabase").addEventListener("click",()=>{bulmaJS.confirm({title:"Cleanup Database",message:"Are you sure you want to cleanup up the database?",okButton:{text:"Yes, Cleanup Database",callbackFunction:a}})})})(); \ No newline at end of file diff --git a/public/javascripts/adminFees.min.js b/public/javascripts/adminFees.min.js index 2d9a67c1..d1825c1b 100644 --- a/public/javascripts/adminFees.min.js +++ b/public/javascripts/adminFees.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,s=document.querySelector("#container--feeCategories");let o=exports.feeCategories;delete exports.feeCategories;const a=()=>{if(0!==o.length){s.innerHTML="";for(const e of o){const t=document.createElement("section");if(t.className="panel container--feeCategory",t.dataset.feeCategoryId=e.feeCategoryId.toString(),t.innerHTML='

'+cityssm.escapeHTML(e.feeCategory)+'

'+(0===e.fees.length?'
':"")+'
',0===e.fees.length)t.insertAdjacentHTML("beforeend",'

There are no fees in the "'+cityssm.escapeHTML(e.feeCategory)+'" category.

');else for(const s of e.fees){const e=document.createElement("div");e.className="panel-block is-block container--fee",e.dataset.feeId=s.feeId.toString(),e.innerHTML='

'+cityssm.escapeHTML(s.feeName)+"
"+cityssm.escapeHTML(s.feeDescription).replace(/\n/g,"
")+'

'+(s.isRequired?'Required':"")+(s.occupancyTypeId?' '+cityssm.escapeHTML(s.occupancyType)+"":"")+(s.lotTypeId?' '+cityssm.escapeHTML(s.lotType)+"":"")+'

'+(s.feeFunction?cityssm.escapeHTML(s.feeFunction)+"
Fee Function":"$"+s.feeAmount.toFixed(2)+"
Fee")+'
'+(s.taxPercentage?s.taxPercentage+"%":"$"+s.taxAmount.toFixed(2))+'
Tax
'+(s.includeQuantity?cityssm.escapeHTML(s.quantityUnit)+"
Quantity":"")+'
',e.querySelector("a").addEventListener("click",d),e.querySelector(".button--moveFeeUp").addEventListener("click",u),e.querySelector(".button--moveFeeDown").addEventListener("click",y),t.append(e)}0===e.fees.length&&t.querySelector(".button--deleteFeeCategory").addEventListener("click",n),t.querySelector(".button--editFeeCategory").addEventListener("click",r),t.querySelector(".button--addFee").addEventListener("click",i),t.querySelector(".button--moveFeeCategoryUp").addEventListener("click",c),t.querySelector(".button--moveFeeCategoryDown").addEventListener("click",l),s.append(t)}}else s.innerHTML='

There are no available fees.

'};document.querySelector("#button--addFeeCategory").addEventListener("click",()=>{let e;const s=s=>{s.preventDefault(),cityssm.postJSON(t+"/admin/doAddFeeCategory",s.currentTarget,t=>{t.success?(o=t.feeCategories,e(),a()):bulmaJS.alert({title:"Error Creating Fee Category",message:t.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFeeCategory",{onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),t.querySelector("#feeCategoryAdd--feeCategory").focus(),e=o,t.querySelector("form").addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const r=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10),r=o.find(e=>e.feeCategoryId===s);let n;const c=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateFeeCategory",e.currentTarget,e=>{e.success?(o=e.feeCategories,n(),a()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-editFeeCategory",{onshow:e=>{e.querySelector("#feeCategoryEdit--feeCategoryId").value=r.feeCategoryId.toString(),e.querySelector("#feeCategoryEdit--feeCategory").value=r.feeCategory},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",c),e.querySelector("#feeCategoryEdit--feeCategory").focus()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},n=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);bulmaJS.confirm({title:"Delete Fee Category?",message:"Are you sure you want to delete this fee category?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee Category",callbackFunction:()=>{cityssm.postJSON(t+"/admin/doDeleteFeeCategory",{feeCategoryId:s},e=>{e.success?(o=e.feeCategories,a()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage,contextualColorName:"danger"})})}}})},c=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);cityssm.postJSON(t+"/admin/doMoveFeeCategoryUp",{feeCategoryId:s,moveToTop:e.shiftKey?"1":"0"},e=>{e.success?(o=e.feeCategories,a()):bulmaJS.alert({title:"Error Moving Fee Category",message:e.errorMessage,contextualColorName:"danger"})})},l=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);cityssm.postJSON(t+"/admin/doMoveFeeCategoryDown",{feeCategoryId:s,moveToBottom:e.shiftKey?"1":"0"},e=>{e.success?(o=e.feeCategories,a()):bulmaJS.alert({title:"Error Moving Fee Category",message:e.errorMessage,contextualColorName:"danger"})})},i=s=>{const r=Number.parseInt(s.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);let n;const c=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doAddFee",e.currentTarget,e=>{e.success?(o=e.feeCategories,n(),a()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFee",{onshow:t=>{const s=t.querySelector("#feeAdd--feeCategoryId");for(const e of o){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===r&&(t.selected=!0),s.append(t)}const a=t.querySelector("#feeAdd--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,a.append(t)}const n=t.querySelector("#feeAdd--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,n.append(t)}t.querySelector("#feeAdd--taxPercentage").value=exports.taxPercentageDefault.toString(),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",c),e.querySelector("#feeAdd--feeName").focus(),e.querySelector("#feeAdd--feeFunction").addEventListener("change",()=>{const t=e.querySelector("#feeAdd--feeAmount"),s=e.querySelector("#feeAdd--feeFunction");""===s.value?(s.closest(".select").classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.closest(".select").classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--taxPercentage").addEventListener("keyup",()=>{const t=e.querySelector("#feeAdd--taxAmount"),s=e.querySelector("#feeAdd--taxPercentage");""===s.value?(s.classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--includeQuantity").addEventListener("change",()=>{e.querySelector("#feeAdd--quantityUnit").disabled=""===e.querySelector("#feeAdd--includeQuantity").value})},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=s=>{s.preventDefault();const r=s.currentTarget.closest(".container--fee"),n=Number.parseInt(r.dataset.feeId,10),c=Number.parseInt(r.closest(".container--feeCategory").dataset.feeCategoryId),l=o.find(e=>e.feeCategoryId===c).fees.find(e=>e.feeId===n);let i,d;const u=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateFee",e.currentTarget,e=>{e.success?(o=e.feeCategories,i(),a()):bulmaJS.alert({title:"Error Updating Fee",message:e.errorMessage,contextualColorName:"danger"})})},y=e=>{e.preventDefault();bulmaJS.confirm({title:"Delete Fee?",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee",callbackFunction:()=>{cityssm.postJSON(t+"/admin/doDeleteFee",{feeId:n},e=>{e.success?(o=e.feeCategories,i(),a()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage,contextualColorName:"danger"})})}}})},m=()=>{const e=d.querySelector("#feeEdit--feeAmount"),t=d.querySelector("#feeEdit--feeFunction");""===t.value?(t.closest(".select").classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.closest(".select").classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)},p=()=>{const e=d.querySelector("#feeEdit--taxAmount"),t=d.querySelector("#feeEdit--taxPercentage");""===t.value?(t.classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)},g=()=>{d.querySelector("#feeEdit--quantityUnit").disabled=""===d.querySelector("#feeEdit--includeQuantity").value};cityssm.openHtmlModal("adminFees-editFee",{onshow:t=>{d=t,t.querySelector("#feeEdit--feeId").value=l.feeId.toString();const s=t.querySelector("#feeEdit--feeCategoryId");for(const e of o){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===c&&(t.selected=!0),s.append(t)}t.querySelector("#feeEdit--feeName").value=l.feeName,t.querySelector("#feeEdit--feeDescription").value=l.feeDescription;const a=t.querySelector("#feeEdit--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,e.occupancyTypeId===l.occupancyTypeId&&(t.selected=!0),a.append(t)}const r=t.querySelector("#feeEdit--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,e.lotTypeId===l.lotTypeId&&(t.selected=!0),r.append(t)}t.querySelector("#feeEdit--feeAmount").value=l.feeAmount?l.feeAmount.toFixed(2):"",t.querySelector("#feeEdit--feeFunction").addEventListener("change",m),m(),t.querySelector("#feeEdit--taxAmount").value=l.taxAmount?l.taxAmount.toFixed(2):"";const n=t.querySelector("#feeEdit--taxPercentage");n.value=l.taxPercentage?l.taxPercentage.toString():"",n.addEventListener("keyup",p),p();const i=t.querySelector("#feeEdit--includeQuantity");l.includeQuantity&&(i.value="1"),i.addEventListener("change",g),t.querySelector("#feeEdit--quantityUnit").value=l.quantityUnit||"",g(),l.isRequired&&(t.querySelector("#feeEdit--isRequired").value="1"),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),i=t,e.querySelector("form").addEventListener("submit",u),bulmaJS.init(e),e.querySelector(".button--deleteFee").addEventListener("click",y)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},u=e=>{const s=e.currentTarget.closest(".container--fee"),r=Number.parseInt(s.dataset.feeId,10);cityssm.postJSON(t+"/admin/doMoveFeeUp",{feeId:r,moveToTop:e.shiftKey?"1":"0"},e=>{e.success?(o=e.feeCategories,a()):bulmaJS.alert({title:"Error Moving Fee",message:e.errorMessage,contextualColorName:"danger"})})},y=e=>{const s=e.currentTarget.closest(".container--fee"),r=Number.parseInt(s.dataset.feeId,10);cityssm.postJSON(t+"/admin/doMoveFeeDown",{feeId:r,moveToBottom:e.shiftKey?"1":"0"},e=>{e.success?(o=e.feeCategories,a()):bulmaJS.alert({title:"Error Moving Fee",message:e.errorMessage,contextualColorName:"danger"})})};a()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#container--feeCategories");let s=exports.feeCategories;delete exports.feeCategories;const o=()=>{if(0!==s.length){t.innerHTML="";for(const e of s){const s=document.createElement("section");if(s.className="panel container--feeCategory",s.dataset.feeCategoryId=e.feeCategoryId.toString(),s.innerHTML='

'+cityssm.escapeHTML(e.feeCategory||"")+'

'+(0===e.fees.length?'
':"")+'
',0===e.fees.length)s.insertAdjacentHTML("beforeend",'

There are no fees in the "'+cityssm.escapeHTML(e.feeCategory||"")+'" category.

');else for(const t of e.fees){const e=document.createElement("div");e.className="panel-block is-block container--fee",e.dataset.feeId=t.feeId.toString(),e.innerHTML='

'+cityssm.escapeHTML(t.feeName||"")+"
"+cityssm.escapeHTML(t.feeDescription||"").replace(/\n/g,"
")+'

'+(t.isRequired?'Required':"")+(t.occupancyTypeId?' '+cityssm.escapeHTML(t.occupancyType||"")+"":"")+(t.lotTypeId?' '+cityssm.escapeHTML(t.lotType||"")+"":"")+'

'+(t.feeFunction?cityssm.escapeHTML(t.feeFunction)+"
Fee Function":"$"+t.feeAmount.toFixed(2)+"
Fee")+'
'+(t.taxPercentage?t.taxPercentage+"%":"$"+t.taxAmount.toFixed(2))+'
Tax
'+(t.includeQuantity?cityssm.escapeHTML(t.quantityUnit||"")+"
Quantity":"")+'
',e.querySelector("a").addEventListener("click",i),e.querySelector(".button--moveFeeUp").addEventListener("click",d),e.querySelector(".button--moveFeeDown").addEventListener("click",u),s.append(e)}0===e.fees.length&&s.querySelector(".button--deleteFeeCategory").addEventListener("click",r),s.querySelector(".button--editFeeCategory").addEventListener("click",a),s.querySelector(".button--addFee").addEventListener("click",l),s.querySelector(".button--moveFeeCategoryUp").addEventListener("click",n),s.querySelector(".button--moveFeeCategoryDown").addEventListener("click",c),t.append(s)}}else t.innerHTML='

There are no available fees.

'};document.querySelector("#button--addFeeCategory").addEventListener("click",()=>{let t;const a=a=>{a.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doAddFeeCategory",a.currentTarget,e=>{e.success?(s=e.feeCategories,t(),o()):bulmaJS.alert({title:"Error Creating Fee Category",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFeeCategory",{onshown:(e,s)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#feeCategoryAdd--feeCategory").focus(),t=s,e.querySelector("form").addEventListener("submit",a)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const a=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10),r=s.find(e=>e.feeCategoryId===a);let n;const c=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateFeeCategory",t.currentTarget,e=>{e.success?(s=e.feeCategories,n(),o()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-editFeeCategory",{onshow:e=>{e.querySelector("#feeCategoryEdit--feeCategoryId").value=r.feeCategoryId.toString(),e.querySelector("#feeCategoryEdit--feeCategory").value=r.feeCategory},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",c),e.querySelector("#feeCategoryEdit--feeCategory").focus()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},r=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);bulmaJS.confirm({title:"Delete Fee Category?",message:"Are you sure you want to delete this fee category?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee Category",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteFeeCategory",{feeCategoryId:a},e=>{e.success?(s=e.feeCategories,o()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},n=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);cityssm.postJSON(e.urlPrefix+"/admin/doMoveFeeCategoryUp",{feeCategoryId:a,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(s=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee Category",message:e.errorMessage||"",contextualColorName:"danger"})})},c=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);cityssm.postJSON(e.urlPrefix+"/admin/doMoveFeeCategoryDown",{feeCategoryId:a,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(s=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee Category",message:e.errorMessage||"",contextualColorName:"danger"})})},l=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);let r;const n=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doAddFee",t.currentTarget,e=>{e.success?(s=e.feeCategories,r(),o()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFee",{onshow:t=>{const o=t.querySelector("#feeAdd--feeCategoryId");for(const e of s){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===a&&(t.selected=!0),o.append(t)}const r=t.querySelector("#feeAdd--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,r.append(t)}const n=t.querySelector("#feeAdd--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,n.append(t)}t.querySelector("#feeAdd--taxPercentage").value=exports.taxPercentageDefault.toString(),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),r=t,e.querySelector("form").addEventListener("submit",n),e.querySelector("#feeAdd--feeName").focus(),e.querySelector("#feeAdd--feeFunction").addEventListener("change",()=>{const t=e.querySelector("#feeAdd--feeAmount"),s=e.querySelector("#feeAdd--feeFunction");""===s.value?(s.closest(".select").classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.closest(".select").classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--taxPercentage").addEventListener("keyup",()=>{const t=e.querySelector("#feeAdd--taxAmount"),s=e.querySelector("#feeAdd--taxPercentage");""===s.value?(s.classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--includeQuantity").addEventListener("change",()=>{e.querySelector("#feeAdd--quantityUnit").disabled=""===e.querySelector("#feeAdd--includeQuantity").value})},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=t=>{t.preventDefault();const a=t.currentTarget.closest(".container--fee"),r=Number.parseInt(a.dataset.feeId,10),n=Number.parseInt(a.closest(".container--feeCategory").dataset.feeCategoryId),c=s.find(e=>e.feeCategoryId===n).fees.find(e=>e.feeId===r);let l,i;const d=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateFee",t.currentTarget,e=>{e.success?(s=e.feeCategories,l(),o()):bulmaJS.alert({title:"Error Updating Fee",message:e.errorMessage||"",contextualColorName:"danger"})})},u=t=>{t.preventDefault();bulmaJS.confirm({title:"Delete Fee?",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteFee",{feeId:r},e=>{e.success?(s=e.feeCategories,l(),o()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},y=()=>{const e=i.querySelector("#feeEdit--feeAmount"),t=i.querySelector("#feeEdit--feeFunction");""===t.value?(t.closest(".select").classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.closest(".select").classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)},m=()=>{const e=i.querySelector("#feeEdit--taxAmount"),t=i.querySelector("#feeEdit--taxPercentage");""===t.value?(t.classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)},p=()=>{i.querySelector("#feeEdit--quantityUnit").disabled=""===i.querySelector("#feeEdit--includeQuantity").value};cityssm.openHtmlModal("adminFees-editFee",{onshow:t=>{i=t,t.querySelector("#feeEdit--feeId").value=c.feeId.toString();const o=t.querySelector("#feeEdit--feeCategoryId");for(const e of s){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===n&&(t.selected=!0),o.append(t)}t.querySelector("#feeEdit--feeName").value=c.feeName,t.querySelector("#feeEdit--feeDescription").value=c.feeDescription;const a=t.querySelector("#feeEdit--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,e.occupancyTypeId===c.occupancyTypeId&&(t.selected=!0),a.append(t)}const r=t.querySelector("#feeEdit--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,e.lotTypeId===c.lotTypeId&&(t.selected=!0),r.append(t)}t.querySelector("#feeEdit--feeAmount").value=c.feeAmount?c.feeAmount.toFixed(2):"",t.querySelector("#feeEdit--feeFunction").addEventListener("change",y),y(),t.querySelector("#feeEdit--taxAmount").value=c.taxAmount?c.taxAmount.toFixed(2):"";const l=t.querySelector("#feeEdit--taxPercentage");l.value=c.taxPercentage?c.taxPercentage.toString():"",l.addEventListener("keyup",m),m();const d=t.querySelector("#feeEdit--includeQuantity");c.includeQuantity&&(d.value="1"),d.addEventListener("change",p),t.querySelector("#feeEdit--quantityUnit").value=c.quantityUnit||"",p(),c.isRequired&&(t.querySelector("#feeEdit--isRequired").value="1"),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),l=t,e.querySelector("form").addEventListener("submit",d),bulmaJS.init(e),e.querySelector(".button--deleteFee").addEventListener("click",u)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=t=>{const a=t.currentTarget.closest(".container--fee"),r=Number.parseInt(a.dataset.feeId,10);cityssm.postJSON(e.urlPrefix+"/admin/doMoveFeeUp",{feeId:r,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(s=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee",message:e.errorMessage||"",contextualColorName:"danger"})})},u=t=>{const a=t.currentTarget.closest(".container--fee"),r=Number.parseInt(a.dataset.feeId,10);cityssm.postJSON(e.urlPrefix+"/admin/doMoveFeeDown",{feeId:r,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(s=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee",message:e.errorMessage||"",contextualColorName:"danger"})})};o()})(); \ No newline at end of file diff --git a/public/javascripts/adminLotTypes.min.js b/public/javascripts/adminLotTypes.min.js index 820dcb41..0ee42900 100644 --- a/public/javascripts/adminLotTypes.min.js +++ b/public/javascripts/adminLotTypes.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,l=document.querySelector("#container--lotTypes");let o=exports.lotTypes;delete exports.lotTypes;const s=new Set,a=e=>{const t=e.currentTarget,l=t.closest(".container--lotType"),o=Number.parseInt(l.dataset.lotTypeId,10);s.has(o)?s.delete(o):s.add(o),t.innerHTML=s.has(o)?'':'';const a=l.querySelectorAll(".panel-block");for(const e of a)e.classList.toggle("is-hidden")},i=e=>{e.success?(o=e.lotTypes,b()):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Type",message:e.errorMessage,contextualColorName:"danger"})},d=e=>{const l=Number.parseInt(e.currentTarget.closest(".container--lotType").dataset.lotTypeId,10);bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" type?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" Type",callbackFunction:()=>{cityssm.postJSON(t+"/admin/doDeleteLotType",{lotTypeId:l},i)}}})},n=l=>{const s=Number.parseInt(l.currentTarget.closest(".container--lotType").dataset.lotTypeId,10),a=o.find(e=>s===e.lotTypeId);let d;const n=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateLotType",e.currentTarget,e=>{i(e),e.success&&d()})};cityssm.openHtmlModal("adminLotTypes-editLotType",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotTypeEdit--lotTypeId").value=s.toString(),t.querySelector("#lotTypeEdit--lotType").value=a.lotType},onshown:(e,t)=>{d=t,e.querySelector("#lotTypeEdit--lotType").focus(),e.querySelector("form").addEventListener("submit",n),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},r=l=>{const o=Number.parseInt(l.currentTarget.closest(".container--lotType").dataset.lotTypeId,10);let a;const d=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doAddLotTypeField",e.currentTarget,e=>{s.add(o),i(e),e.success&&(a(),u(o,e.lotTypeFieldId))})};cityssm.openHtmlModal("adminLotTypes-addLotTypeField",{onshow:t=>{e.populateAliases(t),o&&(t.querySelector("#lotTypeFieldAdd--lotTypeId").value=o.toString())},onshown:(e,t)=>{a=t,e.querySelector("#lotTypeFieldAdd--lotTypeField").focus(),e.querySelector("form").addEventListener("submit",d),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},p=e=>{e.preventDefault();const l=e.currentTarget.closest(".container--lotType").dataset.lotTypeId;cityssm.postJSON(t+"/admin/doMoveLotTypeUp",{lotTypeId:l,moveToTop:e.shiftKey?"1":"0"},i)},c=e=>{e.preventDefault();const l=e.currentTarget.closest(".container--lotType").dataset.lotTypeId;cityssm.postJSON(t+"/admin/doMoveLotTypeDown",{lotTypeId:l,moveToBottom:e.shiftKey?"1":"0"},i)},u=(l,s)=>{const a=o.find(e=>e.lotTypeId===l).lotTypeFields.find(e=>e.lotTypeFieldId===s);let d,n,r,p,c;const u=()=>{n.min=d.value},y=()=>{""===p.value?(d.disabled=!1,n.disabled=!1,r.disabled=!1):(d.disabled=!0,n.disabled=!0,r.disabled=!0)},m=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateLotTypeField",e.currentTarget,e=>{i(e),e.success&&c()})},T=()=>{bulmaJS.confirm({title:"Delete Field",message:"Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.",contextualColorName:"warning",okButton:{text:"Yes, Delete Field",callbackFunction:()=>{cityssm.postJSON(t+"/admin/doDeleteLotTypeField",{lotTypeFieldId:s},e=>{i(e),e.success&&c()})}}})};cityssm.openHtmlModal("adminLotTypes-editLotTypeField",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotTypeFieldEdit--lotTypeFieldId").value=a.lotTypeFieldId.toString(),t.querySelector("#lotTypeFieldEdit--lotTypeField").value=a.lotTypeField,t.querySelector("#lotTypeFieldEdit--isRequired").value=a.isRequired?"1":"0",(d=t.querySelector("#lotTypeFieldEdit--minimumLength")).value=a.minimumLength.toString(),(n=t.querySelector("#lotTypeFieldEdit--maximumLength")).value=a.maximumLength.toString(),(r=t.querySelector("#lotTypeFieldEdit--pattern")).value=a.pattern,(p=t.querySelector("#lotTypeFieldEdit--lotTypeFieldValues")).value=a.lotTypeFieldValues,y()},onshown:(e,t)=>{c=t,bulmaJS.init(e),bulmaJS.toggleHtmlClipped(),cityssm.enableNavBlocker(),e.querySelector("form").addEventListener("submit",m),d.addEventListener("keyup",u),u(),p.addEventListener("keyup",y),e.querySelector("#button--deleteLotTypeField").addEventListener("click",T)},onremoved:()=>{bulmaJS.toggleHtmlClipped(),cityssm.disableNavBlocker()}})},y=e=>{e.preventDefault();const t=Number.parseInt(e.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId,10),l=Number.parseInt(e.currentTarget.closest(".container--lotType").dataset.lotTypeId,10);u(l,t)},m=e=>{e.preventDefault();const l=e.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId;cityssm.postJSON(t+"/admin/doMoveLotTypeFieldUp",{lotTypeFieldId:l,moveToTop:e.shiftKey?"1":"0"},i)},T=e=>{e.preventDefault();const l=e.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId;cityssm.postJSON(t+"/admin/doMoveLotTypeFieldDown",{lotTypeFieldId:l,moveToBottom:e.shiftKey?"1":"0"},i)},v=(e,t,l)=>{if(0===l.length)e.insertAdjacentHTML("beforeend",'

There are no additional fields.

');else for(const o of l){const l=document.createElement("div");l.className="panel-block is-block container--lotTypeField",s.has(t)||l.classList.add("is-hidden"),l.dataset.lotTypeFieldId=o.lotTypeFieldId.toString(),l.innerHTML='',l.querySelector(".button--editLotTypeField").addEventListener("click",y),l.querySelector(".button--moveLotTypeFieldUp").addEventListener("click",m),l.querySelector(".button--moveLotTypeFieldDown").addEventListener("click",T),e.append(l)}},b=()=>{if(l.innerHTML="",0!==o.length)for(const e of o){const t=document.createElement("div");t.className="panel container--lotType",t.dataset.lotTypeId=e.lotTypeId.toString(),t.innerHTML='

'+cityssm.escapeHTML(e.lotType)+'

',v(t,e.lotTypeId,e.lotTypeFields),t.querySelector(".button--toggleLotTypeFields").addEventListener("click",a),t.querySelector(".button--deleteLotType").addEventListener("click",d),t.querySelector(".button--editLotType").addEventListener("click",n),t.querySelector(".button--addLotTypeField").addEventListener("click",r),t.querySelector(".button--moveLotTypeUp").addEventListener("click",p),t.querySelector(".button--moveLotTypeDown").addEventListener("click",c),l.append(t)}else l.insertAdjacentHTML("afterbegin",'
There are no active '+exports.aliases.lot.toLowerCase()+" types.

")};document.querySelector("#button--addLotType").addEventListener("click",()=>{let l;const s=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doAddLotType",e.currentTarget,e=>{e.success?(l(),o=e.lotTypes,b()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Type",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminLotTypes-addLotType",{onshow:t=>{e.populateAliases(t)},onshown:(e,t)=>{l=t,e.querySelector("#lotTypeAdd--lotType").focus(),e.querySelector("form").addEventListener("submit",s),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),b()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#container--lotTypes");let l=exports.lotTypes;delete exports.lotTypes;const o=new Set,s=e=>{const t=e.currentTarget,l=t.closest(".container--lotType"),s=Number.parseInt(l.dataset.lotTypeId,10);o.has(s)?o.delete(s):o.add(s),t.innerHTML=o.has(s)?'':'';const i=l.querySelectorAll(".panel-block");for(const e of i)e.classList.toggle("is-hidden")},i=e=>{e.success?(l=e.lotTypes,v()):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Type",message:e.errorMessage||"",contextualColorName:"danger"})},a=t=>{const l=Number.parseInt(t.currentTarget.closest(".container--lotType").dataset.lotTypeId,10);bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" type?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotType",{lotTypeId:l},i)}}})},d=t=>{const o=Number.parseInt(t.currentTarget.closest(".container--lotType").dataset.lotTypeId,10),s=l.find(e=>o===e.lotTypeId);let a;const d=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotType",t.currentTarget,e=>{i(e),e.success&&a()})};cityssm.openHtmlModal("adminLotTypes-editLotType",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotTypeEdit--lotTypeId").value=o.toString(),t.querySelector("#lotTypeEdit--lotType").value=s.lotType},onshown:(e,t)=>{a=t,e.querySelector("#lotTypeEdit--lotType").focus(),e.querySelector("form").addEventListener("submit",d),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},n=t=>{const l=Number.parseInt(t.currentTarget.closest(".container--lotType").dataset.lotTypeId,10);let s;const a=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doAddLotTypeField",t.currentTarget,e=>{o.add(l),i(e),e.success&&(s(),c(l,e.lotTypeFieldId))})};cityssm.openHtmlModal("adminLotTypes-addLotTypeField",{onshow:t=>{e.populateAliases(t),l&&(t.querySelector("#lotTypeFieldAdd--lotTypeId").value=l.toString())},onshown:(e,t)=>{s=t,e.querySelector("#lotTypeFieldAdd--lotTypeField").focus(),e.querySelector("form").addEventListener("submit",a),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},r=t=>{t.preventDefault();const l=t.currentTarget.closest(".container--lotType").dataset.lotTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotTypeUp",{lotTypeId:l,moveToTop:t.shiftKey?"1":"0"},i)},p=t=>{t.preventDefault();const l=t.currentTarget.closest(".container--lotType").dataset.lotTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotTypeDown",{lotTypeId:l,moveToBottom:t.shiftKey?"1":"0"},i)},c=(t,o)=>{const s=l.find(e=>e.lotTypeId===t).lotTypeFields.find(e=>e.lotTypeFieldId===o);let a,d,n,r,p;const c=()=>{d.min=a.value},u=()=>{""===r.value?(a.disabled=!1,d.disabled=!1,n.disabled=!1):(a.disabled=!0,d.disabled=!0,n.disabled=!0)},y=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotTypeField",t.currentTarget,e=>{i(e),e.success&&p()})},m=()=>{bulmaJS.confirm({title:"Delete Field",message:"Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.",contextualColorName:"warning",okButton:{text:"Yes, Delete Field",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotTypeField",{lotTypeFieldId:o},e=>{i(e),e.success&&p()})}}})};cityssm.openHtmlModal("adminLotTypes-editLotTypeField",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotTypeFieldEdit--lotTypeFieldId").value=s.lotTypeFieldId.toString(),t.querySelector("#lotTypeFieldEdit--lotTypeField").value=s.lotTypeField,t.querySelector("#lotTypeFieldEdit--isRequired").value=s.isRequired?"1":"0",(a=t.querySelector("#lotTypeFieldEdit--minimumLength")).value=s.minimumLength.toString(),(d=t.querySelector("#lotTypeFieldEdit--maximumLength")).value=s.maximumLength.toString(),(n=t.querySelector("#lotTypeFieldEdit--pattern")).value=s.pattern,(r=t.querySelector("#lotTypeFieldEdit--lotTypeFieldValues")).value=s.lotTypeFieldValues,u()},onshown:(e,t)=>{p=t,bulmaJS.init(e),bulmaJS.toggleHtmlClipped(),cityssm.enableNavBlocker(),e.querySelector("form").addEventListener("submit",y),a.addEventListener("keyup",c),c(),r.addEventListener("keyup",u),e.querySelector("#button--deleteLotTypeField").addEventListener("click",m)},onremoved:()=>{bulmaJS.toggleHtmlClipped(),cityssm.disableNavBlocker()}})},u=e=>{e.preventDefault();const t=Number.parseInt(e.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId,10),l=Number.parseInt(e.currentTarget.closest(".container--lotType").dataset.lotTypeId,10);c(l,t)},y=t=>{t.preventDefault();const l=t.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotTypeFieldUp",{lotTypeFieldId:l,moveToTop:t.shiftKey?"1":"0"},i)},m=t=>{t.preventDefault();const l=t.currentTarget.closest(".container--lotTypeField").dataset.lotTypeFieldId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotTypeFieldDown",{lotTypeFieldId:l,moveToBottom:t.shiftKey?"1":"0"},i)},T=(e,t,l)=>{if(0===l.length)e.insertAdjacentHTML("beforeend",'

There are no additional fields.

');else for(const s of l){const l=document.createElement("div");l.className="panel-block is-block container--lotTypeField",o.has(t)||l.classList.add("is-hidden"),l.dataset.lotTypeFieldId=s.lotTypeFieldId.toString(),l.innerHTML='',l.querySelector(".button--editLotTypeField").addEventListener("click",u),l.querySelector(".button--moveLotTypeFieldUp").addEventListener("click",y),l.querySelector(".button--moveLotTypeFieldDown").addEventListener("click",m),e.append(l)}},v=()=>{if(t.innerHTML="",0!==l.length)for(const e of l){const l=document.createElement("div");l.className="panel container--lotType",l.dataset.lotTypeId=e.lotTypeId.toString(),l.innerHTML='

'+cityssm.escapeHTML(e.lotType)+'

',T(l,e.lotTypeId,e.lotTypeFields),l.querySelector(".button--toggleLotTypeFields").addEventListener("click",s),l.querySelector(".button--deleteLotType").addEventListener("click",a),l.querySelector(".button--editLotType").addEventListener("click",d),l.querySelector(".button--addLotTypeField").addEventListener("click",n),l.querySelector(".button--moveLotTypeUp").addEventListener("click",r),l.querySelector(".button--moveLotTypeDown").addEventListener("click",p),t.append(l)}else t.insertAdjacentHTML("afterbegin",'
There are no active '+exports.aliases.lot.toLowerCase()+" types.

")};document.querySelector("#button--addLotType").addEventListener("click",()=>{let t;const o=o=>{o.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doAddLotType",o.currentTarget,e=>{e.success?(t(),l=e.lotTypes,v()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("adminLotTypes-addLotType",{onshow:t=>{e.populateAliases(t)},onshown:(e,l)=>{t=l,e.querySelector("#lotTypeAdd--lotType").focus(),e.querySelector("form").addEventListener("submit",o),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),v()})(); \ No newline at end of file diff --git a/public/javascripts/adminOccupancyTypes.min.js b/public/javascripts/adminOccupancyTypes.min.js index 5c3ae7ab..6c6d3223 100644 --- a/public/javascripts/adminOccupancyTypes.min.js +++ b/public/javascripts/adminOccupancyTypes.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,c=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#container--occupancyTypes");let a=exports.occupancyTypes;delete exports.occupancyTypes;let s=exports.allOccupancyTypeFields;delete exports.allOccupancyTypeFields;const n=new Set,l=e=>{const c=e.currentTarget,t=c.closest(".container--occupancyType"),a=Number.parseInt(t.dataset.occupancyTypeId,10);n.has(a)?n.delete(a):n.add(a),c.innerHTML=n.has(a)?'':'';const s=t.querySelectorAll(".panel-block");for(const e of s)e.classList.toggle("is-hidden")},o=e=>{e.success?(a=e.occupancyTypes,s=e.allOccupancyTypeFields,f()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupancy+" Type",message:e.errorMessage,contextualColorName:"danger"})},i=e=>{const t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);bulmaJS.confirm({title:"Delete "+exports.aliases.occupancy+" Type",message:"Are you sure you want to delete this "+exports.aliases.occupancy.toLowerCase()+" type?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.occupancy+" Type",callbackFunction:()=>{cityssm.postJSON(c+"/admin/doDeleteOccupancyType",{occupancyTypeId:t},o)}}})},d=t=>{const s=Number.parseInt(t.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10),n=a.find(e=>s===e.occupancyTypeId);let l;const i=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doUpdateOccupancyType",e.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyType",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeEdit--occupancyTypeId").value=s.toString(),c.querySelector("#occupancyTypeEdit--occupancyType").value=n.occupancyType},onshown:(e,c)=>{l=c,e.querySelector("#occupancyTypeEdit--occupancyType").focus(),e.querySelector("form").addEventListener("submit",i),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},p=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);let s;const l=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doAddOccupancyTypeField",e.currentTarget,e=>{n.add(a),o(e),e.success&&(s(),r(a,e.occupancyTypeFieldId))})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField",{onshow:c=>{e.populateAliases(c),a&&(c.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value=a.toString())},onshown:(e,c)=>{s=c,e.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus(),e.querySelector("form").addEventListener("submit",l),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},u=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeUp",{occupancyTypeId:t,moveToTop:e.shiftKey?"1":"0"},o)},y=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeDown",{occupancyTypeId:t,moveToBottom:e.shiftKey?"1":"0"},o)},r=(t,n)=>{let l;t&&(l=a.find(e=>e.occupancyTypeId===t));const i=(l?l.occupancyTypeFields:s).find(e=>e.occupancyTypeFieldId===n);let d,p,u,y,r;const T=()=>{p.min=d.value},m=()=>{""===y.value?(d.disabled=!1,p.disabled=!1,u.disabled=!1):(d.disabled=!0,p.disabled=!0,u.disabled=!0)},v=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doUpdateOccupancyTypeField",e.currentTarget,e=>{o(e),e.success&&r()})},b=()=>{bulmaJS.confirm({title:"Delete Field",message:"Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.",contextualColorName:"warning",okButton:{text:"Yes, Delete Field",callbackFunction:()=>{cityssm.postJSON(c+"/admin/doDeleteOccupancyTypeField",{occupancyTypeFieldId:n},e=>{o(e),e.success&&r()})}}})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyTypeField",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldId").value=i.occupancyTypeFieldId.toString(),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value=i.occupancyTypeField,c.querySelector("#occupancyTypeFieldEdit--isRequired").value=i.isRequired?"1":"0",(d=c.querySelector("#occupancyTypeFieldEdit--minimumLength")).value=i.minimumLength.toString(),(p=c.querySelector("#occupancyTypeFieldEdit--maximumLength")).value=i.maximumLength.toString(),(u=c.querySelector("#occupancyTypeFieldEdit--pattern")).value=i.pattern,(y=c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues")).value=i.occupancyTypeFieldValues,m()},onshown:(e,c)=>{r=c,bulmaJS.init(e),bulmaJS.toggleHtmlClipped(),cityssm.enableNavBlocker(),e.querySelector("form").addEventListener("submit",v),d.addEventListener("keyup",T),T(),y.addEventListener("keyup",m),e.querySelector("#button--deleteOccupancyTypeField").addEventListener("click",b)},onremoved:()=>{bulmaJS.toggleHtmlClipped(),cityssm.disableNavBlocker()}})},T=e=>{e.preventDefault();const c=Number.parseInt(e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId,10),t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);r(t,c)},m=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeFieldUp",{occupancyTypeFieldId:t,moveToTop:e.shiftKey?"1":"0"},o)},v=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeFieldDown",{occupancyTypeFieldId:t,moveToBottom:e.shiftKey?"1":"0"},o)},b=(e,c,t)=>{if(0===t.length)e.insertAdjacentHTML("beforeend",'

There are no additional fields.

');else for(const a of t){const t=document.createElement("div");t.className="panel-block is-block container--occupancyTypeField",c&&!n.has(c)&&t.classList.add("is-hidden"),t.dataset.occupancyTypeFieldId=a.occupancyTypeFieldId.toString(),t.innerHTML='',t.querySelector(".button--editOccupancyTypeField").addEventListener("click",T),t.querySelector(".button--moveOccupancyTypeFieldUp").addEventListener("click",m),t.querySelector(".button--moveOccupancyTypeFieldDown").addEventListener("click",v),e.append(t)}},f=()=>{if(t.innerHTML='

(All Occupancy Types)

',b(t.querySelector("#container--allOccupancyTypeFields"),void 0,s),t.querySelector(".button--addOccupancyTypeField").addEventListener("click",p),0!==a.length)for(const e of a){const c=document.createElement("div");c.className="panel container--occupancyType",c.dataset.occupancyTypeId=e.occupancyTypeId.toString(),c.innerHTML='

'+cityssm.escapeHTML(e.occupancyType)+'

',b(c,e.occupancyTypeId,e.occupancyTypeFields),c.querySelector(".button--toggleOccupancyTypeFields").addEventListener("click",l),c.querySelector(".button--deleteOccupancyType").addEventListener("click",i),c.querySelector(".button--editOccupancyType").addEventListener("click",d),c.querySelector(".button--addOccupancyTypeField").addEventListener("click",p),c.querySelector(".button--moveOccupancyTypeUp").addEventListener("click",u),c.querySelector(".button--moveOccupancyTypeDown").addEventListener("click",y),t.append(c)}else t.insertAdjacentHTML("afterbegin",'
There are no active '+exports.aliases.occupancy.toLowerCase()+" types.

")};document.querySelector("#button--addOccupancyType").addEventListener("click",()=>{let t;const s=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doAddOccupancyType",e.currentTarget,e=>{e.success?(t(),a=e.occupancyTypes,f()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy+" Type",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyType",{onshow:c=>{e.populateAliases(c)},onshown:(e,c)=>{t=c,e.querySelector("#occupancyTypeAdd--occupancyType").focus(),e.querySelector("form").addEventListener("submit",s),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),f()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,c=document.querySelector("#container--occupancyTypes");let t=exports.occupancyTypes;delete exports.occupancyTypes;let a=exports.allOccupancyTypeFields;delete exports.allOccupancyTypeFields;const s=new Set,n=e=>{const c=e.currentTarget,t=c.closest(".container--occupancyType"),a=Number.parseInt(t.dataset.occupancyTypeId,10);s.has(a)?s.delete(a):s.add(a),c.innerHTML=s.has(a)?'':'';const n=t.querySelectorAll(".panel-block");for(const e of n)e.classList.toggle("is-hidden")},l=e=>{e.success?(t=e.occupancyTypes,a=e.allOccupancyTypeFields,b()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupancy+" Type",message:e.errorMessage||"",contextualColorName:"danger"})},o=c=>{const t=Number.parseInt(c.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);bulmaJS.confirm({title:"Delete "+exports.aliases.occupancy+" Type",message:"Are you sure you want to delete this "+exports.aliases.occupancy.toLowerCase()+" type?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.occupancy+" Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteOccupancyType",{occupancyTypeId:t},l)}}})},i=c=>{const a=Number.parseInt(c.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10),s=t.find(e=>a===e.occupancyTypeId);let n;const o=c=>{c.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateOccupancyType",c.currentTarget,e=>{l(e),e.success&&n()})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyType",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeEdit--occupancyTypeId").value=a.toString(),c.querySelector("#occupancyTypeEdit--occupancyType").value=s.occupancyType},onshown:(e,c)=>{n=c,e.querySelector("#occupancyTypeEdit--occupancyType").focus(),e.querySelector("form").addEventListener("submit",o),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=c=>{const t=Number.parseInt(c.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);let a;const n=c=>{c.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doAddOccupancyTypeField",c.currentTarget,e=>{s.add(t),l(e),e.success&&(a(),y(t,e.occupancyTypeFieldId))})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField",{onshow:c=>{e.populateAliases(c),t&&(c.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value=t.toString())},onshown:(e,c)=>{a=c,e.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus(),e.querySelector("form").addEventListener("submit",n),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},p=c=>{c.preventDefault();const t=c.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveOccupancyTypeUp",{occupancyTypeId:t,moveToTop:c.shiftKey?"1":"0"},l)},u=c=>{c.preventDefault();const t=c.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveOccupancyTypeDown",{occupancyTypeId:t,moveToBottom:c.shiftKey?"1":"0"},l)},y=(c,s)=>{let n;c&&(n=t.find(e=>e.occupancyTypeId===c));const o=(n?n.occupancyTypeFields:a).find(e=>e.occupancyTypeFieldId===s);let i,d,p,u,y;const r=()=>{d.min=i.value},T=()=>{""===u.value?(i.disabled=!1,d.disabled=!1,p.disabled=!1):(i.disabled=!0,d.disabled=!0,p.disabled=!0)},v=c=>{c.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateOccupancyTypeField",c.currentTarget,e=>{l(e),e.success&&y()})},m=()=>{bulmaJS.confirm({title:"Delete Field",message:"Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.",contextualColorName:"warning",okButton:{text:"Yes, Delete Field",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteOccupancyTypeField",{occupancyTypeFieldId:s},e=>{l(e),e.success&&y()})}}})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyTypeField",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldId").value=o.occupancyTypeFieldId.toString(),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value=o.occupancyTypeField,c.querySelector("#occupancyTypeFieldEdit--isRequired").value=o.isRequired?"1":"0",(i=c.querySelector("#occupancyTypeFieldEdit--minimumLength")).value=o.minimumLength.toString(),(d=c.querySelector("#occupancyTypeFieldEdit--maximumLength")).value=o.maximumLength.toString(),(p=c.querySelector("#occupancyTypeFieldEdit--pattern")).value=o.pattern,(u=c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues")).value=o.occupancyTypeFieldValues,T()},onshown:(e,c)=>{y=c,bulmaJS.init(e),bulmaJS.toggleHtmlClipped(),cityssm.enableNavBlocker(),e.querySelector("form").addEventListener("submit",v),i.addEventListener("keyup",r),r(),u.addEventListener("keyup",T),e.querySelector("#button--deleteOccupancyTypeField").addEventListener("click",m)},onremoved:()=>{bulmaJS.toggleHtmlClipped(),cityssm.disableNavBlocker()}})},r=e=>{e.preventDefault();const c=Number.parseInt(e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId,10),t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);y(t,c)},T=c=>{c.preventDefault();const t=c.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveOccupancyTypeFieldUp",{occupancyTypeFieldId:t,moveToTop:c.shiftKey?"1":"0"},l)},v=c=>{c.preventDefault();const t=c.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveOccupancyTypeFieldDown",{occupancyTypeFieldId:t,moveToBottom:c.shiftKey?"1":"0"},l)},m=(e,c,t)=>{if(0===t.length)e.insertAdjacentHTML("beforeend",'

There are no additional fields.

');else for(const a of t){const t=document.createElement("div");t.className="panel-block is-block container--occupancyTypeField",c&&!s.has(c)&&t.classList.add("is-hidden"),t.dataset.occupancyTypeFieldId=a.occupancyTypeFieldId.toString(),t.innerHTML='',t.querySelector(".button--editOccupancyTypeField").addEventListener("click",r),t.querySelector(".button--moveOccupancyTypeFieldUp").addEventListener("click",T),t.querySelector(".button--moveOccupancyTypeFieldDown").addEventListener("click",v),e.append(t)}},b=()=>{if(c.innerHTML='

(All Occupancy Types)

',m(c.querySelector("#container--allOccupancyTypeFields"),void 0,a),c.querySelector(".button--addOccupancyTypeField").addEventListener("click",d),0!==t.length)for(const e of t){const t=document.createElement("div");t.className="panel container--occupancyType",t.dataset.occupancyTypeId=e.occupancyTypeId.toString(),t.innerHTML='

'+cityssm.escapeHTML(e.occupancyType)+'

',m(t,e.occupancyTypeId,e.occupancyTypeFields),t.querySelector(".button--toggleOccupancyTypeFields").addEventListener("click",n),t.querySelector(".button--deleteOccupancyType").addEventListener("click",o),t.querySelector(".button--editOccupancyType").addEventListener("click",i),t.querySelector(".button--addOccupancyTypeField").addEventListener("click",d),t.querySelector(".button--moveOccupancyTypeUp").addEventListener("click",p),t.querySelector(".button--moveOccupancyTypeDown").addEventListener("click",u),c.append(t)}else c.insertAdjacentHTML("afterbegin",'
There are no active '+exports.aliases.occupancy.toLowerCase()+" types.

")};document.querySelector("#button--addOccupancyType").addEventListener("click",()=>{let c;const a=a=>{a.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doAddOccupancyType",a.currentTarget,e=>{e.success?(c(),t=e.occupancyTypes,b()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyType",{onshow:c=>{e.populateAliases(c)},onshown:(e,t)=>{c=t,e.querySelector("#occupancyTypeAdd--occupancyType").focus(),e.querySelector("form").addEventListener("submit",a),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),b()})(); \ No newline at end of file diff --git a/public/javascripts/adminTables.min.js b/public/javascripts/adminTables.min.js index ad9c9a71..dfcfc805 100644 --- a/public/javascripts/adminTables.min.js +++ b/public/javascripts/adminTables.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix;let t=exports.workOrderTypes;delete exports.workOrderTypes;const s=s=>{s.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateWorkOrderType",s.currentTarget,e=>{e.success?(t=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},o=s=>{const o=s.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(t=e.workOrderTypes).length?l():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},r=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},a=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},l=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==t.length){e.innerHTML="";for(const l of t){const t=document.createElement("tr");t.dataset.workOrderTypeId=l.workOrderTypeId.toString(),t.innerHTML='
',t.querySelector("form").addEventListener("submit",s),t.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",r),t.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",a),t.querySelector(".button--deleteWorkOrderType").addEventListener("click",o),e.append(t)}}else e.innerHTML='

There are no active work order types.

'};document.querySelector("#form--addWorkOrderType").addEventListener("submit",s=>{s.preventDefault();const o=s.currentTarget;cityssm.postJSON(e+"/admin/doAddWorkOrderType",o,e=>{e.success?(t=e.workOrderTypes,l(),o.reset(),o.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})}),l();let n=exports.workOrderMilestoneTypes;delete exports.workOrderMilestoneTypes;const d=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateWorkOrderMilestoneType",t.currentTarget,e=>{e.success?(n=e.workOrderMilestoneTypes,bulmaJS.alert({message:"Work Order Milestone Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},i=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.workOrderMilestoneTypeId;bulmaJS.confirm({title:"Delete Work Order Milestone Type",message:"Are you sure you want to delete this work order milestone type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Milestone Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteWorkOrderMilestoneType",{workOrderMilestoneTypeId:o},e=>{e.success?(0===(n=e.workOrderMilestoneTypes).length?p():s.remove(),bulmaJS.alert({message:"Work Order Milestone Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},c=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderMilestoneTypeUp",{workOrderMilestoneTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},u=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderMilestoneTypeDown",{workOrderMilestoneTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},p=()=>{const e=document.querySelector("#container--workOrderMilestoneTypes");if(0!==n.length){e.innerHTML="";for(const t of n){const s=document.createElement("tr");s.dataset.workOrderMilestoneTypeId=t.workOrderMilestoneTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",d),s.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click",c),s.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click",u),s.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click",i),e.append(s)}}else e.innerHTML='

There are no active work order milestone types.

'};document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddWorkOrderMilestoneType",s,e=>{e.success?(n=e.workOrderMilestoneTypes,p(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})}),p();let m=exports.lotStatuses;delete exports.lotStatuses;const y=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateLotStatus",t.currentTarget,e=>{e.success?(m=e.lotStatuses,bulmaJS.alert({message:exports.aliases.lot+" Status Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},v=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotStatusId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Status",message:"Are you sure you want to delete this status?
Note that no "+exports.aliases.lots.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Status",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteLotStatus",{lotStatusId:o},e=>{e.success?(0===(m=e.lotStatuses).length?g():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" Status Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})}}})},T=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e+"/admin/doMoveLotStatusUp",{lotStatusId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},b=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e+"/admin/doMoveLotStatusDown",{lotStatusId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},g=()=>{const e=document.querySelector("#container--lotStatuses");if(0!==t.length){e.innerHTML="";for(const t of m){const s=document.createElement("tr");s.dataset.lotStatusId=t.lotStatusId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",y),s.querySelector(".button--moveLotStatusUp").addEventListener("click",T),s.querySelector(".button--moveLotStatusDown").addEventListener("click",b),s.querySelector(".button--deleteLotStatus").addEventListener("click",v),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" statuses.

"};document.querySelector("#form--addLotStatus").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddLotStatus",s,e=>{e.success?(m=e.lotStatuses,g(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})}),g();let S=exports.lotOccupantTypes;delete exports.lotOccupantTypes;const O=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateLotOccupantType",t.currentTarget,e=>{e.success?(S=e.lotOccupantTypes,bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},M=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotOccupantTypeId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupant.toLowerCase()+" type?
Note that no "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteLotOccupantType",{lotOccupantTypeId:o},e=>{e.success?(0===(S=e.lotOccupantTypes).length?w():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},k=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e+"/admin/doMoveLotOccupantTypeUp",{lotOccupantTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},f=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e+"/admin/doMoveLotOccupantTypeDown",{lotOccupantTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},w=()=>{const e=document.querySelector("#container--lotOccupantTypes");if(0!==t.length){e.innerHTML="";for(const t of S){const s=document.createElement("tr");s.dataset.lotOccupantTypeId=t.lotOccupantTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",O),s.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click",k),s.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click",f),s.querySelector(".button--deleteLotOccupantType").addEventListener("click",M),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" "+cityssm.escapeHTML(exports.aliases.occupant.toLowerCase())+" types.

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddLotOccupantType",s,e=>{e.success?(S=e.lotOccupantTypes,w(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})}),w()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los;let t=exports.workOrderTypes;delete exports.workOrderTypes;const s=s=>{s.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderType",s.currentTarget,e=>{e.success?(t=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},o=s=>{const o=s.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(t=e.workOrderTypes).length?l():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},r=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},a=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},l=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==t.length){e.innerHTML="";for(const l of t){const t=document.createElement("tr");t.dataset.workOrderTypeId=l.workOrderTypeId.toString(),t.innerHTML='
',t.querySelector("form").addEventListener("submit",s),t.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",r),t.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",a),t.querySelector(".button--deleteWorkOrderType").addEventListener("click",o),e.append(t)}}else e.innerHTML='

There are no active work order types.

'};document.querySelector("#form--addWorkOrderType").addEventListener("submit",s=>{s.preventDefault();const o=s.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddWorkOrderType",o,e=>{e.success?(t=e.workOrderTypes,l(),o.reset(),o.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),l();let n=exports.workOrderMilestoneTypes;delete exports.workOrderMilestoneTypes;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderMilestoneType",t.currentTarget,e=>{e.success?(n=e.workOrderMilestoneTypes,bulmaJS.alert({message:"Work Order Milestone Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},d=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.workOrderMilestoneTypeId;bulmaJS.confirm({title:"Delete Work Order Milestone Type",message:"Are you sure you want to delete this work order milestone type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Milestone Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderMilestoneType",{workOrderMilestoneTypeId:o},e=>{e.success?(0===(n=e.workOrderMilestoneTypes).length?p():s.remove(),bulmaJS.alert({message:"Work Order Milestone Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},c=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderMilestoneTypeUp",{workOrderMilestoneTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},u=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderMilestoneTypeDown",{workOrderMilestoneTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},p=()=>{const e=document.querySelector("#container--workOrderMilestoneTypes");if(0!==n.length){e.innerHTML="";for(const t of n){const s=document.createElement("tr");s.dataset.workOrderMilestoneTypeId=t.workOrderMilestoneTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",i),s.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click",c),s.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click",u),s.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click",d),e.append(s)}}else e.innerHTML='

There are no active work order milestone types.

'};document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddWorkOrderMilestoneType",s,e=>{e.success?(n=e.workOrderMilestoneTypes,p(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),p();let m=exports.lotStatuses;delete exports.lotStatuses;const y=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotStatus",t.currentTarget,e=>{e.success?(m=e.lotStatuses,bulmaJS.alert({message:exports.aliases.lot+" Status Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},v=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotStatusId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Status",message:"Are you sure you want to delete this status?
Note that no "+exports.aliases.lots.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Status",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotStatus",{lotStatusId:o},e=>{e.success?(0===(m=e.lotStatuses).length?g():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" Status Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},T=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotStatusUp",{lotStatusId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},b=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotStatusDown",{lotStatusId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},g=()=>{const e=document.querySelector("#container--lotStatuses");if(0!==t.length){e.innerHTML="";for(const t of m){const s=document.createElement("tr");s.dataset.lotStatusId=t.lotStatusId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",y),s.querySelector(".button--moveLotStatusUp").addEventListener("click",T),s.querySelector(".button--moveLotStatusDown").addEventListener("click",b),s.querySelector(".button--deleteLotStatus").addEventListener("click",v),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" statuses.

"};document.querySelector("#form--addLotStatus").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotStatus",s,e=>{e.success?(m=e.lotStatuses,g(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})}),g();let S=exports.lotOccupantTypes;delete exports.lotOccupantTypes;const O=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotOccupantType",t.currentTarget,e=>{e.success?(S=e.lotOccupantTypes,bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},f=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotOccupantTypeId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupant.toLowerCase()+" type?
Note that no "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotOccupantType",{lotOccupantTypeId:o},e=>{e.success?(0===(S=e.lotOccupantTypes).length?k():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},M=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotOccupantTypeUp",{lotOccupantTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,k()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},x=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotOccupantTypeDown",{lotOccupantTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,k()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},k=()=>{const e=document.querySelector("#container--lotOccupantTypes");if(0!==t.length){e.innerHTML="";for(const t of S){const s=document.createElement("tr");s.dataset.lotOccupantTypeId=t.lotOccupantTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",O),s.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click",M),s.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click",x),s.querySelector(".button--deleteLotOccupantType").addEventListener("click",f),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" "+cityssm.escapeHTML(exports.aliases.occupant.toLowerCase())+" types.

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotOccupantType",s,e=>{e.success?(S=e.lotOccupantTypes,k(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),k()})(); \ No newline at end of file diff --git a/public/javascripts/dashboard.min.js b/public/javascripts/dashboard.min.js index f17777e7..e650afc4 100644 --- a/public/javascripts/dashboard.min.js +++ b/public/javascripts/dashboard.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,o=document.querySelectorAll(".fa-circle[data-work-order-number");for(const r of o)r.style.color=e.getRandomColor(r.dataset.workOrderNumber)})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,o=document.querySelectorAll(".fa-circle[data-work-order-number");for(const r of o)r.style.color=e.getRandomColor(r.dataset.workOrderNumber||"")})(); \ No newline at end of file diff --git a/public/javascripts/lotEdit.min.js b/public/javascripts/lotEdit.min.js index ca259a3c..333ad22b 100644 --- a/public/javascripts/lotEdit.min.js +++ b/public/javascripts/lotEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,e=document.querySelector("main").dataset.urlPrefix,o=document.querySelector("#lot--lotId").value,l=""===o,s=document.querySelector("#form--lot");s.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/"+(l?"doCreateLot":"doUpdateLot"),s,t=>{t.success?l?window.location.href=e+"/lots/"+t.lotId+"/edit":bulmaJS.alert({message:exports.aliases.lot+" Updated Successfully",contextualColorName:"success"}):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot,message:t.errorMessage,contextualColorName:"danger"})})}),t.initializeUnlockFieldButtons(s),l||document.querySelector("#button--deleteLot").addEventListener("click",t=>{t.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.lot,message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+"?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot,callbackFunction:()=>{cityssm.postJSON(e+"/lots/doDeleteLot",{lotId:o},t=>{t.success?(cityssm.disableNavBlocker(),window.location.href=e+"/lots/?t="+Date.now()):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot,message:t.errorMessage,contextualColorName:"danger"})})}}})});let n=exports.lotComments;delete exports.lotComments;const a=l=>{const s=Number.parseInt(l.currentTarget.closest("tr").dataset.lotCommentId,10),a=n.find(t=>t.lotCommentId===s);let r,i;const d=t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/doUpdateLotComment",r,t=>{t.success?(n=t.lotComments,i(),m()):bulmaJS.alert({title:"Error Updating Comment",message:t.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editComment",{onshow:e=>{t.populateAliases(e),e.querySelector("#lotCommentEdit--lotId").value=o,e.querySelector("#lotCommentEdit--lotCommentId").value=s.toString(),e.querySelector("#lotCommentEdit--lotComment").value=a.lotComment;const l=e.querySelector("#lotCommentEdit--lotCommentDateString");l.value=a.lotCommentDateString;const n=cityssm.dateToString(new Date);l.max=a.lotCommentDateString<=n?n:a.lotCommentDateString,e.querySelector("#lotCommentEdit--lotCommentTimeString").value=a.lotCommentTimeString},onshown:(e,o)=>{bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),t.initializeTimePickers(e),e.querySelector("#lotCommentEdit--lotComment").focus(),(r=e.querySelector("form")).addEventListener("submit",d),i=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},r=t=>{const l=Number.parseInt(t.currentTarget.closest("tr").dataset.lotCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(e+"/lots/doDeleteLotComment",{lotId:o,lotCommentId:l},t=>{t.success?(n=t.lotComments,m()):bulmaJS.alert({title:"Error Removing Comment",message:t.errorMessage,contextualColorName:"danger"})})}},contextualColorName:"warning"})},m=()=>{const t=document.querySelector("#container--lotComments");if(0===n.length)return void(t.innerHTML='

There are no comments to display.

');const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable",e.innerHTML='CommentorComment DateCommentOptions';for(const t of n){const o=document.createElement("tr");o.dataset.lotCommentId=t.lotCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(t.recordCreate_userName)+""+t.lotCommentDateString+(0===t.lotCommentTime?"":" "+t.lotCommentTimeString)+""+cityssm.escapeHTML(t.lotComment)+'
',o.querySelector(".button--edit").addEventListener("click",a),o.querySelector(".button--delete").addEventListener("click",r),e.querySelector("tbody").append(o)}t.innerHTML="",t.append(e)},i=()=>{let l;const s=t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/doAddLotComment",t.currentTarget,t=>{t.success&&(n=t.lotComments,m(),l())})};cityssm.openHtmlModal("lot-addComment",{onshow(e){t.populateAliases(e),e.querySelector("#lotCommentAdd--lotId").value=o,e.querySelector("form").addEventListener("submit",s)},onshown(t,e){bulmaJS.toggleHtmlClipped(),l=e,t.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})};l||(document.querySelector("#lotComments--add").addEventListener("click",i),m())})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,e=document.querySelector("#lot--lotId").value,o=""===e,l=document.querySelector("#form--lot");l.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/"+(o?"doCreateLot":"doUpdateLot"),l,e=>{e.success?o?window.location.href=t.urlPrefix+"/lots/"+e.lotId+"/edit":bulmaJS.alert({message:exports.aliases.lot+" Updated Successfully",contextualColorName:"success"}):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"})})}),t.initializeUnlockFieldButtons(l),o||document.querySelector("#button--deleteLot").addEventListener("click",o=>{o.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.lot,message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+"?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot,callbackFunction:()=>{cityssm.postJSON(t.urlPrefix+"/lots/doDeleteLot",{lotId:e},e=>{e.success?(cityssm.disableNavBlocker(),window.location.href=t.urlPrefix+"/lots/?t="+Date.now()):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"})})}}})});let s=exports.lotComments;delete exports.lotComments;const n=o=>{const l=Number.parseInt(o.currentTarget.closest("tr").dataset.lotCommentId,10),n=s.find(t=>t.lotCommentId===l);let r,m;const i=e=>{e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/doUpdateLotComment",r,t=>{t.success?(s=t.lotComments,m(),a()):bulmaJS.alert({title:"Error Updating Comment",message:t.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editComment",{onshow:o=>{t.populateAliases(o),o.querySelector("#lotCommentEdit--lotId").value=e,o.querySelector("#lotCommentEdit--lotCommentId").value=l.toString(),o.querySelector("#lotCommentEdit--lotComment").value=n.lotComment;const s=o.querySelector("#lotCommentEdit--lotCommentDateString");s.value=n.lotCommentDateString;const r=cityssm.dateToString(new Date);s.max=n.lotCommentDateString<=r?r:n.lotCommentDateString,o.querySelector("#lotCommentEdit--lotCommentTimeString").value=n.lotCommentTimeString},onshown:(e,o)=>{bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),t.initializeTimePickers(e),e.querySelector("#lotCommentEdit--lotComment").focus(),(r=e.querySelector("form")).addEventListener("submit",i),m=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},r=o=>{const l=Number.parseInt(o.currentTarget.closest("tr").dataset.lotCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(t.urlPrefix+"/lots/doDeleteLotComment",{lotId:e,lotCommentId:l},t=>{t.success?(s=t.lotComments,a()):bulmaJS.alert({title:"Error Removing Comment",message:t.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},a=()=>{const t=document.querySelector("#container--lotComments");if(0===s.length)return void(t.innerHTML='

There are no comments to display.

');const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable",e.innerHTML='CommentorComment DateCommentOptions';for(const t of s){const o=document.createElement("tr");o.dataset.lotCommentId=t.lotCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(t.recordCreate_userName||"")+""+t.lotCommentDateString+(0===t.lotCommentTime?"":" "+t.lotCommentTimeString)+""+cityssm.escapeHTML(t.lotComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",n),o.querySelector(".button--delete").addEventListener("click",r),e.querySelector("tbody").append(o)}t.innerHTML="",t.append(e)},m=()=>{let o;const l=e=>{e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/doAddLotComment",e.currentTarget,t=>{t.success&&(s=t.lotComments,a(),o())})};cityssm.openHtmlModal("lot-addComment",{onshow(o){t.populateAliases(o),o.querySelector("#lotCommentAdd--lotId").value=e,o.querySelector("form").addEventListener("submit",l)},onshown(t,e){bulmaJS.toggleHtmlClipped(),o=e,t.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})};o||(document.querySelector("#lotComments--add").addEventListener("click",m),a())})(); \ No newline at end of file diff --git a/public/javascripts/lotOccupancyEdit.min.js b/public/javascripts/lotOccupancyEdit.min.js index 21e0b9e5..4cb510d6 100644 --- a/public/javascripts/lotOccupancyEdit.min.js +++ b/public/javascripts/lotOccupancyEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,c=document.querySelector("#lotOccupancy--lotOccupancyId").value,a=""===c;let o=!1,n=a;const s=()=>{o||(o=!0,cityssm.enableNavBlocker())},l=document.querySelector("#form--lotOccupancy");l.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(t+"/lotOccupancies/"+(a?"doCreateLotOccupancy":"doUpdateLotOccupancy"),l,e=>{e.success?(o=!1,cityssm.disableNavBlocker(),a||n?window.location.href=t+"/lotOccupancies/"+e.lotOccupancyId+"/edit?t="+Date.now():bulmaJS.alert({message:exports.aliases.occupancy+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+exports.aliases.occupancy,message:e.errorMessage,contextualColorName:"danger"})})});const r=l.querySelectorAll("input, select");for(const e of r)e.addEventListener("change",s);a||document.querySelector("#button--deleteLotOccupancy").addEventListener("click",e=>{e.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.occupancy+" Record",message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:()=>{cityssm.postJSON(t+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:c},e=>{e.success?(cityssm.disableNavBlocker(),window.location.href=t+"/lotOccupancies?t="+Date.now()):bulmaJS.alert({title:"Error Deleting Record",message:e.errorMessage,contextualColorName:"danger"})})}}})});const i=document.querySelector("#lotOccupancy--occupancyTypeId");if(a){const e=document.querySelector("#container--lotOccupancyFields");i.addEventListener("change",()=>{""!==i.value?cityssm.postJSON(t+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:i.value},t=>{if(0===t.occupancyTypeFields.length)return void(e.innerHTML='

There are no additional fields for this '+exports.aliases.occupancy.toLowerCase()+" type.

");e.innerHTML="";let c="";for(const a of t.occupancyTypeFields){c+=","+a.occupancyTypeFieldId;const t="lotOccupancyFieldValue_"+a.occupancyTypeFieldId,o="lotOccupancy--"+t,n=document.createElement("div");if(n.className="field",n.innerHTML='
',n.querySelector("label").textContent=a.occupancyTypeField,""===a.occupancyTypeFieldValues){const e=document.createElement("input");e.className="input",e.id=o,e.name=t,e.type="text",e.required=a.isRequired,e.minLength=a.minimumLength,e.maxLength=a.maximumLength,a.pattern&&""!==a.pattern&&(e.pattern=a.pattern),n.querySelector(".control").append(e)}else{n.querySelector(".control").innerHTML='
',n.querySelector("select").required=a.isRequired;const e=a.occupancyTypeFieldValues.split("\n");for(const t of e){const e=document.createElement("option");e.value=t,e.textContent=t,n.querySelector("select").append(e)}}e.append(n)}e.insertAdjacentHTML("beforeend",'')}):e.innerHTML='

Select the '+exports.aliases.occupancy.toLowerCase()+" type to load the available fields.

"})}else{const e=i.value;i.addEventListener("change",()=>{i.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:"Are you sure you want to change the "+exports.aliases.occupancy.toLowerCase()+" type?\nThis change affects the additional fields associated with this record, and may also affect the available fees.",contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{n=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{i.value=e}}})})}const u=document.querySelector("#lotOccupancy--lotName");if(u.addEventListener("click",c=>{const a=c.currentTarget.value;let o,n,l,r;const i=(e,t)=>{document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,s(),o()},u=e=>{e.preventDefault();const t=e.currentTarget;i(t.dataset.lotId,t.dataset.lotName)},d=()=>{r.innerHTML='


Searching...

',cityssm.postJSON(t+"/lots/doSearchLots",l,e=>{if(0===e.count)return void(r.innerHTML='

No results.

');const t=document.createElement("div");t.className="panel";for(const c of e.lots){const e=document.createElement("a");e.className="panel-block is-block",e.href="#",e.dataset.lotId=c.lotId.toString(),e.dataset.lotName=c.lotName,e.innerHTML='
'+cityssm.escapeHTML(c.lotName)+'
'+cityssm.escapeHTML(c.mapName)+'
'+cityssm.escapeHTML(c.lotStatus)+'
'+(c.lotOccupancyCount>0?"Currently Occupied":"")+"
",e.addEventListener("click",u),t.append(e)}r.innerHTML="",r.append(t)})},p=e=>{e.preventDefault();const c=n.querySelector("#lotCreate--lotName").value;cityssm.postJSON(t+"/lots/doCreateLot",e.currentTarget,e=>{e.success?i(e.lotId,c):bulmaJS.alert({title:"Error Creating "+exports.aliases.lot,message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow:t=>{e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=e,o=t,bulmaJS.init(e);const c=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(c.value=a),c.focus(),c.addEventListener("change",d);const s=e.querySelector("#lotSelect--occupancyStatus");if(s.addEventListener("change",d),""!==a&&(s.value=""),l=e.querySelector("#form--lotSelect"),r=e.querySelector("#resultsContainer--lotSelect"),l.addEventListener("submit",e=>{e.preventDefault()}),d(),exports.lotNamePattern){const t=exports.lotNamePattern;e.querySelector("#lotCreate--lotName").pattern=t.source}const i=e.querySelector("#lotCreate--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,i.append(t)}const u=e.querySelector("#lotCreate--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,u.append(t)}const m=e.querySelector("#lotCreate--mapId");for(const e of exports.maps){const t=document.createElement("option");t.value=e.mapId.toString(),t.textContent=e.mapName||"(No Name)",m.append(t)}e.querySelector("#form--lotCreate").addEventListener("submit",p)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),document.querySelector(".is-lot-view-button").addEventListener("click",()=>{const e=document.querySelector("#lotOccupancy--lotId").value;e?window.open(t+"/lots/"+e):bulmaJS.alert({message:"No "+exports.aliases.lot.toLowerCase()+" selected.",contextualColorName:"info"})}),document.querySelector(".is-clear-lot-button").addEventListener("click",()=>{u.disabled?bulmaJS.alert({message:"You need to unlock the field before clearing it.",contextualColorName:"info"}):(u.value="(No "+exports.aliases.lot+")",document.querySelector("#lotOccupancy--lotId").value="",s())}),e.initializeDatePickers(l),document.querySelector("#lotOccupancy--occupancyStartDateString").addEventListener("change",()=>{const e=document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker;e.min=document.querySelector("#lotOccupancy--occupancyStartDateString").value,e.refresh()}),e.initializeUnlockFieldButtons(l),!a){let a=exports.lotOccupancyOccupants;delete exports.lotOccupancyOccupants;const o=o=>{const n=Number.parseInt(o.currentTarget.closest("tr").dataset.lotOccupantIndex,10),l=a.find(e=>e.lotOccupantIndex===n);let r,i;const u=e=>{e.preventDefault(),cityssm.postJSON(t+"/lotOccupancies/doUpdateLotOccupancyOccupant",r,e=>{e.success?(a=e.lotOccupancyOccupants,i(),s()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupant,message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=c,t.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=n.toString();const a=t.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");let o=!1;for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,e.lotOccupantTypeId===l.lotOccupantTypeId&&(t.selected=!0,o=!0),a.append(t)}if(!o){const e=document.createElement("option");e.value=l.lotOccupantTypeId.toString(),e.textContent=l.lotOccupantType,e.selected=!0,a.append(e)}t.querySelector("#lotOccupancyOccupantEdit--occupantName").value=l.occupantName,t.querySelector("#lotOccupancyOccupantEdit--occupantAddress1").value=l.occupantAddress1,t.querySelector("#lotOccupancyOccupantEdit--occupantAddress2").value=l.occupantAddress2,t.querySelector("#lotOccupancyOccupantEdit--occupantCity").value=l.occupantCity,t.querySelector("#lotOccupancyOccupantEdit--occupantProvince").value=l.occupantProvince,t.querySelector("#lotOccupancyOccupantEdit--occupantPostalCode").value=l.occupantPostalCode,t.querySelector("#lotOccupancyOccupantEdit--occupantPhoneNumber").value=l.occupantPhoneNumber,t.querySelector("#lotOccupancyOccupantEdit--occupantEmailAddress").value=l.occupantEmailAddress},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId").focus(),(r=e.querySelector("form")).addEventListener("submit",u),i=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},n=e=>{const o=e.currentTarget.closest("tr").dataset.lotOccupantIndex;bulmaJS.confirm({title:"Remove "+exports.aliases.occupant+"?",message:"Are you sure you want to remove this "+exports.aliases.occupant.toLowerCase()+"?",okButton:{text:"Yes, Remove "+exports.aliases.occupant,callbackFunction:()=>{cityssm.postJSON(t+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:c,lotOccupantIndex:o},e=>{e.success?(a=e.lotOccupancyOccupants,s()):bulmaJS.alert({title:"Error Removing "+exports.aliases.occupant,message:e.errorMessage,contextualColorName:"danger"})})}},contextualColorName:"warning"})},s=()=>{const e=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(e),0===a.length)return void(e.innerHTML='

There are no '+exports.aliases.occupants.toLowerCase()+" associated with this record.

");const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML=""+exports.aliases.occupant+" Type"+exports.aliases.occupant+'AddressOther ContactOptions';for(const e of a){const c=document.createElement("tr");c.dataset.lotOccupantIndex=e.lotOccupantIndex.toString(),c.innerHTML=""+cityssm.escapeHTML(e.lotOccupantType)+""+cityssm.escapeHTML(e.occupantName)+""+(e.occupantAddress1?cityssm.escapeHTML(e.occupantAddress1)+"
":"")+(e.occupantAddress2?cityssm.escapeHTML(e.occupantAddress2)+"
":"")+(e.occupantCity?cityssm.escapeHTML(e.occupantCity)+", ":"")+cityssm.escapeHTML(e.occupantProvince)+"
"+cityssm.escapeHTML(e.occupantPostalCode)+""+(e.occupantPhoneNumber?cityssm.escapeHTML(e.occupantPhoneNumber)+"
":"")+(e.occupantEmailAddress?cityssm.escapeHTML(e.occupantEmailAddress):"")+'
',c.querySelector(".button--edit").addEventListener("click",o),c.querySelector(".button--delete").addEventListener("click",n),t.querySelector("tbody").append(c)}e.append(t)};document.querySelector("#button--addOccupant").addEventListener("click",()=>{let o,n,l,r;const i=e=>{cityssm.postJSON(t+"/lotOccupancies/doAddLotOccupancyOccupant",e,e=>{e.success?(a=e.lotOccupancyOccupants,o(),s()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupant,message:e.errorMessage,contextualColorName:"danger"})})},u=e=>{e.preventDefault(),i(n)};let d=[];const p=e=>{e.preventDefault();const t=e.currentTarget,a=d[Number.parseInt(t.dataset.index,10)],o=t.closest(".modal").querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId").value;""===o?bulmaJS.alert({title:"No "+exports.aliases.occupant+" Type Selected",message:"Select a type to apply to the newly added "+exports.aliases.occupant.toLowerCase()+".",contextualColorName:"warning"}):(a.lotOccupantTypeId=Number.parseInt(o,10),a.lotOccupancyId=Number.parseInt(c,10),i(a))},m=e=>{e.preventDefault(),""!==l.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(r.innerHTML='

Searching...
',cityssm.postJSON(t+"/lotOccupancies/doSearchPastOccupants",l,e=>{d=e.occupants;const t=document.createElement("div");t.className="panel";for(const[e,c]of d.entries()){const a=document.createElement("a");a.className="panel-block is-block",a.dataset.index=e.toString(),a.innerHTML=""+cityssm.escapeHTML(c.occupantName)+'
'+cityssm.escapeHTML(c.occupantAddress1)+"
"+(c.occupantAddress2?cityssm.escapeHTML(c.occupantAddress2)+"
":"")+cityssm.escapeHTML(c.occupantCity)+", "+cityssm.escapeHTML(c.occupantProvince)+"
"+cityssm.escapeHTML(c.occupantPostalCode)+'
'+(c.occupantPhoneNumber?cityssm.escapeHTML(c.occupantPhoneNumber)+"
":"")+cityssm.escapeHTML(c.occupantEmailAddress)+"
",a.addEventListener("click",p),t.append(a)}r.innerHTML="",r.append(t)})):r.innerHTML='

Enter a partial name or address in the search field above.

'};cityssm.openHtmlModal("lotOccupancy-addOccupant",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotOccupancyOccupantAdd--lotOccupancyId").value=c;const a=t.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId"),o=t.querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId");for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,a.append(t),o.append(t.cloneNode(!0))}t.querySelector("#lotOccupancyOccupantAdd--occupantCity").value=exports.occupantCityDefault,t.querySelector("#lotOccupancyOccupantAdd--occupantProvince").value=exports.occupantProvinceDefault},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),bulmaJS.init(e),e.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId").focus(),(n=e.querySelector("#form--lotOccupancyOccupantAdd")).addEventListener("submit",u),r=e.querySelector("#lotOccupancyOccupantCopy--searchResults"),(l=e.querySelector("#form--lotOccupancyOccupantCopy")).addEventListener("submit",e=>{e.preventDefault()}),e.querySelector("#lotOccupancyOccupantCopy--searchFilter").addEventListener("change",m),o=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),s()}if(!a){let a=exports.lotOccupancyComments;delete exports.lotOccupancyComments;const o=o=>{const n=Number.parseInt(o.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10),l=a.find(e=>e.lotOccupancyCommentId===n);let r,i;const u=e=>{e.preventDefault(),cityssm.postJSON(t+"/lotOccupancies/doUpdateLotOccupancyComment",r,e=>{e.success?(a=e.lotOccupancyComments,i(),s()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-editComment",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotOccupancyCommentEdit--lotOccupancyId").value=c,t.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentId").value=n.toString(),t.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").value=l.lotOccupancyComment;const a=t.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentDateString");a.value=l.lotOccupancyCommentDateString;const o=cityssm.dateToString(new Date);a.max=l.lotOccupancyCommentDateString<=o?o:l.lotOccupancyCommentDateString,t.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentTimeString").value=l.lotOccupancyCommentTimeString},onshown:(t,c)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").focus(),(r=t.querySelector("form")).addEventListener("submit",u),i=c},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},n=e=>{const o=Number.parseInt(e.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(t+"/lotOccupancies/doDeleteLotOccupancyComment",{lotOccupancyId:c,lotOccupancyCommentId:o},e=>{e.success?(a=e.lotOccupancyComments,s()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage,contextualColorName:"danger"})})}},contextualColorName:"warning"})},s=()=>{const e=document.querySelector("#container--lotOccupancyComments");if(0===a.length)return void(e.innerHTML='

There are no comments associated with this record.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of a){const c=document.createElement("tr");c.dataset.lotOccupancyCommentId=e.lotOccupancyCommentId.toString(),c.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName)+""+e.lotOccupancyCommentDateString+(0===e.lotOccupancyCommentTime?"":" "+e.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(e.lotOccupancyComment)+'
',c.querySelector(".button--edit").addEventListener("click",o),c.querySelector(".button--delete").addEventListener("click",n),t.querySelector("tbody").append(c)}e.innerHTML="",e.append(t)};document.querySelector("#button--addComment").addEventListener("click",()=>{let o,n;const l=e=>{e.preventDefault(),cityssm.postJSON(t+"/lotOccupancies/doAddLotOccupancyComment",o,e=>{e.success?(a=e.lotOccupancyComments,n(),s()):bulmaJS.alert({title:"Error Adding Comment",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addComment",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=c},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(o=e.querySelector("form")).addEventListener("submit",l),n=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),s()}if(!a){let a=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const n=document.querySelector("#container--lotOccupancyFees"),s=()=>{let e=0;for(const t of a)e+=(t.feeAmount+t.taxAmount)*t.quantity;return e},l=e=>{const o=e.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId;bulmaJS.confirm({title:"Delete Fee",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete Fee",callbackFunction:()=>{cityssm.postJSON(t+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:c,feeId:o},e=>{e.success?(a=e.lotOccupancyFees,r()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage,contextualColorName:"danger"})})}}})},r=()=>{if(0===a.length)return n.innerHTML='

There are no fees associated with this record.

',void m();n.innerHTML='
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
';let e=0,t=0;for(const c of a){const a=document.createElement("tr");a.className="container--lotOccupancyFee",a.dataset.feeId=c.feeId.toString(),a.dataset.includeQuantity=c.includeQuantity?"1":"0",a.innerHTML=''+cityssm.escapeHTML(c.feeName)+""+(1===c.quantity?"":'$'+c.feeAmount.toFixed(2)+'×'+c.quantity+"=")+'$'+(c.feeAmount*c.quantity).toFixed(2)+'',a.querySelector("button").addEventListener("click",l),n.querySelector("tbody").append(a),e+=c.feeAmount*c.quantity,t+=c.taxAmount*c.quantity}n.querySelector("#lotOccupancyFees--feeAmountTotal").textContent="$"+e.toFixed(2),n.querySelector("#lotOccupancyFees--taxAmountTotal").textContent="$"+t.toFixed(2),n.querySelector("#lotOccupancyFees--grandTotal").textContent="$"+(e+t).toFixed(2),m()};document.querySelector("#button--addFee").addEventListener("click",()=>{if(o)return void bulmaJS.alert({message:"Please save all unsaved changes before adding fees.",contextualColorName:"warning"});let e,s,l;const i=(e,o=1)=>{cityssm.postJSON(t+"/lotOccupancies/doAddLotOccupancyFee",{lotOccupancyId:c,feeId:e,quantity:o},e=>{e.success?(a=e.lotOccupancyFees,r(),d()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage,contextualColorName:"danger"})})},u=t=>{t.preventDefault();const c=Number.parseInt(t.currentTarget.dataset.feeId,10),a=Number.parseInt(t.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10),o=e.find(e=>e.feeCategoryId===a).fees.find(e=>e.feeId===c);o.includeQuantity?(e=>{let t,c;const a=a=>{a.preventDefault(),i(e.feeId,t.value),c()};cityssm.openHtmlModal("lotOccupancy-setFeeQuantity",{onshow:t=>{t.querySelector("#lotOccupancyFeeQuantity--quantityUnit").textContent=e.quantityUnit},onshown:(e,o)=>{c=o,t=e.querySelector("#lotOccupancyFeeQuantity--quantity"),e.querySelector("form").addEventListener("submit",a)}})})(o):i(c)},d=()=>{const t=s.value.trim().toLowerCase().split(" ");l.innerHTML="";for(const c of e){const e=document.createElement("div");e.className="container--feeCategory",e.dataset.feeCategoryId=c.feeCategoryId.toString(),e.innerHTML='

'+cityssm.escapeHTML(c.feeCategory)+'

';let a=!1;for(const o of c.fees){if(n.querySelector(".container--lotOccupancyFee[data-fee-id='"+o.feeId+"'][data-include-quantity='0']"))continue;let c=!0;for(const e of t)if(!o.feeName.toLowerCase().includes(e)){c=!1;break}if(!c)continue;a=!0;const s=document.createElement("a");s.className="panel-block is-block container--fee",s.dataset.feeId=o.feeId.toString(),s.href="#",s.innerHTML=""+cityssm.escapeHTML(o.feeName)+"
"+cityssm.escapeHTML(o.feeDescription).replace(/\n/g,"
")+"
",s.addEventListener("click",u),e.querySelector(".panel").append(s)}a&&l.append(e)}};cityssm.openHtmlModal("lotOccupancy-addFee",{onshow:a=>{s=a.querySelector("#feeSelect--feeName"),l=a.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(t+"/lotOccupancies/doGetFees",{lotOccupancyId:c},t=>{e=t.feeCategories,s.disabled=!1,s.addEventListener("keyup",d),s.focus(),d()})},onshown:()=>{bulmaJS.toggleHtmlClipped()},onhidden:()=>{r()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});let i=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const u=document.querySelector("#container--lotOccupancyTransactions"),d=()=>{let e=0;for(const t of i)e+=t.transactionAmount;return e},p=e=>{const a=e.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;bulmaJS.confirm({title:"Delete Trasnaction",message:"Are you sure you want to delete this transaction?",contextualColorName:"warning",okButton:{text:"Yes, Delete Transaction",callbackFunction:()=>{cityssm.postJSON(t+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:c,transactionIndex:a},e=>{e.success?(i=e.lotOccupancyTransactions,m()):bulmaJS.alert({title:"Error Deleting Transaction",message:e.errorMessage,contextualColorName:"danger"})})}}})},m=()=>{if(0===i.length)return void(u.innerHTML='

There are no transactions associated with this record.

');u.innerHTML='
Date'+cityssm.escapeHTML(exports.aliases.externalReceiptNumber)+'AmountOptions
Transaction Total
';let e=0;for(const t of i){e+=t.transactionAmount;const c=document.createElement("tr");c.className="container--lotOccupancyTransaction",c.dataset.transactionIndex=t.transactionIndex.toString(),c.innerHTML=""+t.transactionDateString+""+cityssm.escapeHTML(t.externalReceiptNumber)+"
"+cityssm.escapeHTML(t.transactionNote)+'$'+t.transactionAmount.toFixed(2)+'',c.querySelector("button").addEventListener("click",p),u.querySelector("tbody").append(c)}u.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+e.toFixed(2);const t=s();t>e&&u.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(t-e).toFixed(2)+"
")};document.querySelector("#button--addTransaction").addEventListener("click",()=>{let a;const o=e=>{e.preventDefault(),cityssm.postJSON(t+"/lotOccupancies/doAddLotOccupancyTransaction",e.currentTarget,e=>{e.success?(i=e.lotOccupancyTransactions,a(),m()):bulmaJS.confirm({title:"Error Adding Transaction",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=c.toString();const a=s(),o=d(),n=t.querySelector("#lotOccupancyTransactionAdd--transactionAmount");n.min=(-1*o).toFixed(2),n.max=Math.max(a-o,0).toFixed(2),n.value=Math.max(a-o,0).toFixed(2)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),a=t,e.querySelector("form").addEventListener("submit",o)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),r()}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#lotOccupancy--lotOccupancyId").value,c=""===t;let a=!1,o=c;const n=()=>{a||(a=!0,cityssm.enableNavBlocker())},s=document.querySelector("#form--lotOccupancy");s.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lotOccupancies/"+(c?"doCreateLotOccupancy":"doUpdateLotOccupancy"),s,t=>{t.success?(a=!1,cityssm.disableNavBlocker(),c||o?window.location.href=e.urlPrefix+"/lotOccupancies/"+t.lotOccupancyId+"/edit?t="+Date.now():bulmaJS.alert({message:exports.aliases.occupancy+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+exports.aliases.occupancy,message:t.errorMessage||"",contextualColorName:"danger"})})});const l=s.querySelectorAll("input, select");for(const e of l)e.addEventListener("change",n);c||document.querySelector("#button--deleteLotOccupancy").addEventListener("click",c=>{c.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.occupancy+" Record",message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:t},t=>{t.success?(cityssm.disableNavBlocker(),window.location.href=e.urlPrefix+"/lotOccupancies?t="+Date.now()):bulmaJS.alert({title:"Error Deleting Record",message:t.errorMessage||"",contextualColorName:"danger"})})}}})});const r=document.querySelector("#lotOccupancy--occupancyTypeId");if(c){const t=document.querySelector("#container--lotOccupancyFields");r.addEventListener("change",()=>{""!==r.value?cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:r.value},e=>{if(0===e.occupancyTypeFields.length)return void(t.innerHTML='

There are no additional fields for this '+exports.aliases.occupancy.toLowerCase()+" type.

");t.innerHTML="";let c="";for(const a of e.occupancyTypeFields){c+=","+a.occupancyTypeFieldId;const e="lotOccupancyFieldValue_"+a.occupancyTypeFieldId,o="lotOccupancy--"+e,n=document.createElement("div");if(n.className="field",n.innerHTML='
',n.querySelector("label").textContent=a.occupancyTypeField,""===a.occupancyTypeFieldValues){const t=document.createElement("input");t.className="input",t.id=o,t.name=e,t.type="text",t.required=a.isRequired,t.minLength=a.minimumLength,t.maxLength=a.maximumLength,a.pattern&&""!==a.pattern&&(t.pattern=a.pattern),n.querySelector(".control").append(t)}else{n.querySelector(".control").innerHTML='
';const t=n.querySelector("select");t.required=a.isRequired;const c=a.occupancyTypeFieldValues.split("\n");for(const e of c){const c=document.createElement("option");c.value=e,c.textContent=e,t.append(c)}}t.append(n)}t.insertAdjacentHTML("beforeend",'')}):t.innerHTML='

Select the '+exports.aliases.occupancy.toLowerCase()+" type to load the available fields.

"})}else{const e=r.value;r.addEventListener("change",()=>{r.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:"Are you sure you want to change the "+exports.aliases.occupancy.toLowerCase()+" type?\nThis change affects the additional fields associated with this record, and may also affect the available fees.",contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{o=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{r.value=e}}})})}const i=document.querySelector("#lotOccupancy--lotName");if(i.addEventListener("click",t=>{const c=t.currentTarget.value;let a,o,s,l;const r=(e,t)=>{document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,n(),a()},i=e=>{e.preventDefault();const t=e.currentTarget;r(t.dataset.lotId,t.dataset.lotName)},u=()=>{l.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",s,e=>{if(0===e.count)return void(l.innerHTML='

No results.

');const t=document.createElement("div");t.className="panel";for(const c of e.lots){const e=document.createElement("a");e.className="panel-block is-block",e.href="#",e.dataset.lotId=c.lotId.toString(),e.dataset.lotName=c.lotName,e.innerHTML='
'+cityssm.escapeHTML(c.lotName||"")+'
'+cityssm.escapeHTML(c.mapName||"")+'
'+cityssm.escapeHTML(c.lotStatus)+'
'+(c.lotOccupancyCount>0?"Currently Occupied":"")+"
",e.addEventListener("click",i),t.append(e)}l.innerHTML="",l.append(t)})},d=t=>{t.preventDefault();const c=o.querySelector("#lotCreate--lotName").value;cityssm.postJSON(e.urlPrefix+"/lots/doCreateLot",t.currentTarget,e=>{e.success?r(e.lotId,c):bulmaJS.alert({title:"Error Creating "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow:t=>{e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),o=e,a=t,bulmaJS.init(e);const n=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(n.value=c),n.focus(),n.addEventListener("change",u);const r=e.querySelector("#lotSelect--occupancyStatus");if(r.addEventListener("change",u),""!==c&&(r.value=""),s=e.querySelector("#form--lotSelect"),l=e.querySelector("#resultsContainer--lotSelect"),s.addEventListener("submit",e=>{e.preventDefault()}),u(),exports.lotNamePattern){const t=exports.lotNamePattern;e.querySelector("#lotCreate--lotName").pattern=t.source}const i=e.querySelector("#lotCreate--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,i.append(t)}const p=e.querySelector("#lotCreate--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,p.append(t)}const m=e.querySelector("#lotCreate--mapId");for(const e of exports.maps){const t=document.createElement("option");t.value=e.mapId.toString(),t.textContent=e.mapName||"(No Name)",m.append(t)}e.querySelector("#form--lotCreate").addEventListener("submit",d)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),document.querySelector(".is-lot-view-button").addEventListener("click",()=>{const t=document.querySelector("#lotOccupancy--lotId").value;t?window.open(e.urlPrefix+"/lots/"+t):bulmaJS.alert({message:"No "+exports.aliases.lot.toLowerCase()+" selected.",contextualColorName:"info"})}),document.querySelector(".is-clear-lot-button").addEventListener("click",()=>{i.disabled?bulmaJS.alert({message:"You need to unlock the field before clearing it.",contextualColorName:"info"}):(i.value="(No "+exports.aliases.lot+")",document.querySelector("#lotOccupancy--lotId").value="",n())}),e.initializeDatePickers(s),document.querySelector("#lotOccupancy--occupancyStartDateString").addEventListener("change",()=>{const e=document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker;e.min=document.querySelector("#lotOccupancy--occupancyStartDateString").value,e.refresh()}),e.initializeUnlockFieldButtons(s),!c){let c=exports.lotOccupancyOccupants;delete exports.lotOccupancyOccupants;const a=a=>{const o=Number.parseInt(a.currentTarget.closest("tr").dataset.lotOccupantIndex,10),s=c.find(e=>e.lotOccupantIndex===o);let l,r;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyOccupant",l,e=>{e.success?(c=e.lotOccupancyOccupants,r(),n()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow:c=>{e.populateAliases(c),c.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=t,c.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=o.toString();const a=c.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");let n=!1;for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,e.lotOccupantTypeId===s.lotOccupantTypeId&&(t.selected=!0,n=!0),a.append(t)}if(!n){const e=document.createElement("option");e.value=s.lotOccupantTypeId.toString(),e.textContent=s.lotOccupantType,e.selected=!0,a.append(e)}c.querySelector("#lotOccupancyOccupantEdit--occupantName").value=s.occupantName,c.querySelector("#lotOccupancyOccupantEdit--occupantAddress1").value=s.occupantAddress1,c.querySelector("#lotOccupancyOccupantEdit--occupantAddress2").value=s.occupantAddress2,c.querySelector("#lotOccupancyOccupantEdit--occupantCity").value=s.occupantCity,c.querySelector("#lotOccupancyOccupantEdit--occupantProvince").value=s.occupantProvince,c.querySelector("#lotOccupancyOccupantEdit--occupantPostalCode").value=s.occupantPostalCode,c.querySelector("#lotOccupancyOccupantEdit--occupantPhoneNumber").value=s.occupantPhoneNumber,c.querySelector("#lotOccupancyOccupantEdit--occupantEmailAddress").value=s.occupantEmailAddress},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId").focus(),(l=e.querySelector("form")).addEventListener("submit",i),r=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},o=a=>{const o=a.currentTarget.closest("tr").dataset.lotOccupantIndex;bulmaJS.confirm({title:"Remove "+exports.aliases.occupant+"?",message:"Are you sure you want to remove this "+exports.aliases.occupant.toLowerCase()+"?",okButton:{text:"Yes, Remove "+exports.aliases.occupant,callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:t,lotOccupantIndex:o},e=>{e.success?(c=e.lotOccupancyOccupants,n()):bulmaJS.alert({title:"Error Removing "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},n=()=>{const e=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(e),0===c.length)return void(e.innerHTML='

There are no '+exports.aliases.occupants.toLowerCase()+" associated with this record.

");const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML=""+exports.aliases.occupant+" Type"+exports.aliases.occupant+'AddressOther ContactOptions';for(const e of c){const c=document.createElement("tr");c.dataset.lotOccupantIndex=e.lotOccupantIndex.toString(),c.innerHTML=""+cityssm.escapeHTML(e.lotOccupantType)+""+cityssm.escapeHTML(e.occupantName||"")+""+(e.occupantAddress1?cityssm.escapeHTML(e.occupantAddress1)+"
":"")+(e.occupantAddress2?cityssm.escapeHTML(e.occupantAddress2)+"
":"")+(e.occupantCity?cityssm.escapeHTML(e.occupantCity)+", ":"")+cityssm.escapeHTML(e.occupantProvince||"")+"
"+cityssm.escapeHTML(e.occupantPostalCode||"")+""+(e.occupantPhoneNumber?cityssm.escapeHTML(e.occupantPhoneNumber)+"
":"")+(e.occupantEmailAddress?cityssm.escapeHTML(e.occupantEmailAddress):"")+'
',c.querySelector(".button--edit").addEventListener("click",a),c.querySelector(".button--delete").addEventListener("click",o),t.querySelector("tbody").append(c)}e.append(t)};document.querySelector("#button--addOccupant").addEventListener("click",()=>{let a,o,s,l;const r=t=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doAddLotOccupancyOccupant",t,e=>{e.success?(c=e.lotOccupancyOccupants,a(),n()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})},i=e=>{e.preventDefault(),r(o)};let u=[];const d=e=>{e.preventDefault();const c=e.currentTarget,a=u[Number.parseInt(c.dataset.index,10)],o=c.closest(".modal").querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId").value;""===o?bulmaJS.alert({title:"No "+exports.aliases.occupant+" Type Selected",message:"Select a type to apply to the newly added "+exports.aliases.occupant.toLowerCase()+".",contextualColorName:"warning"}):(a.lotOccupantTypeId=Number.parseInt(o,10),a.lotOccupancyId=Number.parseInt(t,10),r(a))},p=t=>{t.preventDefault(),""!==s.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(l.innerHTML='

Searching...
',cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doSearchPastOccupants",s,e=>{u=e.occupants;const t=document.createElement("div");t.className="panel";for(const[e,c]of u.entries()){const a=document.createElement("a");a.className="panel-block is-block",a.dataset.index=e.toString(),a.innerHTML=""+cityssm.escapeHTML(c.occupantName||"")+'
'+cityssm.escapeHTML(c.occupantAddress1||"")+"
"+(c.occupantAddress2?cityssm.escapeHTML(c.occupantAddress2)+"
":"")+cityssm.escapeHTML(c.occupantCity||"")+", "+cityssm.escapeHTML(c.occupantProvince||"")+"
"+cityssm.escapeHTML(c.occupantPostalCode||"")+'
'+(c.occupantPhoneNumber?cityssm.escapeHTML(c.occupantPhoneNumber)+"
":"")+cityssm.escapeHTML(c.occupantEmailAddress||"")+"
",a.addEventListener("click",d),t.append(a)}l.innerHTML="",l.append(t)})):l.innerHTML='

Enter a partial name or address in the search field above.

'};cityssm.openHtmlModal("lotOccupancy-addOccupant",{onshow:c=>{e.populateAliases(c),c.querySelector("#lotOccupancyOccupantAdd--lotOccupancyId").value=t;const a=c.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId"),o=c.querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId");for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,a.append(t),o.append(t.cloneNode(!0))}c.querySelector("#lotOccupancyOccupantAdd--occupantCity").value=exports.occupantCityDefault,c.querySelector("#lotOccupancyOccupantAdd--occupantProvince").value=exports.occupantProvinceDefault},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),bulmaJS.init(e),e.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId").focus(),(o=e.querySelector("#form--lotOccupancyOccupantAdd")).addEventListener("submit",i),l=e.querySelector("#lotOccupancyOccupantCopy--searchResults"),(s=e.querySelector("#form--lotOccupancyOccupantCopy")).addEventListener("submit",e=>{e.preventDefault()}),e.querySelector("#lotOccupancyOccupantCopy--searchFilter").addEventListener("change",p),a=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),n()}if(!c){let c=exports.lotOccupancyComments;delete exports.lotOccupancyComments;const a=a=>{const o=Number.parseInt(a.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10),s=c.find(e=>e.lotOccupancyCommentId===o);let l,r;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyComment",l,e=>{e.success?(c=e.lotOccupancyComments,r(),n()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-editComment",{onshow:c=>{e.populateAliases(c),c.querySelector("#lotOccupancyCommentEdit--lotOccupancyId").value=t,c.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentId").value=o.toString(),c.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").value=s.lotOccupancyComment;const a=c.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentDateString");a.value=s.lotOccupancyCommentDateString;const n=cityssm.dateToString(new Date);a.max=s.lotOccupancyCommentDateString<=n?n:s.lotOccupancyCommentDateString,c.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentTimeString").value=s.lotOccupancyCommentTimeString},onshown:(t,c)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").focus(),(l=t.querySelector("form")).addEventListener("submit",i),r=c},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},o=a=>{const o=Number.parseInt(a.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyComment",{lotOccupancyId:t,lotOccupancyCommentId:o},e=>{e.success?(c=e.lotOccupancyComments,n()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},n=()=>{const e=document.querySelector("#container--lotOccupancyComments");if(0===c.length)return void(e.innerHTML='

There are no comments associated with this record.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of c){const c=document.createElement("tr");c.dataset.lotOccupancyCommentId=e.lotOccupancyCommentId.toString(),c.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.lotOccupancyCommentDateString+(0===e.lotOccupancyCommentTime?"":" "+e.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(e.lotOccupancyComment||"")+'
',c.querySelector(".button--edit").addEventListener("click",a),c.querySelector(".button--delete").addEventListener("click",o),t.querySelector("tbody").append(c)}e.innerHTML="",e.append(t)};document.querySelector("#button--addComment").addEventListener("click",()=>{let a,o;const s=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",a,e=>{e.success?(c=e.lotOccupancyComments,o(),n()):bulmaJS.alert({title:"Error Adding Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addComment",{onshow:c=>{e.populateAliases(c),c.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=t},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(a=e.querySelector("form")).addEventListener("submit",s),o=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),n()}if(!c){let c=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const o=document.querySelector("#container--lotOccupancyFees"),n=()=>{let e=0;for(const t of c)e+=(t.feeAmount+t.taxAmount)*t.quantity;return e},s=a=>{const o=a.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId;bulmaJS.confirm({title:"Delete Fee",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete Fee",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:t,feeId:o},e=>{e.success?(c=e.lotOccupancyFees,l()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},l=()=>{if(0===c.length)return o.innerHTML='

There are no fees associated with this record.

',void p();o.innerHTML='
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
';let e=0,t=0;for(const a of c){const c=document.createElement("tr");c.className="container--lotOccupancyFee",c.dataset.feeId=a.feeId.toString(),c.dataset.includeQuantity=a.includeQuantity?"1":"0",c.innerHTML=''+cityssm.escapeHTML(a.feeName||"")+""+(1===a.quantity?"":'$'+a.feeAmount.toFixed(2)+'×'+a.quantity+"=")+'$'+(a.feeAmount*a.quantity).toFixed(2)+'',c.querySelector("button").addEventListener("click",s),o.querySelector("tbody").append(c),e+=a.feeAmount*a.quantity,t+=a.taxAmount*a.quantity}o.querySelector("#lotOccupancyFees--feeAmountTotal").textContent="$"+e.toFixed(2),o.querySelector("#lotOccupancyFees--taxAmountTotal").textContent="$"+t.toFixed(2),o.querySelector("#lotOccupancyFees--grandTotal").textContent="$"+(e+t).toFixed(2),p()};document.querySelector("#button--addFee").addEventListener("click",()=>{if(a)return void bulmaJS.alert({message:"Please save all unsaved changes before adding fees.",contextualColorName:"warning"});let n,s,r;const i=(a,o=1)=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doAddLotOccupancyFee",{lotOccupancyId:t,feeId:a,quantity:o},e=>{e.success?(c=e.lotOccupancyFees,l(),d()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage||"",contextualColorName:"danger"})})},u=e=>{e.preventDefault();const t=Number.parseInt(e.currentTarget.dataset.feeId,10),c=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10),a=n.find(e=>e.feeCategoryId===c).fees.find(e=>e.feeId===t);a.includeQuantity?(e=>{let t,c;const a=a=>{a.preventDefault(),i(e.feeId,t.value),c()};cityssm.openHtmlModal("lotOccupancy-setFeeQuantity",{onshow:t=>{t.querySelector("#lotOccupancyFeeQuantity--quantityUnit").textContent=e.quantityUnit},onshown:(e,o)=>{c=o,t=e.querySelector("#lotOccupancyFeeQuantity--quantity"),e.querySelector("form").addEventListener("submit",a)}})})(a):i(t)},d=()=>{const e=s.value.trim().toLowerCase().split(" ");r.innerHTML="";for(const t of n){const c=document.createElement("div");c.className="container--feeCategory",c.dataset.feeCategoryId=t.feeCategoryId.toString(),c.innerHTML='

'+cityssm.escapeHTML(t.feeCategory||"")+'

';let a=!1;for(const n of t.fees){if(o.querySelector(".container--lotOccupancyFee[data-fee-id='"+n.feeId+"'][data-include-quantity='0']"))continue;let t=!0;for(const c of e)if(!n.feeName.toLowerCase().includes(c)){t=!1;break}if(!t)continue;a=!0;const s=document.createElement("a");s.className="panel-block is-block container--fee",s.dataset.feeId=n.feeId.toString(),s.href="#",s.innerHTML=""+cityssm.escapeHTML(n.feeName||"")+"
"+cityssm.escapeHTML(n.feeDescription||"").replace(/\n/g,"
")+"
",s.addEventListener("click",u),c.querySelector(".panel").append(s)}a&&r.append(c)}};cityssm.openHtmlModal("lotOccupancy-addFee",{onshow:c=>{s=c.querySelector("#feeSelect--feeName"),r=c.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:t},e=>{n=e.feeCategories,s.disabled=!1,s.addEventListener("keyup",d),s.focus(),d()})},onshown:()=>{bulmaJS.toggleHtmlClipped()},onhidden:()=>{l()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});let r=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const i=document.querySelector("#container--lotOccupancyTransactions"),u=()=>{let e=0;for(const t of r)e+=t.transactionAmount;return e},d=c=>{const a=c.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;bulmaJS.confirm({title:"Delete Trasnaction",message:"Are you sure you want to delete this transaction?",contextualColorName:"warning",okButton:{text:"Yes, Delete Transaction",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:t,transactionIndex:a},e=>{e.success?(r=e.lotOccupancyTransactions,p()):bulmaJS.alert({title:"Error Deleting Transaction",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},p=()=>{if(0===r.length)return void(i.innerHTML='

There are no transactions associated with this record.

');i.innerHTML='
Date'+cityssm.escapeHTML(exports.aliases.externalReceiptNumber)+'AmountOptions
Transaction Total
';let e=0;for(const t of r){e+=t.transactionAmount;const c=document.createElement("tr");c.className="container--lotOccupancyTransaction",c.dataset.transactionIndex=t.transactionIndex.toString(),c.innerHTML=""+t.transactionDateString+""+cityssm.escapeHTML(t.externalReceiptNumber||"")+"
"+cityssm.escapeHTML(t.transactionNote||"")+'$'+t.transactionAmount.toFixed(2)+'',c.querySelector("button").addEventListener("click",d),i.querySelector("tbody").append(c)}i.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+e.toFixed(2);const t=n();t>e&&i.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(t-e).toFixed(2)+"
")};document.querySelector("#button--addTransaction").addEventListener("click",()=>{let c;const a=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,e=>{e.success?(r=e.lotOccupancyTransactions,c(),p()):bulmaJS.confirm({title:"Error Adding Transaction",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow:c=>{e.populateAliases(c),c.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=t.toString();const a=n(),o=u(),s=c.querySelector("#lotOccupancyTransactionAdd--transactionAmount");s.min=(-1*o).toFixed(2),s.max=Math.max(a-o,0).toFixed(2),s.value=Math.max(a-o,0).toFixed(2)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),c=t,e.querySelector("form").addEventListener("submit",a)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),l()}})(); \ No newline at end of file diff --git a/public/javascripts/lotOccupancySearch.min.js b/public/javascripts/lotOccupancySearch.min.js index 61609b25..405719c4 100644 --- a/public/javascripts/lotOccupancySearch.min.js +++ b/public/javascripts/lotOccupancySearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=document.querySelector("main").dataset.urlPrefix,a=exports.lotOccupancyPrints,e=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),c=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),n=()=>{const n=Number.parseInt(i.value,10);s.innerHTML='

Loading '+exports.aliases.occupancies+"...
",cityssm.postJSON(t+"/lotOccupancies/doSearchLotOccupancies",e,e=>{if(0===e.lotOccupancies.length)return void(s.innerHTML='

There are no '+cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase())+" records that meet the search criteria.

");const i=document.createElement("tbody"),o=cityssm.dateToString(new Date);for(const s of e.lotOccupancies){let e="";e=s.occupancyStartDateString<=o&&(""===s.occupancyEndDateString||s.occupancyEndDateString>=o)?'':s.occupancyStartDateString>o?'':'';let c="";for(const t of s.lotOccupancyOccupants)c+=''+cityssm.escapeHTML(t.occupantName)+"
";i.insertAdjacentHTML("beforeend",''+e+''+cityssm.escapeHTML(s.occupancyType)+""+(s.lotName?''+cityssm.escapeHTML(s.lotName)+"":'(No '+cityssm.escapeHTML(exports.aliases.lot)+")")+'
'+cityssm.escapeHTML(s.mapName||"")+""+s.occupancyStartDateString+""+(s.occupancyEndDate?s.occupancyEndDateString:'(No End Date)')+""+c+""+(a.length>0?'':"")+"")}s.innerHTML='"+(a.length>0?'':"")+'
'+cityssm.escapeHTML(exports.aliases.occupancy)+" Type"+cityssm.escapeHTML(exports.aliases.lot)+""+cityssm.escapeHTML(exports.aliases.occupancyStartDate)+"End Date"+cityssm.escapeHTML(exports.aliases.occupants)+"Print
Displaying '+(n+1).toString()+" to "+Math.min(e.count,c+n)+" of "+e.count+'
'+(n>0?'
':"")+(c+n
':"")+"
",s.querySelector("table").append(i),n>0&&s.querySelector("button[data-page='previous']").addEventListener("click",l),c+n{i.value="0",n()},l=()=>{i.value=Math.max(Number.parseInt(i.value,10)-c,0).toString(),n()},r=()=>{i.value=(Number.parseInt(i.value,10)+c).toString(),n()},p=e.querySelectorAll("input, select");for(const t of p)t.addEventListener("change",o);e.addEventListener("submit",t=>{t.preventDefault(),o()}),n()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,a=exports.lotOccupancyPrints,e=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),c=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),l=()=>{const l=Number.parseInt(i.value,10);s.innerHTML='

Loading '+exports.aliases.occupancies+"...
",cityssm.postJSON(t.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",e,e=>{if(0===e.lotOccupancies.length)return void(s.innerHTML='

There are no '+cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase())+" records that meet the search criteria.

");const i=document.createElement("tbody"),o=cityssm.dateToString(new Date);for(const s of e.lotOccupancies){let e="";e=s.occupancyStartDateString<=o&&(""===s.occupancyEndDateString||s.occupancyEndDateString>=o)?'':s.occupancyStartDateString>o?'':'';let c="";for(const t of s.lotOccupancyOccupants)c+=''+cityssm.escapeHTML(t.occupantName||"")+"
";i.insertAdjacentHTML("beforeend",'
"+(a.length>0?'':"")+"")}s.innerHTML='
'+e+''+cityssm.escapeHTML(s.occupancyType)+""+(s.lotName?''+cityssm.escapeHTML(s.lotName)+"":'(No '+cityssm.escapeHTML(exports.aliases.lot)+")")+'
'+cityssm.escapeHTML(s.mapName||"")+"
"+s.occupancyStartDateString+""+(s.occupancyEndDate?s.occupancyEndDateString:'(No End Date)')+""+c+"
"+(a.length>0?'':"")+'
'+cityssm.escapeHTML(exports.aliases.occupancy)+" Type"+cityssm.escapeHTML(exports.aliases.lot)+""+cityssm.escapeHTML(exports.aliases.occupancyStartDate)+"End Date"+cityssm.escapeHTML(exports.aliases.occupants)+"Print
Displaying '+(l+1).toString()+" to "+Math.min(e.count,c+l)+" of "+e.count+'
'+(l>0?'
':"")+(c+l
':"")+"
",s.querySelector("table").append(i),l>0&&s.querySelector("button[data-page='previous']").addEventListener("click",r),c+l{i.value="0",l()},r=()=>{i.value=Math.max(Number.parseInt(i.value,10)-c,0).toString(),l()},n=()=>{i.value=(Number.parseInt(i.value,10)+c).toString(),l()},p=e.querySelectorAll("input, select");for(const t of p)t.addEventListener("change",o);e.addEventListener("submit",t=>{t.preventDefault(),o()}),l()})(); \ No newline at end of file diff --git a/public/javascripts/lotSearch.min.js b/public/javascripts/lotSearch.min.js index 4a16f333..62f63c91 100644 --- a/public/javascripts/lotSearch.min.js +++ b/public/javascripts/lotSearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),r=()=>{const r=Number.parseInt(i.value,10);s.innerHTML='

Loading '+exports.aliases.lots+"...
",cityssm.postJSON(e+"/lots/doSearchLots",t,t=>{if(0===t.lots.length)return void(s.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" that meet the search criteria.

");const i=document.createElement("tbody");for(const s of t.lots)i.insertAdjacentHTML("beforeend",'
");s.innerHTML='
'+cityssm.escapeHTML(s.lotName)+''+(s.mapName?cityssm.escapeHTML(s.mapName):'(No Name)')+""+cityssm.escapeHTML(s.lotType)+""+(s.lotStatusId?cityssm.escapeHTML(s.lotStatus):'(No Status)')+"
"+(s.lotOccupancyCount>0?'Currently Occupied':"")+"
'+cityssm.escapeHTML(exports.aliases.lot)+""+cityssm.escapeHTML(exports.aliases.map)+""+cityssm.escapeHTML(exports.aliases.lot)+' TypeStatus
Displaying '+(r+1).toString()+" to "+Math.min(t.count,a+r)+" of "+t.count+'
'+(r>0?'
':"")+(a+r
':"")+"
",s.querySelector("table").append(i),r>0&&s.querySelector("button[data-page='previous']").addEventListener("click",o),a+r{i.value="0",r()},o=()=>{i.value=Math.max(Number.parseInt(i.value,10)-a,0).toString(),r()},n=()=>{i.value=(Number.parseInt(i.value,10)+a).toString(),r()},c=t.querySelectorAll("input, select");for(const e of c)e.addEventListener("change",l);t.addEventListener("submit",e=>{e.preventDefault(),l()}),r()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),r=()=>{const r=Number.parseInt(i.value,10);s.innerHTML='

Loading '+exports.aliases.lots+"...
",cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",t,t=>{if(0===t.lots.length)return void(s.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" that meet the search criteria.

");const i=document.createElement("tbody");for(const s of t.lots)i.insertAdjacentHTML("beforeend",'
");s.innerHTML='
'+cityssm.escapeHTML(s.lotName||"")+''+(s.mapName?cityssm.escapeHTML(s.mapName):'(No Name)')+""+cityssm.escapeHTML(s.lotType||"")+""+(s.lotStatusId?cityssm.escapeHTML(s.lotStatus||""):'(No Status)')+"
"+(s.lotOccupancyCount>0?'Currently Occupied':"")+"
'+cityssm.escapeHTML(exports.aliases.lot)+""+cityssm.escapeHTML(exports.aliases.map)+""+cityssm.escapeHTML(exports.aliases.lot)+' TypeStatus
Displaying '+(r+1).toString()+" to "+Math.min(t.count,a+r)+" of "+t.count+'
'+(r>0?'
':"")+(a+r
':"")+"
",s.querySelector("table").append(i),r>0&&s.querySelector("button[data-page='previous']").addEventListener("click",o),a+r{i.value="0",r()},o=()=>{i.value=Math.max(Number.parseInt(i.value,10)-a,0).toString(),r()},n=()=>{i.value=(Number.parseInt(i.value,10)+a).toString(),r()},c=t.querySelectorAll("input, select");for(const e of c)e.addEventListener("change",l);t.addEventListener("submit",e=>{e.preventDefault(),l()}),r()})(); \ No newline at end of file diff --git a/public/javascripts/main.min.js b/public/javascripts/main.min.js index cbaaa30c..585c40c4 100644 --- a/public/javascripts/main.min.js +++ b/public/javascripts/main.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=e=>{const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()},t={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"},o={type:"time",timeFormat:"hh:mm",color:"info",displayMode:"dialog",validateLabel:"Set Time",minuteSteps:1},a=["red","green","orange","blue","pink","yellow","purple"],s=["bright","light","dark"],l={highlightMap:(e,t,o)=>{let a,s=t;for(;!(a=e.querySelector("#"+s))&&s.includes("-");)s=s.slice(0,Math.max(0,s.lastIndexOf("-")));if(a){a.style.fill=null,a.classList.add("highlight","is-"+o);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=null}},initializeUnlockFieldButtons:t=>{const o=t.querySelectorAll(".is-unlock-field-button");for(const t of o)t.addEventListener("click",e)},initializeDatePickers:e=>{const o=e.querySelectorAll("input[type='date']");for(const a of o){const o=Object.assign({},t);a.required&&(o.showClearButton=!1),a.min&&(o.minDate=cityssm.dateStringToDate(a.min)),a.max&&(o.maxDate=cityssm.dateStringToDate(a.max));const s=exports.bulmaCalendar.attach(a,o)[0];s.on("save",()=>{a.value=s.value(),a.dispatchEvent(new Event("change"))}),s.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),s.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const l=e.querySelector("#"+s._id),r=l.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+t.color),e.classList.remove("is-text");const n=l.querySelector(".datetimepicker-clear-button");n&&(a.required?n.remove():(n.dataset.tooltip="Clear",n.ariaLabel="Clear",n.innerHTML=''));const i=document.querySelector("label[for='"+a.id+"']");i&&(l.querySelector(".datetimepicker-dummy-input").ariaLabel=i.textContent)}},initializeTimePickers:e=>{const t=e.querySelectorAll("input[type='time']");for(const a of t){const t=Object.assign({},o);a.required&&(t.showClearButton=!1);const s=exports.bulmaCalendar.attach(a,t)[0];s.on("save",()=>{a.value=s.value(),a.dispatchEvent(new Event("change"))}),s.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),s.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const l=e.querySelector("#"+s._id),r=l.querySelector(".datetimepicker-footer-cancel");r&&r.remove();const n=l.querySelector(".datetimepicker-clear-button");n&&(a.required?n.remove():(n.dataset.tooltip="Clear",n.innerHTML=''))}},populateAliases:e=>{const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Map":e.textContent=exports.aliases.map;break;case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},getRandomColor:e=>{let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:a[t.codePointAt(t.length-1)%a.length],luminosity:s[t.codePointAt(t.length-2)%s.length]})}};exports.los=l})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=e=>{const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()},t={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"},o={type:"time",timeFormat:"hh:mm",color:"info",displayMode:"dialog",validateLabel:"Set Time",minuteSteps:1},a=["red","green","orange","blue","pink","yellow","purple"],s=["bright","light","dark"],l={urlPrefix:document.querySelector("main").dataset.urlPrefix,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:(e,t,o)=>{let a,s=t;for(;!(a=e.querySelector("#"+s))&&s.includes("-");)s=s.slice(0,Math.max(0,s.lastIndexOf("-")));if(a){a.style.fill="",a.classList.add("highlight","is-"+o);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:t=>{const o=t.querySelectorAll(".is-unlock-field-button");for(const t of o)t.addEventListener("click",e)},initializeDatePickers:e=>{const o=e.querySelectorAll("input[type='date']");for(const a of o){const o=Object.assign({},t);a.required&&(o.showClearButton=!1),a.min&&(o.minDate=cityssm.dateStringToDate(a.min)),a.max&&(o.maxDate=cityssm.dateStringToDate(a.max));const s=exports.bulmaCalendar.attach(a,o)[0];s.on("save",()=>{a.value=s.value(),a.dispatchEvent(new Event("change"))}),s.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),s.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const l=e.querySelector("#"+s._id),r=l.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+t.color),e.classList.remove("is-text");const i=l.querySelector(".datetimepicker-clear-button");i&&(a.required?i.remove():(i.dataset.tooltip="Clear",i.ariaLabel="Clear",i.innerHTML=''));const n=document.querySelector("label[for='"+a.id+"']");n&&(l.querySelector(".datetimepicker-dummy-input").ariaLabel=n.textContent)}},initializeTimePickers:e=>{const t=e.querySelectorAll("input[type='time']");for(const a of t){const t=Object.assign({},o);a.required&&(t.showClearButton=!1);const s=exports.bulmaCalendar.attach(a,t)[0];s.on("save",()=>{a.value=s.value(),a.dispatchEvent(new Event("change"))}),s.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),s.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const l=e.querySelector("#"+s._id),r=l.querySelector(".datetimepicker-footer-cancel");r&&r.remove();const i=l.querySelector(".datetimepicker-clear-button");i&&(a.required?i.remove():(i.dataset.tooltip="Clear",i.innerHTML=''))}},populateAliases:e=>{const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Map":e.textContent=exports.aliases.map;break;case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},getRandomColor:e=>{let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:a[t.codePointAt(t.length-1)%a.length],luminosity:s[t.codePointAt(t.length-2)%s.length]})}};exports.los=l})(); \ No newline at end of file diff --git a/public/javascripts/mapEdit.min.js b/public/javascripts/mapEdit.min.js index f8bcf886..e30ffd84 100644 --- a/public/javascripts/mapEdit.min.js +++ b/public/javascripts/mapEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#map--mapId").value,a=""===t,s=document.querySelector("#form--map");s.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e+"/maps/"+(a?"doCreateMap":"doUpdateMap"),s,t=>{t.success?(cityssm.disableNavBlocker(),a?window.location.href=e+"/maps/"+t.mapId+"/edit":bulmaJS.alert({message:exports.aliases.map+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.map,message:t.errorMessage,contextualColorName:"danger"})})});const o=s.querySelectorAll("input, select");for(const e of o)e.addEventListener("change",cityssm.enableNavBlocker);a||document.querySelector("#button--deleteMap").addEventListener("click",a=>{a.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.map,message:"Are you sure you want to delete this "+exports.aliases.map.toLowerCase()+" and all related "+exports.aliases.lots.toLowerCase()+"?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.map+"?",callbackFunction:()=>{cityssm.postJSON(e+"/maps/doDeleteMap",{mapId:t},t=>{t.success?window.location.href=e+"/maps?t="+Date.now():bulmaJS.alert({title:"Error Deleting "+exports.aliases.map,message:t.errorMessage,contextualColorName:"danger"})})}}})})})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#map--mapId").value,a=""===t,s=document.querySelector("#form--map");s.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/maps/"+(a?"doCreateMap":"doUpdateMap"),s,t=>{t.success?(cityssm.disableNavBlocker(),a?window.location.href=e.urlPrefix+"/maps/"+t.mapId+"/edit":bulmaJS.alert({message:exports.aliases.map+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.map,message:t.errorMessage||"",contextualColorName:"danger"})})});const o=s.querySelectorAll("input, select");for(const e of o)e.addEventListener("change",cityssm.enableNavBlocker);a||document.querySelector("#button--deleteMap").addEventListener("click",a=>{a.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.map,message:"Are you sure you want to delete this "+exports.aliases.map.toLowerCase()+" and all related "+exports.aliases.lots.toLowerCase()+"?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.map+"?",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/maps/doDeleteMap",{mapId:t},t=>{t.success?window.location.href=e.urlPrefix+"/maps?t="+Date.now():bulmaJS.alert({title:"Error Deleting "+exports.aliases.map,message:t.errorMessage||"",contextualColorName:"danger"})})}}})})})(); \ No newline at end of file diff --git a/public/javascripts/mapSearch.min.js b/public/javascripts/mapSearch.min.js index 5f158a5c..729c386e 100644 --- a/public/javascripts/mapSearch.min.js +++ b/public/javascripts/mapSearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,a=exports.maps,s=document.querySelector("#searchFilter--map"),t=document.querySelector("#container--searchResults"),r=()=>{t.innerHTML='

Loading '+exports.aliases.maps+"...
";let r=0;const i=document.createElement("tbody"),d=s.value.trim().toLowerCase().split(" ");for(const s of a){const a=(s.mapName+" "+s.mapDescription+" "+s.mapAddress1+" "+s.mapAddress2).toLowerCase();let t=!0;for(const e of d)if(!a.includes(e)){t=!1;break}t&&(r+=1,i.insertAdjacentHTML("beforeend",'
"))}if(t.innerHTML="",0===r)t.innerHTML='

There are no '+exports.aliases.maps.toLowerCase()+" that meet the search criteria.

";else{const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable has-sticky-header",e.innerHTML="",e.append(i),t.append(e)}};s.addEventListener("keyup",r),document.querySelector("#form--searchFilters").addEventListener("submit",e=>{e.preventDefault(),r()}),r()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=exports.maps,a=document.querySelector("#searchFilter--map"),t=document.querySelector("#container--searchResults"),r=()=>{t.innerHTML='

Loading '+exports.aliases.maps+"...
";let r=0;const i=document.createElement("tbody"),d=a.value.trim().toLowerCase().split(" ");for(const a of s){const s=(a.mapName+" "+a.mapDescription+" "+a.mapAddress1+" "+a.mapAddress2).toLowerCase();let t=!0;for(const e of d)if(!s.includes(e)){t=!1;break}t&&(r+=1,i.insertAdjacentHTML("beforeend",'"))}if(t.innerHTML="",0===r)t.innerHTML='

There are no '+exports.aliases.maps.toLowerCase()+" that meet the search criteria.

";else{const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable has-sticky-header",e.innerHTML="",e.append(i),t.append(e)}};a.addEventListener("keyup",r),document.querySelector("#form--searchFilters").addEventListener("submit",e=>{e.preventDefault(),r()}),r()})(); \ No newline at end of file diff --git a/public/javascripts/workOrderEdit.min.js b/public/javascripts/workOrderEdit.min.js index 7e2a5a6a..d6d7e0a9 100644 --- a/public/javascripts/workOrderEdit.min.js +++ b/public/javascripts/workOrderEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,o=document.querySelector("#workOrderEdit--workOrderId").value,r=""===o,s=document.querySelector("#form--workOrderEdit");e.initializeDatePickers(s.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),e.initializeUnlockFieldButtons(s),s.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(t+"/workOrders/"+(r?"doCreateWorkOrder":"doUpdateWorkOrder"),e.currentTarget,e=>{e.success?(cityssm.disableNavBlocker(),r?window.location.href=t+"/workOrders/"+e.workOrderId+"/edit":bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:e.errorMessage,contextualColorName:"danger"})})});const a=s.querySelectorAll("input, select");for(const e of a)e.addEventListener("change",cityssm.enableNavBlocker);let n;if(!r){const e=()=>{cityssm.postJSON(t+"/workOrders/doCloseWorkOrder",{workOrderId:o},e=>{e.success?window.location.href=t+"/workOrders/"+encodeURIComponent(o):bulmaJS.alert({title:"Error Closing Work Order",message:e.errorMessage,contextualColorName:"danger"})})};document.querySelector("#button--closeWorkOrder").addEventListener("click",()=>{n.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.confirm({title:"Close Work Order with Outstanding Milestones",message:"Are you sure you want to close this work order with outstanding milestones?",contextualColorName:"danger",okButton:{text:"Yes, Close Work Order",callbackFunction:e}}):bulmaJS.confirm({title:"Close Work Order",message:"Are you sure you want to close this work order?",contextualColorName:"info",okButton:{text:"Yes, Close Work Order",callbackFunction:e}})});const r=()=>{cityssm.postJSON(t+"/workOrders/doDeleteWorkOrder",{workOrderId:o},e=>{e.success?window.location.href=t+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:e.errorMessage,contextualColorName:"danger"})})};document.querySelector("#button--deleteWorkOrder").addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete Work Order",message:"Are you sure you want to delete this work order?",contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order",callbackFunction:r}})})}if(!r){let r=exports.workOrderLots;delete exports.workOrderLots;let s=exports.workOrderLotOccupancies;delete exports.workOrderLotOccupancies;const a=e=>{const r=e.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(t+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:o,lotOccupancyId:r},e=>{e.success?(s=e.workOrderLotOccupancies,p()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage,contextualColorName:"danger"})})}}})},n=(e,s)=>{cityssm.postJSON(t+"/workOrders/doAddWorkOrderLot",{workOrderId:o,lotId:e},e=>{e.success?(r=e.workOrderLots,p()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot,message:e.errorMessage,contextualColorName:"danger"}),s&&s(e.success)})},l=(e,r)=>{cityssm.postJSON(t+"/workOrders/doAddWorkOrderLotOccupancy",{workOrderId:o,lotOccupancyId:e},e=>{e.success?(s=e.workOrderLotOccupancies,p()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy,message:e.errorMessage,contextualColorName:"danger"}),r&&r(e.success)})},c=e=>{const t=e.currentTarget.dataset.lotId;n(t)},i=()=>{const e=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=s.length.toString(),0===s.length)return void(e.innerHTML='

There are no '+exports.aliases.occupancies.toLowerCase()+" associated with this work order.

");e.innerHTML='
'+cityssm.escapeHTML(s.mapName||"(No Name)")+'
'+cityssm.escapeHTML(s.mapDescription)+"
"+(s.mapAddress1?cityssm.escapeHTML(s.mapAddress1)+"
":"")+(s.mapAddress2?cityssm.escapeHTML(s.mapAddress2)+"
":"")+(s.mapCity||s.mapProvince?cityssm.escapeHTML(s.mapCity)+", "+cityssm.escapeHTML(s.mapProvince)+"
":"")+(s.mapPostalCode?cityssm.escapeHTML(s.mapPostalCode):"")+"
"+cityssm.escapeHTML(s.mapPhoneNumber)+''+(s.mapLatitude&&s.mapLongitude?'':"")+''+(s.mapSVG?'':"")+''+s.lotCount+"
"+exports.aliases.map+'AddressPhone NumberCoordinatesImage'+exports.aliases.lot+" Count
'+cityssm.escapeHTML(a.mapName||"(No Name)")+'
'+cityssm.escapeHTML(a.mapDescription||"")+"
"+(a.mapAddress1?cityssm.escapeHTML(a.mapAddress1)+"
":"")+(a.mapAddress2?cityssm.escapeHTML(a.mapAddress2)+"
":"")+(a.mapCity||a.mapProvince?cityssm.escapeHTML(a.mapCity||"")+", "+cityssm.escapeHTML(a.mapProvince||"")+"
":"")+(a.mapPostalCode?cityssm.escapeHTML(a.mapPostalCode):"")+"
"+cityssm.escapeHTML(a.mapPhoneNumber||"")+''+(a.mapLatitude&&a.mapLongitude?'':"")+''+(a.mapSVG?'':"")+''+a.lotCount+"
"+exports.aliases.map+'AddressPhone NumberCoordinatesImage'+exports.aliases.lot+" Count
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+""+exports.aliases.occupancyStartDate+"End Date"+exports.aliases.occupants+'
';const o=cityssm.dateToString(new Date);for(const n of s){const s=document.createElement("tr");s.className="container--lotOccupancy",s.dataset.lotOccupancyId=n.lotOccupancyId.toString();const l=!(n.occupancyEndDate&&n.occupancyEndDateStringn.lotId===e.lotId);s.innerHTML=''+(l?'':'')+''+cityssm.escapeHTML(n.occupancyType)+"",n.lotId?s.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(n.lotName)+(i?"":' ')+""):s.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),s.insertAdjacentHTML("beforeend",""+n.occupancyStartDateString+""+(n.occupancyEndDate?n.occupancyEndDateString:'(No End Date)')+""+(0===n.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":''+cityssm.escapeHTML(n.lotOccupancyOccupants[0].occupantName)+"")+(n.lotOccupancyOccupants.length>1?" plus "+(n.lotOccupancyOccupants.length-1):"")+''),n.lotId&&!i&&s.querySelector(".button--addLot").addEventListener("click",c),s.querySelector(".button--deleteLotOccupancy").addEventListener("click",a),e.querySelector("tbody").append(s)}},d=s=>{const a=Number.parseInt(s.currentTarget.closest(".container--lot").dataset.lotId,10),n=r.find(e=>e.lotId===a);let l;const c=e=>{e.preventDefault(),cityssm.postJSON(t+"/workOrders/doUpdateLotStatus",e.currentTarget,e=>{e.success?(r=e.workOrderLots,p(),l()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editLotStatus",{onshow:t=>{e.populateAliases(t),t.querySelector("#lotStatusEdit--lotId").value=a.toString(),t.querySelector("#lotStatusEdit--lotName").value=n.lotName;const r=t.querySelector("#lotStatusEdit--lotStatusId");let s=!1;for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,e.lotStatusId===n.lotStatusId&&(s=!0),r.append(t)}if(!s&&n.lotStatusId){const e=document.createElement("option");e.value=n.lotStatusId.toString(),e.textContent=n.lotStatus,r.append(e)}n.lotStatusId&&(r.value=n.lotStatusId.toString()),t.querySelector("form").insertAdjacentHTML("beforeend",'')},onshown:(e,t)=>{l=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",c)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},u=e=>{const s=e.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(t+"/workOrders/doDeleteWorkOrderLot",{workOrderId:o,lotId:s},e=>{e.success?(r=e.workOrderLots,p()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage,contextualColorName:"danger"})})}}})},m=()=>{const e=document.querySelector("#container--lots");if(document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent=r.length.toString(),0!==r.length){e.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+' TypeStatus
';for(const o of r){const r=document.createElement("tr");r.className="container--lot",r.dataset.lotId=o.lotId.toString(),r.innerHTML=''+cityssm.escapeHTML(o.lotName)+""+cityssm.escapeHTML(o.mapName)+""+cityssm.escapeHTML(o.lotType)+""+(o.lotStatusId?cityssm.escapeHTML(o.lotStatus):'(No Status)')+' ',r.querySelector(".button--editLotStatus").addEventListener("click",d),r.querySelector(".button--deleteLot").addEventListener("click",u),e.querySelector("tbody").append(r)}}else e.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" associated with this work order.

"},p=()=>{i(),m()};p();const y=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotOccupancyId;l(o,e=>{e&&t.remove()})};document.querySelector("#button--addLotOccupancy").addEventListener("click",()=>{let r,s;const a=e=>{e&&e.preventDefault(),s.innerHTML='


Searching...

',cityssm.postJSON(t+"/lotOccupancies/doSearchLotOccupancies",r,e=>{if(0!==e.lotOccupancies.length){s.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+"Start DateEnd Date"+exports.aliases.occupants+"
";for(const t of e.lotOccupancies){const e=document.createElement("tr");e.className="container--lotOccupancy",e.dataset.lotOccupancyId=t.lotOccupancyId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.occupancyType)+"",t.lotId?e.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(t.lotName)+""):e.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),e.insertAdjacentHTML("beforeend",""+t.occupancyStartDateString+""+(t.occupancyEndDate?t.occupancyEndDateString:'(No End Date)')+""+(0===t.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":cityssm.escapeHTML(t.lotOccupancyOccupants[0].occupantName)+(t.lotOccupancyOccupants.length>1?" plus "+(t.lotOccupancyOccupants.length-1):""))+""),e.querySelector(".button--addLotOccupancy").addEventListener("click",y),s.querySelector("tbody").append(e)}}else s.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLotOccupancy",{onshow:t=>{e.populateAliases(t),r=t.querySelector("form"),s=t.querySelector("#resultsContainer--lotOccupancyAdd"),t.querySelector("#lotOccupancySearch--notWorkOrderId").value=o,t.querySelector("#lotOccupancySearch--occupancyEffectiveDateString").value=document.querySelector("#workOrderEdit--workOrderOpenDateString").value,a()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancySearch--occupantName").addEventListener("change",a),e.querySelector("#lotOccupancySearch--lotName").addEventListener("change",a),r.addEventListener("submit",a)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const O=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotId;n(o,e=>{e&&t.remove()})};document.querySelector("#button--addLot").addEventListener("click",()=>{let r,s;const a=e=>{e&&e.preventDefault(),s.innerHTML='


Searching...

',cityssm.postJSON(t+"/lots/doSearchLots",r,e=>{if(0!==e.lots.length){s.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+" TypeStatus
";for(const t of e.lots){const e=document.createElement("tr");e.className="container--lot",e.dataset.lotId=t.lotId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.lotName)+""+cityssm.escapeHTML(t.mapName)+""+cityssm.escapeHTML(t.lotType)+""+cityssm.escapeHTML(t.lotStatus)+"",e.querySelector(".button--addLot").addEventListener("click",O),s.querySelector("tbody").append(e)}}else s.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLot",{onshow:t=>{e.populateAliases(t),r=t.querySelector("form"),s=t.querySelector("#resultsContainer--lotAdd"),t.querySelector("#lotSearch--notWorkOrderId").value=o;const n=t.querySelector("#lotSearch--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,n.append(t)}a()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotSearch--lotName").addEventListener("change",a),e.querySelector("#lotSearch--lotStatusId").addEventListener("change",a),r.addEventListener("submit",a)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}let l=exports.workOrderComments;delete exports.workOrderComments;const c=r=>{const s=Number.parseInt(r.currentTarget.closest("tr").dataset.workOrderCommentId,10),a=l.find(e=>e.workOrderCommentId===s);let n,c;const i=e=>{e.preventDefault(),cityssm.postJSON(t+"/workOrders/doUpdateWorkOrderComment",n,e=>{e.success?(l=e.workOrderComments,c(),d()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("workOrder-editComment",{onshow:e=>{e.querySelector("#workOrderCommentEdit--workOrderId").value=o,e.querySelector("#workOrderCommentEdit--workOrderCommentId").value=s.toString(),e.querySelector("#workOrderCommentEdit--workOrderComment").value=a.workOrderComment;const t=e.querySelector("#workOrderCommentEdit--workOrderCommentDateString");t.value=a.workOrderCommentDateString;const r=cityssm.dateToString(new Date);t.max=a.workOrderCommentDateString<=r?r:a.workOrderCommentDateString,e.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value=a.workOrderCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("#workOrderCommentEdit--workOrderComment").focus(),(n=t.querySelector("form")).addEventListener("submit",i),c=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=e=>{const r=Number.parseInt(e.currentTarget.closest("tr").dataset.workOrderCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(t+"/workOrders/doDeleteWorkOrderComment",{workOrderId:o,workOrderCommentId:r},e=>{e.success?(l=e.workOrderComments,d()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage,contextualColorName:"danger"})})}},contextualColorName:"warning"})},d=()=>{const e=document.querySelector("#container--workOrderComments");if(0===l.length)return void(e.innerHTML='

There are no comments to display.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of l){const o=document.createElement("tr");o.dataset.workOrderCommentId=e.workOrderCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName)+""+e.workOrderCommentDateString+(0===e.workOrderCommentTime?"":" "+e.workOrderCommentTimeString)+""+cityssm.escapeHTML(e.workOrderComment)+'
',o.querySelector(".button--edit").addEventListener("click",c),o.querySelector(".button--delete").addEventListener("click",i),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)},u=()=>{let r;const s=e=>{e.preventDefault(),cityssm.postJSON(t+"/workOrders/doAddWorkOrderComment",e.currentTarget,e=>{e.success&&(l=e.workOrderComments,d(),r())})};cityssm.openHtmlModal("workOrder-addComment",{onshow(t){e.populateAliases(t),t.querySelector("#workOrderCommentAdd--workOrderId").value=o,t.querySelector("form").addEventListener("submit",s)},onshown(e,t){bulmaJS.toggleHtmlClipped(),r=t,e.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})};if(r||(document.querySelector("#workOrderComments--add").addEventListener("click",u),d()),!r){n=exports.workOrderMilestones,delete exports.workOrderMilestones;const r=e=>{e.success?(n=e.workOrderMilestones,i()):bulmaJS.alert({title:"Error Reopening Milestone",message:e.errorMessage,contextualColorName:"danger"})},s=e=>{e.preventDefault();const s=cityssm.dateToString(new Date),a=Number.parseInt(e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),l=n.find(e=>e.workOrderMilestoneId===a);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(l.workOrderMilestoneDateString>s?"
Note that this milestone is expected to be completed in the future.":""),messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Complete Milestone",callbackFunction:()=>{cityssm.postJSON(t+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:o,workOrderMilestoneId:a},r)}}})},a=e=>{e.preventDefault();const s=e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Reopen Milestone",message:"Are you sure you want to remove the completion status from this milestone, and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Milestone",callbackFunction:()=>{cityssm.postJSON(t+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:o,workOrderMilestoneId:s},r)}}})},l=e=>{e.preventDefault();const s=e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Delete Milestone",message:"Are you sure you want to delete this milestone?",contextualColorName:"warning",okButton:{text:"Yes, Delete Milestone",callbackFunction:()=>{cityssm.postJSON(t+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:s,workOrderId:o},r)}}})},c=s=>{s.preventDefault();const a=Number.parseInt(s.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),l=n.find(e=>e.workOrderMilestoneId===a);let c;const i=e=>{e.preventDefault(),cityssm.postJSON(t+"/workOrders/doUpdateWorkOrderMilestone",e.currentTarget,e=>{r(e),e.success&&c()})};cityssm.openHtmlModal("workOrder-editMilestone",{onshow:e=>{e.querySelector("#milestoneEdit--workOrderId").value=o,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=l.workOrderMilestoneId.toString();const t=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const o=document.createElement("option");o.value=e.workOrderMilestoneTypeId.toString(),o.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===l.workOrderMilestoneTypeId&&(o.selected=!0,r=!0),t.append(o)}if(!r&&l.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=l.workOrderMilestoneTypeId.toString(),e.textContent=l.workOrderMilestoneType,e.selected=!0,t.append(e)}e.querySelector("#milestoneEdit--workOrderMilestoneDateString").value=l.workOrderMilestoneDateString,l.workOrderMilestoneTime&&(e.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value=l.workOrderMilestoneTimeString),e.querySelector("#milestoneEdit--workOrderMilestoneDescription").value=l.workOrderMilestoneDescription},onshown:(t,o)=>{c=o,bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("form").addEventListener("submit",i)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=()=>{const e=document.querySelector("#panel--milestones"),t=e.querySelectorAll(".panel-block");for(const e of t)e.remove();for(const t of n){const o=document.createElement("div");o.className="panel-block is-block container--milestone",o.dataset.workOrderMilestoneId=t.workOrderMilestoneId.toString(),o.innerHTML='
'+(t.workOrderMilestoneCompletionDate?'':'')+'
'+(t.workOrderMilestoneTypeId?""+cityssm.escapeHTML(t.workOrderMilestoneType)+"
":"")+t.workOrderMilestoneDateString+(t.workOrderMilestoneTime?" "+t.workOrderMilestoneTimeString:"")+'
'+cityssm.escapeHTML(t.workOrderMilestoneDescription)+'
',t.workOrderMilestoneCompletionDate?o.querySelector(".button--reopenMilestone").addEventListener("click",a):(o.querySelector(".button--editMilestone").addEventListener("click",c),o.querySelector(".button--completeMilestone").addEventListener("click",s)),o.querySelector(".button--deleteMilestone").addEventListener("click",l),e.append(o)}bulmaJS.init(e)};i(),document.querySelector("#button--addMilestone").addEventListener("click",()=>{let s,a,n;const l=e=>{e&&e.preventDefault();const o=cityssm.dateToString(new Date),l=()=>{cityssm.postJSON(t+"/workOrders/doAddWorkOrderMilestone",a,e=>{r(e),e.success&&n()})};s.querySelector("#milestoneAdd--workOrderMilestoneDateString").value{e.querySelector("#milestoneAdd--workOrderId").value=o;const t=e.querySelector("#milestoneAdd--workOrderMilestoneTypeId");for(const e of exports.workOrderMilestoneTypes){const o=document.createElement("option");o.value=e.workOrderMilestoneTypeId.toString(),o.textContent=e.workOrderMilestoneType,t.append(o)}e.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate=new Date},onshown:(t,o)=>{s=t,n=o,e.initializeDatePickers(t),e.initializeTimePickers(t),bulmaJS.toggleHtmlClipped(),(a=t.querySelector("form")).addEventListener("submit",l)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#workOrderEdit--workOrderId").value,o=""===t,r=document.querySelector("#form--workOrderEdit");e.initializeDatePickers(r.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),e.initializeUnlockFieldButtons(r),r.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/"+(o?"doCreateWorkOrder":"doUpdateWorkOrder"),t.currentTarget,t=>{t.success?(cityssm.disableNavBlocker(),o?window.location.href=e.urlPrefix+"/workOrders/"+t.workOrderId+"/edit":bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})});const s=r.querySelectorAll("input, select");for(const e of s)e.addEventListener("change",cityssm.enableNavBlocker);let a;if(!o){const o=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:t},o=>{o.success?window.location.href=e.urlPrefix+"/workOrders/"+encodeURIComponent(t):bulmaJS.alert({title:"Error Closing Work Order",message:o.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--closeWorkOrder").addEventListener("click",()=>{a.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.confirm({title:"Close Work Order with Outstanding Milestones",message:"Are you sure you want to close this work order with outstanding milestones?",contextualColorName:"danger",okButton:{text:"Yes, Close Work Order",callbackFunction:o}}):bulmaJS.confirm({title:"Close Work Order",message:"Are you sure you want to close this work order?",contextualColorName:"info",okButton:{text:"Yes, Close Work Order",callbackFunction:o}})});const r=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:t},t=>{t.success?window.location.href=e.urlPrefix+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--deleteWorkOrder").addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete Work Order",message:"Are you sure you want to delete this work order?",contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order",callbackFunction:r}})})}if(!o){let o=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;delete exports.workOrderLotOccupancies;const s=o=>{const s=o.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:s},e=>{e.success?(r=e.workOrderLotOccupancies,m()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},a=(r,s)=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:t,lotId:r},e=>{e.success?(o=e.workOrderLots,m()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})},n=(o,s)=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:o},e=>{e.success?(r=e.workOrderLotOccupancies,m()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})},l=e=>{const t=e.currentTarget.dataset.lotId;a(t)},i=()=>{const t=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(t.innerHTML='

There are no '+exports.aliases.occupancies.toLowerCase()+" associated with this work order.

");t.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+""+exports.aliases.occupancyStartDate+"End Date"+exports.aliases.occupants+'
';const a=cityssm.dateToString(new Date);for(const n of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=n.lotOccupancyId.toString();const i=!(n.occupancyEndDate&&n.occupancyEndDateStringn.lotId===e.lotId);r.innerHTML=''+(i?'':'')+''+cityssm.escapeHTML(n.occupancyType||"")+"",n.lotId?r.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(n.lotName||"")+(c?"":' ')+""):r.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),r.insertAdjacentHTML("beforeend",""+n.occupancyStartDateString+""+(n.occupancyEndDate?n.occupancyEndDateString:'(No End Date)')+""+(0===n.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":''+cityssm.escapeHTML(n.lotOccupancyOccupants[0].occupantName)+"")+(n.lotOccupancyOccupants.length>1?" plus "+(n.lotOccupancyOccupants.length-1):"")+''),n.lotId&&!c&&r.querySelector(".button--addLot").addEventListener("click",l),r.querySelector(".button--deleteLotOccupancy").addEventListener("click",s),t.querySelector("tbody").append(r)}},c=r=>{const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),a=o.find(e=>e.lotId===s);let n;const l=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateLotStatus",t.currentTarget,e=>{e.success?(o=e.workOrderLots,m(),n()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editLotStatus",{onshow:o=>{e.populateAliases(o),o.querySelector("#lotStatusEdit--lotId").value=s.toString(),o.querySelector("#lotStatusEdit--lotName").value=a.lotName;const r=o.querySelector("#lotStatusEdit--lotStatusId");let n=!1;for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,e.lotStatusId===a.lotStatusId&&(n=!0),r.append(t)}if(!n&&a.lotStatusId){const e=document.createElement("option");e.value=a.lotStatusId.toString(),e.textContent=a.lotStatus,r.append(e)}a.lotStatusId&&(r.value=a.lotStatusId.toString()),o.querySelector("form").insertAdjacentHTML("beforeend",'')},onshown:(e,t)=>{n=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=r=>{const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:t,lotId:s},e=>{e.success?(o=e.workOrderLots,m()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},u=()=>{const t=document.querySelector("#container--lots");if(document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent=o.length.toString(),0!==o.length){t.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+' TypeStatus
';for(const r of o){const o=document.createElement("tr");o.className="container--lot",o.dataset.lotId=r.lotId.toString(),o.innerHTML=''+cityssm.escapeHTML(r.lotName||"")+""+cityssm.escapeHTML(r.mapName||"")+""+cityssm.escapeHTML(r.lotType||"")+""+(r.lotStatusId?cityssm.escapeHTML(r.lotStatus||""):'(No Status)')+' ',o.querySelector(".button--editLotStatus").addEventListener("click",c),o.querySelector(".button--deleteLot").addEventListener("click",d),t.querySelector("tbody").append(o)}}else t.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" associated with this work order.

"},m=()=>{i(),u()};m();const p=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotOccupancyId;n(o,e=>{e&&t.remove()})};document.querySelector("#button--addLotOccupancy").addEventListener("click",()=>{let o,r;const s=t=>{t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",o,e=>{if(0!==e.lotOccupancies.length){r.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+"Start DateEnd Date"+exports.aliases.occupants+"
";for(const t of e.lotOccupancies){const e=document.createElement("tr");e.className="container--lotOccupancy",e.dataset.lotOccupancyId=t.lotOccupancyId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.occupancyType||"")+"",t.lotId?e.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(t.lotName||"")+""):e.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),e.insertAdjacentHTML("beforeend",""+t.occupancyStartDateString+""+(t.occupancyEndDate?t.occupancyEndDateString:'(No End Date)')+""+(0===t.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":cityssm.escapeHTML(t.lotOccupancyOccupants[0].occupantName)+(t.lotOccupancyOccupants.length>1?" plus "+(t.lotOccupancyOccupants.length-1):""))+""),e.querySelector(".button--addLotOccupancy").addEventListener("click",p),r.querySelector("tbody").append(e)}}else r.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLotOccupancy",{onshow:a=>{e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotOccupancyAdd"),a.querySelector("#lotOccupancySearch--notWorkOrderId").value=t,a.querySelector("#lotOccupancySearch--occupancyEffectiveDateString").value=document.querySelector("#workOrderEdit--workOrderOpenDateString").value,s()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancySearch--occupantName").addEventListener("change",s),e.querySelector("#lotOccupancySearch--lotName").addEventListener("change",s),o.addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const y=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotId;a(o,e=>{e&&t.remove()})};document.querySelector("#button--addLot").addEventListener("click",()=>{let o,r;const s=t=>{t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",o,e=>{if(0!==e.lots.length){r.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+" TypeStatus
";for(const t of e.lots){const e=document.createElement("tr");e.className="container--lot",e.dataset.lotId=t.lotId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.lotName||"")+""+cityssm.escapeHTML(t.mapName||"")+""+cityssm.escapeHTML(t.lotType||"")+""+cityssm.escapeHTML(t.lotStatus||"")+"",e.querySelector(".button--addLot").addEventListener("click",y),r.querySelector("tbody").append(e)}}else r.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLot",{onshow:a=>{e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotAdd"),a.querySelector("#lotSearch--notWorkOrderId").value=t;const n=a.querySelector("#lotSearch--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,n.append(t)}s()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotSearch--lotName").addEventListener("change",s),e.querySelector("#lotSearch--lotStatusId").addEventListener("change",s),o.addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}let n=exports.workOrderComments;delete exports.workOrderComments;const l=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10),s=n.find(e=>e.workOrderCommentId===r);let a,l;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderComment",a,e=>{e.success?(n=e.workOrderComments,l(),c()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("workOrder-editComment",{onshow:e=>{e.querySelector("#workOrderCommentEdit--workOrderId").value=t,e.querySelector("#workOrderCommentEdit--workOrderCommentId").value=r.toString(),e.querySelector("#workOrderCommentEdit--workOrderComment").value=s.workOrderComment;const o=e.querySelector("#workOrderCommentEdit--workOrderCommentDateString");o.value=s.workOrderCommentDateString;const a=cityssm.dateToString(new Date);o.max=s.workOrderCommentDateString<=a?a:s.workOrderCommentDateString,e.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value=s.workOrderCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("#workOrderCommentEdit--workOrderComment").focus(),(a=t.querySelector("form")).addEventListener("submit",i),l=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderComment",{workOrderId:t,workOrderCommentId:r},e=>{e.success?(n=e.workOrderComments,c()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},c=()=>{const e=document.querySelector("#container--workOrderComments");if(0===n.length)return void(e.innerHTML='

There are no comments to display.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of n){const o=document.createElement("tr");o.dataset.workOrderCommentId=e.workOrderCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.workOrderCommentDateString+(0===e.workOrderCommentTime?"":" "+e.workOrderCommentTimeString)+""+cityssm.escapeHTML(e.workOrderComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",l),o.querySelector(".button--delete").addEventListener("click",i),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)},d=()=>{let o;const r=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderComment",t.currentTarget,e=>{e.success&&(n=e.workOrderComments,c(),o())})};cityssm.openHtmlModal("workOrder-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#workOrderCommentAdd--workOrderId").value=t,o.querySelector("form").addEventListener("submit",r)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})};if(o||(document.querySelector("#workOrderComments--add").addEventListener("click",d),c()),!o){a=exports.workOrderMilestones,delete exports.workOrderMilestones;const o=e=>{e.success?(a=e.workOrderMilestones,i()):bulmaJS.alert({title:"Error Reopening Milestone",message:e.errorMessage||"",contextualColorName:"danger"})},r=r=>{r.preventDefault();const s=cityssm.dateToString(new Date),n=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),l=a.find(e=>e.workOrderMilestoneId===n);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(l.workOrderMilestoneDateString>s?"
Note that this milestone is expected to be completed in the future.":""),messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Complete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:n},o)}}})},s=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Reopen Milestone",message:"Are you sure you want to remove the completion status from this milestone, and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:s},o)}}})},n=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Delete Milestone",message:"Are you sure you want to delete this milestone?",contextualColorName:"warning",okButton:{text:"Yes, Delete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:s,workOrderId:t},o)}}})},l=r=>{r.preventDefault();const s=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=a.find(e=>e.workOrderMilestoneId===s);let l;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",t.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("workOrder-editMilestone",{onshow:e=>{e.querySelector("#milestoneEdit--workOrderId").value=t,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=n.workOrderMilestoneId.toString();const o=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===n.workOrderMilestoneTypeId&&(t.selected=!0,r=!0),o.append(t)}if(!r&&n.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=n.workOrderMilestoneTypeId.toString(),e.textContent=n.workOrderMilestoneType,e.selected=!0,o.append(e)}e.querySelector("#milestoneEdit--workOrderMilestoneDateString").value=n.workOrderMilestoneDateString,n.workOrderMilestoneTime&&(e.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value=n.workOrderMilestoneTimeString),e.querySelector("#milestoneEdit--workOrderMilestoneDescription").value=n.workOrderMilestoneDescription},onshown:(t,o)=>{l=o,bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("form").addEventListener("submit",i)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=()=>{const e=document.querySelector("#panel--milestones"),t=e.querySelectorAll(".panel-block");for(const e of t)e.remove();for(const t of a){const o=document.createElement("div");o.className="panel-block is-block container--milestone",o.dataset.workOrderMilestoneId=t.workOrderMilestoneId.toString(),o.innerHTML='
'+(t.workOrderMilestoneCompletionDate?'':'')+'
'+(t.workOrderMilestoneTypeId?""+cityssm.escapeHTML(t.workOrderMilestoneType||"")+"
":"")+t.workOrderMilestoneDateString+(t.workOrderMilestoneTime?" "+t.workOrderMilestoneTimeString:"")+'
'+cityssm.escapeHTML(t.workOrderMilestoneDescription||"")+'
',t.workOrderMilestoneCompletionDate?o.querySelector(".button--reopenMilestone").addEventListener("click",s):(o.querySelector(".button--editMilestone").addEventListener("click",l),o.querySelector(".button--completeMilestone").addEventListener("click",r)),o.querySelector(".button--deleteMilestone").addEventListener("click",n),e.append(o)}bulmaJS.init(e)};i(),document.querySelector("#button--addMilestone").addEventListener("click",()=>{let r,s,a;const n=t=>{t&&t.preventDefault();const n=cityssm.dateToString(new Date),l=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderMilestone",s,e=>{o(e),e.success&&a()})};r.querySelector("#milestoneAdd--workOrderMilestoneDateString").value{e.querySelector("#milestoneAdd--workOrderId").value=t;const o=e.querySelector("#milestoneAdd--workOrderMilestoneTypeId");for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,o.append(t)}e.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate=new Date},onshown:(t,o)=>{r=t,a=o,e.initializeDatePickers(t),e.initializeTimePickers(t),bulmaJS.toggleHtmlClipped(),(s=t.querySelector("form")).addEventListener("submit",n)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}})(); \ No newline at end of file diff --git a/public/javascripts/workOrderMilestoneCalendar.min.js b/public/javascripts/workOrderMilestoneCalendar.min.js index 69f08c73..1fd94fbc 100644 --- a/public/javascripts/workOrderMilestoneCalendar.min.js +++ b/public/javascripts/workOrderMilestoneCalendar.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=document.querySelector("main").dataset.urlPrefix,r=document.querySelector("#form--searchFilters"),a=r.querySelector("#searchFilter--workOrderMilestoneDateFilter"),t=r.querySelector("#searchFilter--workOrderMilestoneDateString"),i=document.querySelector("#container--milestoneCalendar"),o=a=>{a&&a.preventDefault(),i.innerHTML='

Loading Milestones...
',cityssm.postJSON(s+"/workOrders/doGetWorkOrderMilestones",r,r=>{(r=>{if(0===r.length)return void(i.innerHTML='

There are no milestones that meet the search criteria.

');i.innerHTML="";const a=cityssm.dateToString(new Date);let t,o="";for(const n of r){o!==n.workOrderMilestoneDateString&&(t&&i.append(t),(t=document.createElement("div")).className="panel",t.innerHTML='

'+n.workOrderMilestoneDateString+"

",o=n.workOrderMilestoneDateString);const r=document.createElement("div");r.className="panel-block is-block",!n.workOrderMilestoneCompletionDate&&n.workOrderMilestoneDateString '+cityssm.escapeHTML(e.lotName)+"
";for(const e of n.workOrderLotOccupancies)for(const s of e.lotOccupancyOccupants)c+=' '+cityssm.escapeHTML(s.occupantName)+"
";r.innerHTML='
'+(n.workOrderMilestoneCompletionDate?'':'')+'
'+(0===n.workOrderMilestoneTime?"":n.workOrderMilestoneTimeString+"
")+(n.workOrderMilestoneTypeId?""+cityssm.escapeHTML(n.workOrderMilestoneType)+"
":"")+''+cityssm.escapeHTML(n.workOrderMilestoneDescription)+'
'+cityssm.escapeHTML(n.workOrderNumber)+'
'+cityssm.escapeHTML(n.workOrderDescription)+'
'+c+"
",t.append(r)}i.append(t)})(r.workOrderMilestones)})};a.addEventListener("change",()=>{t.closest("fieldset").disabled="date"!==a.value,o()}),e.initializeDatePickers(r),t.addEventListener("change",o),r.addEventListener("submit",o),o()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=document.querySelector("#form--searchFilters"),r=s.querySelector("#searchFilter--workOrderMilestoneDateFilter"),a=s.querySelector("#searchFilter--workOrderMilestoneDateString"),t=document.querySelector("#container--milestoneCalendar"),i=r=>{r&&r.preventDefault(),t.innerHTML='

Loading Milestones...
',cityssm.postJSON(e.urlPrefix+"/workOrders/doGetWorkOrderMilestones",s,s=>{(s=>{if(0===s.length)return void(t.innerHTML='

There are no milestones that meet the search criteria.

');t.innerHTML="";const r=cityssm.dateToString(new Date);let a,i="";for(const o of s){i!==o.workOrderMilestoneDateString&&(a&&t.append(a),(a=document.createElement("div")).className="panel",a.innerHTML='

'+o.workOrderMilestoneDateString+"

",i=o.workOrderMilestoneDateString);const s=document.createElement("div");s.className="panel-block is-block",!o.workOrderMilestoneCompletionDate&&o.workOrderMilestoneDateString '+cityssm.escapeHTML(e.lotName||"")+"
";for(const e of o.workOrderLotOccupancies)for(const s of e.lotOccupancyOccupants)n+=' '+cityssm.escapeHTML(s.occupantName||"")+"
";s.innerHTML='
'+(o.workOrderMilestoneCompletionDate?'':'')+'
'+(0===o.workOrderMilestoneTime?"":o.workOrderMilestoneTimeString+"
")+(o.workOrderMilestoneTypeId?""+cityssm.escapeHTML(o.workOrderMilestoneType)+"
":"")+''+cityssm.escapeHTML(o.workOrderMilestoneDescription)+'
'+cityssm.escapeHTML(o.workOrderNumber||"")+'
'+cityssm.escapeHTML(o.workOrderDescription||"")+'
'+n+"
",a.append(s)}t.append(a)})(s.workOrderMilestones)})};r.addEventListener("change",()=>{a.closest("fieldset").disabled="date"!==r.value,i()}),e.initializeDatePickers(s),a.addEventListener("change",i),s.addEventListener("submit",i),i()})(); \ No newline at end of file diff --git a/public/javascripts/workOrderOutlook.min.js b/public/javascripts/workOrderOutlook.min.js index c60d7d43..d99ef2af 100644 --- a/public/javascripts/workOrderOutlook.min.js +++ b/public/javascripts/workOrderOutlook.min.js @@ -1 +1 @@ -(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("main").dataset.apiKey,r=document.querySelector("#icsFilters--workOrderTypeIds"),c=document.querySelector("#icsFilters--workOrderMilestoneTypeIds"),l=document.querySelector("#icsFilters--calendarURL"),o=()=>{let o=window.location.href.slice(0,Math.max(0,window.location.href.indexOf(window.location.pathname)+1))+e+"api/"+t+"/milestoneICS/?";if(!r.disabled&&r.selectedOptions.length>0){o+="workOrderTypeIds=";for(const e of r.selectedOptions)o+=e.value+",";o=o.slice(0,-1)+"&"}if(!c.disabled&&c.selectedOptions.length>0){o+="workOrderMilestoneTypeIds=";for(const e of c.selectedOptions)o+=e.value+",";o=o.slice(0,-1)+"&"}l.value=o.slice(0,-1)};document.querySelector("#icsFilters--workOrderTypeIds-all").addEventListener("change",e=>{r.disabled=e.currentTarget.checked}),document.querySelector("#icsFilters--workOrderMilestoneTypeIds-all").addEventListener("change",e=>{c.disabled=e.currentTarget.checked});const s=document.querySelector("#panel--icsFilters").querySelectorAll("input, select");for(const e of s)e.addEventListener("change",o);o(),l.addEventListener("click",()=>{l.focus(),l.select()})})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#icsFilters--workOrderTypeIds"),r=document.querySelector("#icsFilters--workOrderMilestoneTypeIds"),s=document.querySelector("#icsFilters--calendarURL"),l=()=>{let l=window.location.href.slice(0,Math.max(0,window.location.href.indexOf(window.location.pathname)+1))+e.urlPrefix+"api/"+e.apiKey+"/milestoneICS/?";if(!t.disabled&&t.selectedOptions.length>0){l+="workOrderTypeIds=";for(const e of t.selectedOptions)l+=e.value+",";l=l.slice(0,-1)+"&"}if(!r.disabled&&r.selectedOptions.length>0){l+="workOrderMilestoneTypeIds=";for(const e of r.selectedOptions)l+=e.value+",";l=l.slice(0,-1)+"&"}s.value=l.slice(0,-1)};document.querySelector("#icsFilters--workOrderTypeIds-all").addEventListener("change",e=>{t.disabled=e.currentTarget.checked}),document.querySelector("#icsFilters--workOrderMilestoneTypeIds-all").addEventListener("change",e=>{r.disabled=e.currentTarget.checked});const o=document.querySelector("#panel--icsFilters").querySelectorAll("input, select");for(const e of o)e.addEventListener("change",l);l(),s.addEventListener("click",()=>{s.focus(),s.select()})})(); \ No newline at end of file diff --git a/public/javascripts/workOrderSearch.min.js b/public/javascripts/workOrderSearch.min.js index c09c0f86..d9bb6d8c 100644 --- a/public/javascripts/workOrderSearch.min.js +++ b/public/javascripts/workOrderSearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,s=exports.workOrderPrints,a=document.querySelector("#form--searchFilters");e.initializeDatePickers(a);const r=document.querySelector("#container--searchResults"),o=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),l=()=>{const e=Number.parseInt(i.value,10);r.innerHTML='

Loading Work Orders...
',cityssm.postJSON(t+"/workOrders/doSearchWorkOrders",a,a=>{if(0===a.workOrders.length)return void(r.innerHTML='

There are no work orders that meet the search criteria.

');const i=document.createElement("tbody");for(const e of a.workOrders){let a="";for(const t of e.workOrderLots)a+=' '+cityssm.escapeHTML(t.lotName||"(No Lot Name)")+"
";for(const t of e.workOrderLotOccupancies)for(const e of t.lotOccupancyOccupants)a+=' '+cityssm.escapeHTML(e.occupantName||"(No Name)")+"
";i.insertAdjacentHTML("beforeend",''+(e.workOrderNumber.trim()?cityssm.escapeHTML(e.workOrderNumber):"(No Number)")+""+cityssm.escapeHTML(e.workOrderType)+'
'+cityssm.escapeHTML(e.workOrderDescription)+''+a+' '+e.workOrderOpenDateString+'
'+(e.workOrderCloseDate?e.workOrderCloseDateString:'(No Close Date)')+""+(0===e.workOrderMilestoneCount?"-":e.workOrderMilestoneCompletionCount+" / "+e.workOrderMilestoneCount)+""+(s.length>0?'':"")+"")}r.innerHTML=''+(s.length>0?'':"")+'
Work Order NumberDescriptionRelatedDateProgress
Displaying '+(e+1).toString()+" to "+Math.min(a.count,o+e)+" of "+a.count+'
'+(e>0?'
':"")+(o+e
':"")+"
",r.querySelector("table").append(i),e>0&&r.querySelector("button[data-page='previous']").addEventListener("click",c),o+e{i.value="0",l()},c=()=>{i.value=Math.max(Number.parseInt(i.value,10)-o,0).toString(),l()},d=()=>{i.value=(Number.parseInt(i.value,10)+o).toString(),l()},p=a.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",n);a.addEventListener("submit",e=>{e.preventDefault(),n()}),l()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,s=document.querySelector("#form--searchFilters");e.initializeDatePickers(s);const a=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset"),i=()=>{const i=Number.parseInt(o.value,10);a.innerHTML='

Loading Work Orders...
',cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,s=>{if(0===s.workOrders.length)return void(a.innerHTML='

There are no work orders that meet the search criteria.

');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const e of a.workOrderLots)s+=' '+cityssm.escapeHTML(e.lotName||"(No Lot Name)")+"
";for(const e of a.workOrderLotOccupancies)for(const t of e.lotOccupancyOccupants)s+=' '+cityssm.escapeHTML(t.occupantName||"(No Name)")+"
";o.insertAdjacentHTML("beforeend",'
"+(t.length>0?'':"")+"")}a.innerHTML='
'+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+""+cityssm.escapeHTML(a.workOrderType||"")+'
'+cityssm.escapeHTML(a.workOrderDescription||"")+'
'+s+' '+a.workOrderOpenDateString+'
'+(a.workOrderCloseDate?a.workOrderCloseDateString:'(No Close Date)')+"
"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"
'+(t.length>0?'':"")+'
Work Order NumberDescriptionRelatedDateProgress
Displaying '+(i+1).toString()+" to "+Math.min(s.count,r+i)+" of "+s.count+'
'+(i>0?'
':"")+(r+i
':"")+"
",a.querySelector("table").append(o),i>0&&a.querySelector("button[data-page='previous']").addEventListener("click",n),r+i{o.value="0",i()},n=()=>{o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),i()},c=()=>{o.value=(Number.parseInt(o.value,10)+r).toString(),i()},d=s.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",l);s.addEventListener("submit",e=>{e.preventDefault(),l()}),i()})(); \ No newline at end of file diff --git a/public/javascripts/workOrderView.min.js b/public/javascripts/workOrderView.min.js index c7ff6f05..6b019c00 100644 --- a/public/javascripts/workOrderView.min.js +++ b/public/javascripts/workOrderView.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,r=document.querySelector("#button--reopenWorkOrder");r&&r.addEventListener("click",()=>{const o=r.dataset.workOrderId;bulmaJS.confirm({title:"Reopen Work Order",message:"Are you sure you want to remove the close date from this work order and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Work Order",callbackFunction:()=>{cityssm.postJSON(e+"/workOrders/doReopenWorkOrder",{workOrderId:o},r=>{r.success?window.location.href=e+"/workOrders/"+o+"/edit/?t="+Date.now():bulmaJS.alert({title:"Error Reopening Work Order",message:r.errorMessage,contextualColorName:"danger"})})}}})})})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,r=document.querySelector("#button--reopenWorkOrder");r&&r.addEventListener("click",()=>{const o=r.dataset.workOrderId;bulmaJS.confirm({title:"Reopen Work Order",message:"Are you sure you want to remove the close date from this work order and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Work Order",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doReopenWorkOrder",{workOrderId:o},r=>{r.success?window.location.href=e.urlPrefix+"/workOrders/"+o+"/edit/?t="+Date.now():bulmaJS.alert({title:"Error Reopening Work Order",message:r.errorMessage||"",contextualColorName:"danger"})})}}})})})(); \ No newline at end of file diff --git a/types/globalTypes.d.ts b/types/globalTypes.d.ts index 92d8e71c..6c386726 100644 --- a/types/globalTypes.d.ts +++ b/types/globalTypes.d.ts @@ -1,4 +1,6 @@ export interface LOS { + urlPrefix: string; + apiKey: string; highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: "success" | "danger") => void; initializeDatePickers: (containerElement: HTMLElement) => void; initializeTimePickers: (containerElement: HTMLElement) => void; diff --git a/types/globalTypes.ts b/types/globalTypes.ts index bd7ae840..92a78977 100644 --- a/types/globalTypes.ts +++ b/types/globalTypes.ts @@ -1,4 +1,7 @@ export interface LOS { + urlPrefix: string; + apiKey: string; + highlightMap: ( mapContainerElement: HTMLElement, mapKey: string,