From 774f9eddb69ba9c3825a8db23ff5fbc03a97be8b Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Fri, 30 Dec 2022 10:40:20 -0500 Subject: [PATCH] centralize unsaved changes functions --- public-typescript/lotEdit.js | 35 ++++-------- public-typescript/lotEdit.ts | 38 ++++--------- public-typescript/lotOccupancyEdit.js | 21 ++----- .../lotOccupancyEdit/lotOccupancyEdit.js | 21 ++----- .../lotOccupancyEdit/lotOccupancyEdit.ts | 23 ++------ public-typescript/main.js | 43 ++++++++++----- public-typescript/main.ts | 55 ++++++++++++------- public/javascripts/lotEdit.min.js | 2 +- public/javascripts/lotOccupancyEdit.min.js | 2 +- public/javascripts/main.min.js | 2 +- types/globalTypes.d.ts | 3 + types/globalTypes.ts | 4 ++ 12 files changed, 115 insertions(+), 134 deletions(-) diff --git a/public-typescript/lotEdit.js b/public-typescript/lotEdit.js index 5c181cc7..a262864b 100644 --- a/public-typescript/lotEdit.js +++ b/public-typescript/lotEdit.js @@ -6,24 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); const lotId = document.querySelector("#lot--lotId").value; const isCreate = lotId === ""; // Main form - let hasUnsavedChanges = false; let refreshAfterSave = isCreate; - const setUnsavedChanges = () => { - if (!hasUnsavedChanges) { - hasUnsavedChanges = true; - cityssm.enableNavBlocker(); - } - }; - const clearUnsavedChanges = () => { - hasUnsavedChanges = false; - cityssm.disableNavBlocker(); - }; const formElement = document.querySelector("#form--lot"); - const updateLot = (formEvent) => { + function updateLot(formEvent) { formEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + "/lots/" + (isCreate ? "doCreateLot" : "doUpdateLot"), formElement, (responseJSON) => { if (responseJSON.success) { - clearUnsavedChanges(); + los.clearUnsavedChanges(); if (isCreate || refreshAfterSave) { window.location.href = los.urlPrefix + "/lots/" + responseJSON.lotId + "/edit?t=" + Date.now(); @@ -43,11 +32,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } }); - }; + } formElement.addEventListener("submit", updateLot); const formInputElements = formElement.querySelectorAll("input, select"); for (const formInputElement of formInputElements) { - formInputElement.addEventListener("change", setUnsavedChanges); + formInputElement.addEventListener("change", los.setUnsavedChanges); } los.initializeUnlockFieldButtons(formElement); if (!isCreate) { @@ -195,7 +184,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); // Comments let lotComments = exports.lotComments; delete exports.lotComments; - const openEditLotComment = (clickEvent) => { + function openEditLotComment(clickEvent) { const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.lotCommentId, 10); const lotComment = lotComments.find((currentLotComment) => { return currentLotComment.lotCommentId === lotCommentId; @@ -248,8 +237,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); bulmaJS.toggleHtmlClipped(); } }); - }; - const deleteLotComment = (clickEvent) => { + } + function deleteLotComment(clickEvent) { const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.lotCommentId, 10); const doDelete = () => { cityssm.postJSON(los.urlPrefix + "/lots/doDeleteLotComment", { @@ -278,8 +267,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); }, contextualColorName: "warning" }); - }; - const renderLotComments = () => { + } + function renderLotComments() { const containerElement = document.querySelector("#container--lotComments"); if (lotComments.length === 0) { containerElement.innerHTML = @@ -329,8 +318,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); } containerElement.innerHTML = ""; containerElement.append(tableElement); - }; - const openAddCommentModal = () => { + } + function openAddCommentModal() { let addCommentCloseModalFunction; const doAddComment = (formEvent) => { formEvent.preventDefault(); @@ -359,7 +348,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); document.querySelector("#lotComments--add").focus(); } }); - }; + } if (!isCreate) { document.querySelector("#lotComments--add").addEventListener("click", openAddCommentModal); renderLotComments(); diff --git a/public-typescript/lotEdit.ts b/public-typescript/lotEdit.ts index 0fe621b6..2daab87e 100644 --- a/public-typescript/lotEdit.ts +++ b/public-typescript/lotEdit.ts @@ -18,24 +18,11 @@ declare const bulmaJS: BulmaJS; // Main form - let hasUnsavedChanges = false; let refreshAfterSave = isCreate; - const setUnsavedChanges = () => { - if (!hasUnsavedChanges) { - hasUnsavedChanges = true; - cityssm.enableNavBlocker(); - } - }; - - const clearUnsavedChanges = () => { - hasUnsavedChanges = false; - cityssm.disableNavBlocker(); - }; - const formElement = document.querySelector("#form--lot") as HTMLFormElement; - const updateLot = (formEvent: SubmitEvent) => { + function updateLot(formEvent: SubmitEvent) { formEvent.preventDefault(); cityssm.postJSON( @@ -43,7 +30,7 @@ declare const bulmaJS: BulmaJS; formElement, (responseJSON: { success: boolean; lotId?: number; errorMessage?: string }) => { if (responseJSON.success) { - clearUnsavedChanges(); + los.clearUnsavedChanges(); if (isCreate || refreshAfterSave) { window.location.href = @@ -63,14 +50,14 @@ declare const bulmaJS: BulmaJS; } } ); - }; + } formElement.addEventListener("submit", updateLot); const formInputElements = formElement.querySelectorAll("input, select"); for (const formInputElement of formInputElements) { - formInputElement.addEventListener("change", setUnsavedChanges); + formInputElement.addEventListener("change", los.setUnsavedChanges); } los.initializeUnlockFieldButtons(formElement); @@ -275,7 +262,7 @@ declare const bulmaJS: BulmaJS; let lotComments: recordTypes.LotComment[] = exports.lotComments; delete exports.lotComments; - const openEditLotComment = (clickEvent: Event) => { + function openEditLotComment(clickEvent: Event) { const lotCommentId = Number.parseInt( (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotCommentId!, 10 @@ -352,7 +339,6 @@ declare const bulmaJS: BulmaJS; los.initializeDatePickers(modalElement); // los.initializeTimePickers(modalElement); - ( modalElement.querySelector("#lotCommentEdit--lotComment") as HTMLTextAreaElement ).focus(); @@ -366,9 +352,9 @@ declare const bulmaJS: BulmaJS; bulmaJS.toggleHtmlClipped(); } }); - }; + } - const deleteLotComment = (clickEvent: Event) => { + function deleteLotComment(clickEvent: Event) { const lotCommentId = Number.parseInt( (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotCommentId!, 10 @@ -409,9 +395,9 @@ declare const bulmaJS: BulmaJS; }, contextualColorName: "warning" }); - }; + } - const renderLotComments = () => { + function renderLotComments() { const containerElement = document.querySelector("#container--lotComments") as HTMLElement; if (lotComments.length === 0) { @@ -474,9 +460,9 @@ declare const bulmaJS: BulmaJS; containerElement.innerHTML = ""; containerElement.append(tableElement); - }; + } - const openAddCommentModal = () => { + function openAddCommentModal() { let addCommentCloseModalFunction: () => void; const doAddComment = (formEvent: SubmitEvent) => { @@ -514,7 +500,7 @@ declare const bulmaJS: BulmaJS; (document.querySelector("#lotComments--add") as HTMLButtonElement).focus(); } }); - }; + } if (!isCreate) { (document.querySelector("#lotComments--add") as HTMLButtonElement).addEventListener( diff --git a/public-typescript/lotOccupancyEdit.js b/public-typescript/lotOccupancyEdit.js index b0978dc6..ce8a6914 100644 --- a/public-typescript/lotOccupancyEdit.js +++ b/public-typescript/lotOccupancyEdit.js @@ -9,18 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); /* * Main form */ - let hasUnsavedChanges = false; let refreshAfterSave = isCreate; - const setUnsavedChanges = () => { - if (!hasUnsavedChanges) { - hasUnsavedChanges = true; - cityssm.enableNavBlocker(); - } - }; - const clearUnsavedChanges = () => { - hasUnsavedChanges = false; - cityssm.disableNavBlocker(); - }; const formElement = document.querySelector("#form--lotOccupancy"); formElement.addEventListener("submit", (formEvent) => { formEvent.preventDefault(); @@ -28,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); "/lotOccupancies/" + (isCreate ? "doCreateLotOccupancy" : "doUpdateLotOccupancy"), formElement, (responseJSON) => { if (responseJSON.success) { - clearUnsavedChanges(); + los.clearUnsavedChanges(); if (isCreate || refreshAfterSave) { window.location.href = los.urlPrefix + @@ -55,7 +44,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); const formInputElements = formElement.querySelectorAll("input, select"); for (const formInputElement of formInputElements) { - formInputElement.addEventListener("change", setUnsavedChanges); + formInputElement.addEventListener("change", los.setUnsavedChanges); } if (!isCreate) { const doCopy = () => { @@ -83,7 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); (_a = document .querySelector("#button--copyLotOccupancy")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); - if (hasUnsavedChanges) { + if (los.hasUnsavedChanges()) { bulmaJS.alert({ title: "Unsaved Changes", message: "Please save all unsaved changes before continuing.", @@ -312,7 +301,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); document.querySelector("#lotOccupancy--lotId").value = lotId.toString(); document.querySelector("#lotOccupancy--lotName").value = lotName; - setUnsavedChanges(); + los.setUnsavedChanges(); lotSelectCloseModalFunction(); }; const selectExistingLot = (clickEvent) => { @@ -468,7 +457,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { lotNameElement.value = "(No " + exports.aliases.lot + ")"; document.querySelector("#lotOccupancy--lotId").value = ""; - setUnsavedChanges(); + los.setUnsavedChanges(); } }); // Start Date diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEdit.js b/public-typescript/lotOccupancyEdit/lotOccupancyEdit.js index 20de0013..3cc5cdc3 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEdit.js +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEdit.js @@ -9,18 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); /* * Main form */ - let hasUnsavedChanges = false; let refreshAfterSave = isCreate; - const setUnsavedChanges = () => { - if (!hasUnsavedChanges) { - hasUnsavedChanges = true; - cityssm.enableNavBlocker(); - } - }; - const clearUnsavedChanges = () => { - hasUnsavedChanges = false; - cityssm.disableNavBlocker(); - }; const formElement = document.querySelector("#form--lotOccupancy"); formElement.addEventListener("submit", (formEvent) => { formEvent.preventDefault(); @@ -28,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); "/lotOccupancies/" + (isCreate ? "doCreateLotOccupancy" : "doUpdateLotOccupancy"), formElement, (responseJSON) => { if (responseJSON.success) { - clearUnsavedChanges(); + los.clearUnsavedChanges(); if (isCreate || refreshAfterSave) { window.location.href = los.urlPrefix + @@ -55,7 +44,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); const formInputElements = formElement.querySelectorAll("input, select"); for (const formInputElement of formInputElements) { - formInputElement.addEventListener("change", setUnsavedChanges); + formInputElement.addEventListener("change", los.setUnsavedChanges); } if (!isCreate) { const doCopy = () => { @@ -83,7 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); (_a = document .querySelector("#button--copyLotOccupancy")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); - if (hasUnsavedChanges) { + if (los.hasUnsavedChanges()) { bulmaJS.alert({ title: "Unsaved Changes", message: "Please save all unsaved changes before continuing.", @@ -312,7 +301,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); document.querySelector("#lotOccupancy--lotId").value = lotId.toString(); document.querySelector("#lotOccupancy--lotName").value = lotName; - setUnsavedChanges(); + los.setUnsavedChanges(); lotSelectCloseModalFunction(); }; const selectExistingLot = (clickEvent) => { @@ -468,7 +457,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { lotNameElement.value = "(No " + exports.aliases.lot + ")"; document.querySelector("#lotOccupancy--lotId").value = ""; - setUnsavedChanges(); + los.setUnsavedChanges(); } }); // Start Date diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEdit.ts b/public-typescript/lotOccupancyEdit/lotOccupancyEdit.ts index 762ef6a9..6a868392 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEdit.ts +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEdit.ts @@ -22,21 +22,8 @@ declare const bulmaJS: BulmaJS; * Main form */ - let hasUnsavedChanges = false; let refreshAfterSave = isCreate; - const setUnsavedChanges = () => { - if (!hasUnsavedChanges) { - hasUnsavedChanges = true; - cityssm.enableNavBlocker(); - } - }; - - const clearUnsavedChanges = () => { - hasUnsavedChanges = false; - cityssm.disableNavBlocker(); - }; - const formElement = document.querySelector("#form--lotOccupancy") as HTMLFormElement; formElement.addEventListener("submit", (formEvent) => { @@ -53,7 +40,7 @@ declare const bulmaJS: BulmaJS; errorMessage?: string; }) => { if (responseJSON.success) { - clearUnsavedChanges(); + los.clearUnsavedChanges(); if (isCreate || refreshAfterSave) { window.location.href = @@ -82,7 +69,7 @@ declare const bulmaJS: BulmaJS; const formInputElements = formElement.querySelectorAll("input, select"); for (const formInputElement of formInputElements) { - formInputElement.addEventListener("change", setUnsavedChanges); + formInputElement.addEventListener("change", los.setUnsavedChanges); } if (!isCreate) { @@ -120,7 +107,7 @@ declare const bulmaJS: BulmaJS; ?.addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); - if (hasUnsavedChanges) { + if (los.hasUnsavedChanges()) { bulmaJS.alert({ title: "Unsaved Changes", message: "Please save all unsaved changes before continuing.", @@ -440,7 +427,7 @@ declare const bulmaJS: BulmaJS; lotId.toString(); (document.querySelector("#lotOccupancy--lotName") as HTMLInputElement).value = lotName; - setUnsavedChanges(); + los.setUnsavedChanges(); lotSelectCloseModalFunction(); }; @@ -672,7 +659,7 @@ declare const bulmaJS: BulmaJS; } else { lotNameElement.value = "(No " + exports.aliases.lot + ")"; (document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value = ""; - setUnsavedChanges(); + los.setUnsavedChanges(); } } ); diff --git a/public-typescript/main.js b/public-typescript/main.js index 52c2a31a..d7d193f1 100644 --- a/public-typescript/main.js +++ b/public-typescript/main.js @@ -2,7 +2,21 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ Object.defineProperty(exports, "__esModule", { value: true }); (() => { - const highlightMap = (mapContainerElement, mapKey, contextualClass) => { + let _hasUnsavedChanges = false; + function setUnsavedChanges() { + if (!hasUnsavedChanges()) { + _hasUnsavedChanges = true; + cityssm.enableNavBlocker(); + } + } + function clearUnsavedChanges() { + _hasUnsavedChanges = false; + cityssm.disableNavBlocker(); + } + function hasUnsavedChanges() { + return _hasUnsavedChanges; + } + function highlightMap(mapContainerElement, mapKey, contextualClass) { // Search for ID let svgId = mapKey; let svgElementToHighlight; @@ -24,8 +38,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); pathElement.style.fill = ""; } } - }; - const unlockField = (clickEvent) => { + } + function unlockField(clickEvent) { const fieldElement = clickEvent.currentTarget.closest(".field"); const inputOrSelectElement = fieldElement.querySelector("input, select"); inputOrSelectElement.classList.remove("is-readonly"); @@ -40,13 +54,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); } } inputOrSelectElement.focus(); - }; - const initializeUnlockFieldButtons = (containerElement) => { + } + function initializeUnlockFieldButtons(containerElement) { const unlockFieldButtonElements = containerElement.querySelectorAll(".is-unlock-field-button"); for (const unlockFieldButtonElement of unlockFieldButtonElements) { unlockFieldButtonElement.addEventListener("click", unlockField); } - }; + } const datePickerBaseOptions = { type: "date", dateFormat: "yyyy-MM-dd", @@ -54,7 +68,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); color: "info", displayMode: "dialog" }; - const initializeDatePickers = (containerElement) => { + function initializeDatePickers(containerElement) { const dateElements = containerElement.querySelectorAll("input[type='date']"); for (const dateElement of dateElements) { const datePickerOptions = Object.assign({}, datePickerBaseOptions); @@ -111,7 +125,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); labelElement.textContent; } } - }; + } /* const timePickerBaseOptions: BulmaCalendarOptions = { type: "time", @@ -184,7 +198,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }; */ - const populateAliases = (containerElement) => { + function populateAliases(containerElement) { const aliasElements = containerElement.querySelectorAll(".alias"); for (const aliasElement of aliasElements) { switch (aliasElement.dataset.alias) { @@ -222,7 +236,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } } } - }; + } const escapedAliases = Object.freeze({ Map: cityssm.escapeHTML(exports.aliases.map), map: cityssm.escapeHTML(exports.aliases.map.toLowerCase()), @@ -249,7 +263,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); const hues = ["red", "green", "orange", "blue", "pink", "yellow", "purple"]; const luminosity = ["bright", "light", "dark"]; - const getRandomColor = (seedString) => { + function getRandomColor(seedString) { let actualSeedString = seedString; if (actualSeedString.length < 2) { actualSeedString = actualSeedString + "a1"; @@ -259,7 +273,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1) % hues.length], luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length] }); - }; + } const los = { urlPrefix: document.querySelector("main").dataset.urlPrefix, apiKey: document.querySelector("main").dataset.apiKey, @@ -269,7 +283,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); // initializeTimePickers, populateAliases, escapedAliases, - getRandomColor + getRandomColor, + setUnsavedChanges, + clearUnsavedChanges, + hasUnsavedChanges }; exports.los = los; })(); diff --git a/public-typescript/main.ts b/public-typescript/main.ts index f8344015..0e4d70ea 100644 --- a/public-typescript/main.ts +++ b/public-typescript/main.ts @@ -9,13 +9,30 @@ declare const cityssm: cityssmGlobal; declare const bulmaJS: BulmaJS; (() => { - const highlightMap = ( + let _hasUnsavedChanges = false; + + function setUnsavedChanges() { + if (!hasUnsavedChanges()) { + _hasUnsavedChanges = true; + cityssm.enableNavBlocker(); + } + } + + function clearUnsavedChanges() { + _hasUnsavedChanges = false; + cityssm.disableNavBlocker(); + } + + function hasUnsavedChanges() { + return _hasUnsavedChanges; + } + + function highlightMap( mapContainerElement: HTMLElement, mapKey: string, contextualClass: "success" | "danger" - ) => { + ): void { // Search for ID - let svgId = mapKey; let svgElementToHighlight: SVGElement | null; @@ -42,9 +59,9 @@ declare const bulmaJS: BulmaJS; pathElement.style.fill = ""; } } - }; + } - const unlockField = (clickEvent: Event) => { + function unlockField(clickEvent: Event): void { const fieldElement = (clickEvent.currentTarget as HTMLElement).closest(".field")!; const inputOrSelectElement = fieldElement.querySelector("input, select") as @@ -64,16 +81,16 @@ declare const bulmaJS: BulmaJS; } inputOrSelectElement.focus(); - }; + } - const initializeUnlockFieldButtons = (containerElement: HTMLElement) => { + function initializeUnlockFieldButtons(containerElement: HTMLElement): void { const unlockFieldButtonElements = containerElement.querySelectorAll(".is-unlock-field-button"); for (const unlockFieldButtonElement of unlockFieldButtonElements) { unlockFieldButtonElement.addEventListener("click", unlockField); } - }; + } const datePickerBaseOptions: BulmaCalendarOptions = { type: "date", @@ -83,7 +100,7 @@ declare const bulmaJS: BulmaJS; displayMode: "dialog" }; - const initializeDatePickers = (containerElement: HTMLElement) => { + function initializeDatePickers(containerElement: HTMLElement): void { const dateElements = containerElement.querySelectorAll( "input[type='date']" ) as NodeListOf; @@ -124,11 +141,9 @@ declare const bulmaJS: BulmaJS; }); // Get the datepicker container element - const datepickerElement = containerElement.querySelector("#" + cal._id) as HTMLElement; // Override the previous and next month button styles - const datePickerNavButtonElements = datepickerElement.querySelectorAll( ".datepicker-nav button.is-text" ); @@ -139,7 +154,6 @@ declare const bulmaJS: BulmaJS; } // Override the clear button style - const clearButtonElement = datepickerElement.querySelector( ".datetimepicker-clear-button" ) as HTMLElement; @@ -156,7 +170,6 @@ declare const bulmaJS: BulmaJS; } // Apply a label - const labelElement = document.querySelector("label[for='" + dateElement.id + "']"); if (labelElement) { @@ -164,7 +177,7 @@ declare const bulmaJS: BulmaJS; labelElement.textContent; } } - }; + } /* const timePickerBaseOptions: BulmaCalendarOptions = { @@ -239,7 +252,7 @@ declare const bulmaJS: BulmaJS; }; */ - const populateAliases = (containerElement: HTMLElement) => { + function populateAliases(containerElement: HTMLElement): void { const aliasElements = containerElement.querySelectorAll( ".alias" ) as NodeListOf; @@ -280,7 +293,7 @@ declare const bulmaJS: BulmaJS; } } } - }; + } const escapedAliases = Object.freeze({ Map: cityssm.escapeHTML(exports.aliases.map), @@ -319,7 +332,7 @@ declare const bulmaJS: BulmaJS; const hues = ["red", "green", "orange", "blue", "pink", "yellow", "purple"]; const luminosity = ["bright", "light", "dark"]; - const getRandomColor = (seedString: string) => { + function getRandomColor(seedString: string) { let actualSeedString = seedString; if (actualSeedString.length < 2) { @@ -334,7 +347,7 @@ declare const bulmaJS: BulmaJS; actualSeedString.codePointAt(actualSeedString.length - 2)! % luminosity.length ] }); - }; + } const los: globalTypes.LOS = { urlPrefix: document.querySelector("main")!.dataset.urlPrefix!, @@ -345,7 +358,11 @@ declare const bulmaJS: BulmaJS; // initializeTimePickers, populateAliases, escapedAliases, - getRandomColor + getRandomColor, + + setUnsavedChanges, + clearUnsavedChanges, + hasUnsavedChanges }; exports.los = los; diff --git a/public/javascripts/lotEdit.min.js b/public/javascripts/lotEdit.min.js index 76c44fa6..69b05720 100644 --- a/public/javascripts/lotEdit.min.js +++ b/public/javascripts/lotEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#lot--lotId").value,o=""===t;let l=!1,s=o;const n=()=>{l||(l=!0,cityssm.enableNavBlocker())},a=document.querySelector("#form--lot");a.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lots/"+(o?"doCreateLot":"doUpdateLot"),a,t=>{t.success?(l=!1,cityssm.disableNavBlocker(),o||s?window.location.href=e.urlPrefix+"/lots/"+t.lotId+"/edit?t="+Date.now():bulmaJS.alert({message:exports.aliases.lot+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot,message:t.errorMessage||"",contextualColorName:"danger"})})});const r=a.querySelectorAll("input, select");for(const e of r)e.addEventListener("change",n);e.initializeUnlockFieldButtons(a),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(e.urlPrefix+"/lots/doDeleteLot",{lotId:t},t=>{t.success?(cityssm.disableNavBlocker(),window.location.href=e.urlPrefix+"/lots/?t="+Date.now()):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot,message:t.errorMessage||"",contextualColorName:"danger"})})}}})});const i=document.querySelector("#lot--lotTypeId");if(o){const t=document.querySelector("#container--lotFields");i.addEventListener("change",()=>{""!==i.value?cityssm.postJSON(e.urlPrefix+"/lots/doGetLotTypeFields",{lotTypeId:i.value},e=>{if(0===e.lotTypeFields.length)return void(t.innerHTML='

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

");t.innerHTML="";let o="";for(const l of e.lotTypeFields){o+=","+l.lotTypeFieldId;const e="lotFieldValue_"+l.lotTypeFieldId,s="lot--"+e,n=document.createElement("div");if(n.className="field",n.innerHTML='
',n.querySelector("label").textContent=l.lotTypeField,""===l.lotTypeFieldValues){const t=document.createElement("input");t.className="input",t.id=s,t.name=e,t.type="text",t.required=l.isRequired,t.minLength=l.minimumLength,t.maxLength=l.maximumLength,l.pattern&&""!==l.pattern&&(t.pattern=l.pattern),n.querySelector(".control").append(t)}else{n.querySelector(".control").innerHTML='
';const t=n.querySelector("select");t.required=l.isRequired;const o=l.lotTypeFieldValues.split("\n");for(const e of o){const o=document.createElement("option");o.value=e,o.textContent=e,t.append(o)}}t.append(n)}t.insertAdjacentHTML("beforeend",'')}):t.innerHTML='

Select the '+exports.aliases.lot.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.lot.toLowerCase()+" type?\nThis change affects the additional fields associated with this record.",contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{s=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{i.value=e}}})})}let m=exports.lotComments;delete exports.lotComments;const d=o=>{const l=Number.parseInt(o.currentTarget.closest("tr").dataset.lotCommentId,10),s=m.find(e=>e.lotCommentId===l);let n,a;const r=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lots/doUpdateLotComment",n,e=>{e.success?(m=e.lotComments,a(),u()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editComment",{onshow:o=>{e.populateAliases(o),o.querySelector("#lotCommentEdit--lotId").value=t,o.querySelector("#lotCommentEdit--lotCommentId").value=l.toString(),o.querySelector("#lotCommentEdit--lotComment").value=s.lotComment;const n=o.querySelector("#lotCommentEdit--lotCommentDateString");n.value=s.lotCommentDateString;const a=cityssm.dateToString(new Date);n.max=s.lotCommentDateString<=a?a:s.lotCommentDateString,o.querySelector("#lotCommentEdit--lotCommentTimeString").value=s.lotCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),t.querySelector("#lotCommentEdit--lotComment").focus(),(n=t.querySelector("form")).addEventListener("submit",r),a=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},c=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(e.urlPrefix+"/lots/doDeleteLotComment",{lotId:t,lotCommentId:l},e=>{e.success?(m=e.lotComments,u()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},u=()=>{const e=document.querySelector("#container--lotComments");if(0===m.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 m){const o=document.createElement("tr");o.dataset.lotCommentId=e.lotCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.lotCommentDateString+(0===e.lotCommentTime?"":" "+e.lotCommentTimeString)+""+cityssm.escapeHTML(e.lotComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",d),o.querySelector(".button--delete").addEventListener("click",c),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)},p=()=>{let o;const l=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lots/doAddLotComment",t.currentTarget,e=>{e.success&&(m=e.lotComments,u(),o())})};cityssm.openHtmlModal("lot-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#lotCommentAdd--lotId").value=t,o.querySelector("form").addEventListener("submit",l)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})};o||(document.querySelector("#lotComments--add").addEventListener("click",p),u())})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#lot--lotId").value,o=""===t;let l=o;const n=document.querySelector("#form--lot");n.addEventListener("submit",function(t){t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lots/"+(o?"doCreateLot":"doUpdateLot"),n,t=>{t.success?(e.clearUnsavedChanges(),o||l?window.location.href=e.urlPrefix+"/lots/"+t.lotId+"/edit?t="+Date.now():bulmaJS.alert({message:exports.aliases.lot+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot,message:t.errorMessage||"",contextualColorName:"danger"})})});const s=n.querySelectorAll("input, select");for(const t of s)t.addEventListener("change",e.setUnsavedChanges);e.initializeUnlockFieldButtons(n),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(e.urlPrefix+"/lots/doDeleteLot",{lotId:t},t=>{t.success?(cityssm.disableNavBlocker(),window.location.href=e.urlPrefix+"/lots/?t="+Date.now()):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot,message:t.errorMessage||"",contextualColorName:"danger"})})}}})});const a=document.querySelector("#lot--lotTypeId");if(o){const t=document.querySelector("#container--lotFields");a.addEventListener("change",()=>{""!==a.value?cityssm.postJSON(e.urlPrefix+"/lots/doGetLotTypeFields",{lotTypeId:a.value},e=>{if(0===e.lotTypeFields.length)return void(t.innerHTML='

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

");t.innerHTML="";let o="";for(const l of e.lotTypeFields){o+=","+l.lotTypeFieldId;const e="lotFieldValue_"+l.lotTypeFieldId,n="lot--"+e,s=document.createElement("div");if(s.className="field",s.innerHTML='
',s.querySelector("label").textContent=l.lotTypeField,""===l.lotTypeFieldValues){const t=document.createElement("input");t.className="input",t.id=n,t.name=e,t.type="text",t.required=l.isRequired,t.minLength=l.minimumLength,t.maxLength=l.maximumLength,l.pattern&&""!==l.pattern&&(t.pattern=l.pattern),s.querySelector(".control").append(t)}else{s.querySelector(".control").innerHTML='
';const t=s.querySelector("select");t.required=l.isRequired;const o=l.lotTypeFieldValues.split("\n");for(const e of o){const o=document.createElement("option");o.value=e,o.textContent=e,t.append(o)}}t.append(s)}t.insertAdjacentHTML("beforeend",'')}):t.innerHTML='

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

"})}else{const e=a.value;a.addEventListener("change",()=>{a.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:"Are you sure you want to change the "+exports.aliases.lot.toLowerCase()+" type?\nThis change affects the additional fields associated with this record.",contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{l=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{a.value=e}}})})}let r=exports.lotComments;function i(o){const l=Number.parseInt(o.currentTarget.closest("tr").dataset.lotCommentId,10),n=r.find(e=>e.lotCommentId===l);let s,a;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lots/doUpdateLotComment",s,e=>{e.success?(r=e.lotComments,a(),d()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editComment",{onshow:o=>{e.populateAliases(o),o.querySelector("#lotCommentEdit--lotId").value=t,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 a=cityssm.dateToString(new Date);s.max=n.lotCommentDateString<=a?a:n.lotCommentDateString,o.querySelector("#lotCommentEdit--lotCommentTimeString").value=n.lotCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),t.querySelector("#lotCommentEdit--lotComment").focus(),(s=t.querySelector("form")).addEventListener("submit",i),a=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}function m(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(e.urlPrefix+"/lots/doDeleteLotComment",{lotId:t,lotCommentId:l},e=>{e.success?(r=e.lotComments,d()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function d(){const e=document.querySelector("#container--lotComments");if(0===r.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 r){const o=document.createElement("tr");o.dataset.lotCommentId=e.lotCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.lotCommentDateString+(0===e.lotCommentTime?"":" "+e.lotCommentTimeString)+""+cityssm.escapeHTML(e.lotComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",i),o.querySelector(".button--delete").addEventListener("click",m),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)}delete exports.lotComments,o||(document.querySelector("#lotComments--add").addEventListener("click",function(){let o;const l=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/lots/doAddLotComment",t.currentTarget,e=>{e.success&&(r=e.lotComments,d(),o())})};cityssm.openHtmlModal("lot-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#lotCommentAdd--lotId").value=t,o.querySelector("form").addEventListener("submit",l)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})}),d())})(); \ No newline at end of file diff --git a/public/javascripts/lotOccupancyEdit.min.js b/public/javascripts/lotOccupancyEdit.min.js index e8e97ff2..a3719cb5 100644 --- a/public/javascripts/lotOccupancyEdit.min.js +++ b/public/javascripts/lotOccupancyEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,c;const a=exports.los,o=document.querySelector("#lotOccupancy--lotOccupancyId").value,n=""===o;let s=!1,l=n;const r=()=>{s||(s=!0,cityssm.enableNavBlocker())},i=document.querySelector("#form--lotOccupancy");i.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/"+(n?"doCreateLotOccupancy":"doUpdateLotOccupancy"),i,e=>{e.success?(s=!1,cityssm.disableNavBlocker(),n||l?window.location.href=a.urlPrefix+"/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 u=i.querySelectorAll("input, select");for(const e of u)e.addEventListener("change",r);if(!n){const n=()=>{cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:o},e=>{var t;e.success?(cityssm.disableNavBlocker(),window.location.href=a.urlPrefix+"/lotOccupancies/"+(null===(t=e.lotOccupancyId)||void 0===t?void 0:t.toString())+"/edit"):bulmaJS.alert({title:"Error Copying Record",message:e.errorMessage||"",contextualColorName:"danger"})})};null===(e=document.querySelector("#button--copyLotOccupancy"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),s?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:"Copy "+exports.aliases.occupancy+" Record as New",message:"Are you sure you want to copy this record to a new record?",contextualColorName:"info",okButton:{text:"Yes, Copy",callbackFunction:n}})}),null===(t=document.querySelector("#button--deleteLotOccupancy"))||void 0===t||t.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(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:o},e=>{e.success?(cityssm.disableNavBlocker(),window.location.href=a.urlPrefix+"/lotOccupancies?t="+Date.now()):bulmaJS.alert({title:"Error Deleting Record",message:e.errorMessage||"",contextualColorName:"danger"})})}}})}),null===(c=document.querySelector("#button--createWorkOrder"))||void 0===c||c.addEventListener("click",e=>{let t;e.preventDefault();const c=e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{e.success?(t(),bulmaJS.confirm({title:"Work Order Created Successfully",message:"Would you like to open the work order now?",contextualColorName:"success",okButton:{text:"Yes, Open the Work Order",callbackFunction:()=>{window.location.href=a.urlPrefix+"/workOrders/"+e.workOrderId+"/edit"}}})):bulmaJS.alert({title:"Error Creating Work Order",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-createWorkOrder",{onshow:e=>{e.querySelector("#workOrderCreate--lotOccupancyId").value=o,e.querySelector("#workOrderCreate--workOrderOpenDateString").value=cityssm.dateToString(new Date);const t=e.querySelector("#workOrderCreate--workOrderTypeId"),c=exports.workOrderTypes;1===c.length&&(t.innerHTML="");for(const e of c){const c=document.createElement("option");c.value=e.workOrderTypeId.toString(),c.textContent=e.workOrderType,t.append(c)}},onshown:(e,a)=>{var o;t=a,null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",c)}})})}const d=document.querySelector("#lotOccupancy--occupancyTypeId");if(n){const e=document.querySelector("#container--lotOccupancyFields");d.addEventListener("change",()=>{""!==d.value?cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:d.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='
';const e=n.querySelector("select");e.required=a.isRequired;const c=a.occupancyTypeFieldValues.split("\n");for(const t of c){const c=document.createElement("option");c.value=t,c.textContent=t,e.append(c)}}e.append(n)}e.insertAdjacentHTML("beforeend",'')}):e.innerHTML='

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

"})}else{const e=d.value;d.addEventListener("change",()=>{d.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:()=>{l=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{d.value=e}}})})}const p=document.querySelector("#lotOccupancy--lotName");let m;p.addEventListener("click",e=>{const t=e.currentTarget.value;let c,o,n,s;const l=(e,t)=>{document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,r(),c()},i=e=>{e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)},u=()=>{s.innerHTML='


Searching...

',cityssm.postJSON(a.urlPrefix+"/lots/doSearchLots",n,e=>{if(0===e.count)return void(s.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)}s.innerHTML="",s.append(t)})},d=e=>{e.preventDefault();const t=o.querySelector("#lotCreate--lotName").value;cityssm.postJSON(a.urlPrefix+"/lots/doCreateLot",e.currentTarget,e=>{e.success?l(e.lotId,t):bulmaJS.alert({title:"Error Creating "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow:e=>{a.populateAliases(e)},onshown:(e,a)=>{bulmaJS.toggleHtmlClipped(),o=e,c=a,bulmaJS.init(e);const l=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(l.value=t),l.focus(),l.addEventListener("change",u);const r=e.querySelector("#lotSelect--occupancyStatus");if(r.addEventListener("change",u),""!==t&&(r.value=""),n=e.querySelector("#form--lotSelect"),s=e.querySelector("#resultsContainer--lotSelect"),n.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 e=document.querySelector("#lotOccupancy--lotId").value;e?window.open(a.urlPrefix+"/lots/"+e):bulmaJS.alert({message:"No "+exports.aliases.lot.toLowerCase()+" selected.",contextualColorName:"info"})}),document.querySelector(".is-clear-lot-button").addEventListener("click",()=>{p.disabled?bulmaJS.alert({message:"You need to unlock the field before clearing it.",contextualColorName:"info"}):(p.value="(No "+exports.aliases.lot+")",document.querySelector("#lotOccupancy--lotId").value="",r())}),a.initializeDatePickers(i),document.querySelector("#lotOccupancy--occupancyStartDateString").addEventListener("change",()=>{const e=document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker;e.min=document.querySelector("#lotOccupancy--occupancyStartDateString").value,e.refresh()}),a.initializeUnlockFieldButtons(i),Object.defineProperty(exports,"__esModule",{value:!0});const y=e=>{const t=Number.parseInt(e.currentTarget.closest("tr").dataset.lotOccupantIndex,10),c=m.find(e=>e.lotOccupantIndex===t);let n,s;const l=e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyOccupant",n,e=>{e.success?(m=e.lotOccupancyOccupants,s(),g()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow:e=>{a.populateAliases(e),e.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=o,e.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=t.toString();const n=e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");let s=!1;for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,e.lotOccupantTypeId===c.lotOccupantTypeId&&(t.selected=!0,s=!0),n.append(t)}if(!s){const e=document.createElement("option");e.value=c.lotOccupantTypeId.toString(),e.textContent=c.lotOccupantType,e.selected=!0,n.append(e)}e.querySelector("#lotOccupancyOccupantEdit--occupantName").value=c.occupantName,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress1").value=c.occupantAddress1,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress2").value=c.occupantAddress2,e.querySelector("#lotOccupancyOccupantEdit--occupantCity").value=c.occupantCity,e.querySelector("#lotOccupancyOccupantEdit--occupantProvince").value=c.occupantProvince,e.querySelector("#lotOccupancyOccupantEdit--occupantPostalCode").value=c.occupantPostalCode,e.querySelector("#lotOccupancyOccupantEdit--occupantPhoneNumber").value=c.occupantPhoneNumber,e.querySelector("#lotOccupancyOccupantEdit--occupantEmailAddress").value=c.occupantEmailAddress,e.querySelector("#lotOccupancyOccupantEdit--occupantComment").value=c.occupantComment},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId").focus(),(n=e.querySelector("form")).addEventListener("submit",l),s=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},O=e=>{const t=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(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:o,lotOccupantIndex:t},e=>{e.success?(m=e.lotOccupancyOccupants,g()):bulmaJS.alert({title:"Error Removing "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},g=()=>{const e=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(e),0===m.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+'AddressOther ContactCommentOptions';for(const e of m){const c=document.createElement("tr");c.dataset.lotOccupantIndex=e.lotOccupantIndex.toString(),c.innerHTML=""+cityssm.escapeHTML(e.occupantName||"(No Name)")+'
'+cityssm.escapeHTML(e.lotOccupantType)+""+(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):"")+""+cityssm.escapeHTML(e.occupantComment)+'
',c.querySelector(".button--edit").addEventListener("click",y),c.querySelector(".button--delete").addEventListener("click",O),t.querySelector("tbody").append(c)}e.append(t)};if(n){const e=document.querySelector("#lotOccupancy--lotOccupantTypeId");e.addEventListener("change",()=>{const t=i.querySelectorAll("[data-table='LotOccupancyOccupant']");for(const c of t)c.disabled=""===e.value})}else m=exports.lotOccupancyOccupants,delete exports.lotOccupancyOccupants,document.querySelector("#button--addOccupant").addEventListener("click",()=>{let e,t,c,n;const s=t=>{cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyOccupant",t,t=>{t.success?(m=t.lotOccupancyOccupants,e(),g()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupant,message:t.errorMessage||"",contextualColorName:"danger"})})},l=e=>{e.preventDefault(),s(t)};let r=[];const i=e=>{e.preventDefault();const t=e.currentTarget,c=r[Number.parseInt(t.dataset.index,10)],a=t.closest(".modal").querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId").value;""===a?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"}):(c.lotOccupantTypeId=Number.parseInt(a,10),c.lotOccupancyId=Number.parseInt(o,10),s(c))},u=e=>{e.preventDefault(),""!==c.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(n.innerHTML='

Searching...
',cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doSearchPastOccupants",c,e=>{r=e.occupants;const t=document.createElement("div");t.className="panel";for(const[e,c]of r.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",i),t.append(a)}n.innerHTML="",n.append(t)})):n.innerHTML='

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

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

There are no comments associated with this record.

');const o=document.createElement("table");o.className="table is-fullwidth is-striped is-hoverable",o.innerHTML='CommentorComment DateCommentOptions';for(const a of e){const e=document.createElement("tr");e.dataset.lotOccupancyCommentId=a.lotOccupancyCommentId.toString(),e.innerHTML=""+cityssm.escapeHTML(a.recordCreate_userName||"")+""+a.lotOccupancyCommentDateString+(0===a.lotOccupancyCommentTime?"":" "+a.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(a.lotOccupancyComment||"")+'
',e.querySelector(".button--edit").addEventListener("click",t),e.querySelector(".button--delete").addEventListener("click",c),o.querySelector("tbody").append(e)}a.innerHTML="",a.append(o)};document.querySelector("#button--addComment").addEventListener("click",()=>{let t,c;const s=o=>{o.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{t.success?(e=t.lotOccupancyComments,c(),n()):bulmaJS.alert({title:"Error Adding Comment",message:t.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addComment",{onshow:e=>{a.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=o},onshown:(e,a)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",s),c=a},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),n(),Object.defineProperty(exports,"__esModule",{value:!0});let l=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const r=document.querySelector("#container--lotOccupancyFees"),i=()=>{let e=0;for(const t of l)e+=(t.feeAmount+t.taxAmount)*t.quantity;return e},u=e=>{const t=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(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:o,feeId:t},e=>{e.success?(l=e.lotOccupancyFees,d()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},d=()=>{if(0===l.length)return r.innerHTML='

There are no fees associated with this record.

',void g();r.innerHTML='
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
';let e=0,t=0;for(const c of l){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",u),r.querySelector("tbody").append(a),e+=c.feeAmount*c.quantity,t+=c.taxAmount*c.quantity}r.querySelector("#lotOccupancyFees--feeAmountTotal").textContent="$"+e.toFixed(2),r.querySelector("#lotOccupancyFees--taxAmountTotal").textContent="$"+t.toFixed(2),r.querySelector("#lotOccupancyFees--grandTotal").textContent="$"+(e+t).toFixed(2),g()};document.querySelector("#button--addFee").addEventListener("click",()=>{if(s)return void bulmaJS.alert({message:"Please save all unsaved changes before adding fees.",contextualColorName:"warning"});let e,t,c;const n=(e,t=1)=>{cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyFee",{lotOccupancyId:o,feeId:e,quantity:t},e=>{e.success?(l=e.lotOccupancyFees,d(),u()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage||"",contextualColorName:"danger"})})},i=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(),n(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):n(c)},u=()=>{const a=t.value.trim().toLowerCase().split(" ");c.innerHTML="";for(const t of e){const e=document.createElement("div");e.className="container--feeCategory",e.dataset.feeCategoryId=t.feeCategoryId.toString(),e.innerHTML='

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

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

There are no transactions associated with this record.

');m.innerHTML='
Date'+cityssm.escapeHTML(exports.aliases.externalReceiptNumber)+'AmountOptions
Transaction Total
';let e=0;for(const t of p){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",O),m.querySelector("tbody").append(c)}m.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+e.toFixed(2);const t=i();t>e&&m.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(t-e).toFixed(2)+"
")};document.querySelector("#button--addTransaction").addEventListener("click",()=>{let e;const t=t=>{t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,t=>{t.success?(p=t.lotOccupancyTransactions,e(),g()):bulmaJS.confirm({title:"Error Adding Transaction",message:t.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow:e=>{a.populateAliases(e),e.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=o.toString();const t=i(),c=y(),n=e.querySelector("#lotOccupancyTransactionAdd--transactionAmount");n.min=(-1*c).toFixed(2),n.max=Math.max(t-c,0).toFixed(2),n.value=Math.max(t-c,0).toFixed(2)},onshown:(c,a)=>{bulmaJS.toggleHtmlClipped(),e=a,c.querySelector("form").addEventListener("submit",t)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),d()}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,c;const a=exports.los,o=document.querySelector("#lotOccupancy--lotOccupancyId").value,n=""===o;let s=n;const l=document.querySelector("#form--lotOccupancy");l.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/"+(n?"doCreateLotOccupancy":"doUpdateLotOccupancy"),l,e=>{e.success?(a.clearUnsavedChanges(),n||s?window.location.href=a.urlPrefix+"/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",a.setUnsavedChanges);if(!n){const n=()=>{cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:o},e=>{var t;e.success?(cityssm.disableNavBlocker(),window.location.href=a.urlPrefix+"/lotOccupancies/"+(null===(t=e.lotOccupancyId)||void 0===t?void 0:t.toString())+"/edit"):bulmaJS.alert({title:"Error Copying Record",message:e.errorMessage||"",contextualColorName:"danger"})})};null===(e=document.querySelector("#button--copyLotOccupancy"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),a.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:"Copy "+exports.aliases.occupancy+" Record as New",message:"Are you sure you want to copy this record to a new record?",contextualColorName:"info",okButton:{text:"Yes, Copy",callbackFunction:n}})}),null===(t=document.querySelector("#button--deleteLotOccupancy"))||void 0===t||t.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(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:o},e=>{e.success?(cityssm.disableNavBlocker(),window.location.href=a.urlPrefix+"/lotOccupancies?t="+Date.now()):bulmaJS.alert({title:"Error Deleting Record",message:e.errorMessage||"",contextualColorName:"danger"})})}}})}),null===(c=document.querySelector("#button--createWorkOrder"))||void 0===c||c.addEventListener("click",e=>{let t;e.preventDefault();const c=e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{e.success?(t(),bulmaJS.confirm({title:"Work Order Created Successfully",message:"Would you like to open the work order now?",contextualColorName:"success",okButton:{text:"Yes, Open the Work Order",callbackFunction:()=>{window.location.href=a.urlPrefix+"/workOrders/"+e.workOrderId+"/edit"}}})):bulmaJS.alert({title:"Error Creating Work Order",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-createWorkOrder",{onshow:e=>{e.querySelector("#workOrderCreate--lotOccupancyId").value=o,e.querySelector("#workOrderCreate--workOrderOpenDateString").value=cityssm.dateToString(new Date);const t=e.querySelector("#workOrderCreate--workOrderTypeId"),c=exports.workOrderTypes;1===c.length&&(t.innerHTML="");for(const e of c){const c=document.createElement("option");c.value=e.workOrderTypeId.toString(),c.textContent=e.workOrderType,t.append(c)}},onshown:(e,a)=>{var o;t=a,null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",c)}})})}const i=document.querySelector("#lotOccupancy--occupancyTypeId");if(n){const e=document.querySelector("#container--lotOccupancyFields");i.addEventListener("change",()=>{""!==i.value?cityssm.postJSON(a.urlPrefix+"/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='
';const e=n.querySelector("select");e.required=a.isRequired;const c=a.occupancyTypeFieldValues.split("\n");for(const t of c){const c=document.createElement("option");c.value=t,c.textContent=t,e.append(c)}}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:()=>{s=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{i.value=e}}})})}const u=document.querySelector("#lotOccupancy--lotName");let d;u.addEventListener("click",e=>{const t=e.currentTarget.value;let c,o,n,s;const l=(e,t)=>{document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,a.setUnsavedChanges(),c()},r=e=>{e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)},i=()=>{s.innerHTML='


Searching...

',cityssm.postJSON(a.urlPrefix+"/lots/doSearchLots",n,e=>{if(0===e.count)return void(s.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",r),t.append(e)}s.innerHTML="",s.append(t)})},u=e=>{e.preventDefault();const t=o.querySelector("#lotCreate--lotName").value;cityssm.postJSON(a.urlPrefix+"/lots/doCreateLot",e.currentTarget,e=>{e.success?l(e.lotId,t):bulmaJS.alert({title:"Error Creating "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow:e=>{a.populateAliases(e)},onshown:(e,a)=>{bulmaJS.toggleHtmlClipped(),o=e,c=a,bulmaJS.init(e);const l=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(l.value=t),l.focus(),l.addEventListener("change",i);const r=e.querySelector("#lotSelect--occupancyStatus");if(r.addEventListener("change",i),""!==t&&(r.value=""),n=e.querySelector("#form--lotSelect"),s=e.querySelector("#resultsContainer--lotSelect"),n.addEventListener("submit",e=>{e.preventDefault()}),i(),exports.lotNamePattern){const t=exports.lotNamePattern;e.querySelector("#lotCreate--lotName").pattern=t.source}const d=e.querySelector("#lotCreate--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,d.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",u)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),document.querySelector(".is-lot-view-button").addEventListener("click",()=>{const e=document.querySelector("#lotOccupancy--lotId").value;e?window.open(a.urlPrefix+"/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="",a.setUnsavedChanges())}),a.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()}),a.initializeUnlockFieldButtons(l),Object.defineProperty(exports,"__esModule",{value:!0});const p=e=>{const t=Number.parseInt(e.currentTarget.closest("tr").dataset.lotOccupantIndex,10),c=d.find(e=>e.lotOccupantIndex===t);let n,s;const l=e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyOccupant",n,e=>{e.success?(d=e.lotOccupancyOccupants,s(),y()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow:e=>{a.populateAliases(e),e.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=o,e.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=t.toString();const n=e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");let s=!1;for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,e.lotOccupantTypeId===c.lotOccupantTypeId&&(t.selected=!0,s=!0),n.append(t)}if(!s){const e=document.createElement("option");e.value=c.lotOccupantTypeId.toString(),e.textContent=c.lotOccupantType,e.selected=!0,n.append(e)}e.querySelector("#lotOccupancyOccupantEdit--occupantName").value=c.occupantName,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress1").value=c.occupantAddress1,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress2").value=c.occupantAddress2,e.querySelector("#lotOccupancyOccupantEdit--occupantCity").value=c.occupantCity,e.querySelector("#lotOccupancyOccupantEdit--occupantProvince").value=c.occupantProvince,e.querySelector("#lotOccupancyOccupantEdit--occupantPostalCode").value=c.occupantPostalCode,e.querySelector("#lotOccupancyOccupantEdit--occupantPhoneNumber").value=c.occupantPhoneNumber,e.querySelector("#lotOccupancyOccupantEdit--occupantEmailAddress").value=c.occupantEmailAddress,e.querySelector("#lotOccupancyOccupantEdit--occupantComment").value=c.occupantComment},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId").focus(),(n=e.querySelector("form")).addEventListener("submit",l),s=t},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},m=e=>{const t=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(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:o,lotOccupantIndex:t},e=>{e.success?(d=e.lotOccupancyOccupants,y()):bulmaJS.alert({title:"Error Removing "+exports.aliases.occupant,message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},y=()=>{const e=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(e),0===d.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+'AddressOther ContactCommentOptions';for(const e of d){const c=document.createElement("tr");c.dataset.lotOccupantIndex=e.lotOccupantIndex.toString(),c.innerHTML=""+cityssm.escapeHTML(e.occupantName||"(No Name)")+'
'+cityssm.escapeHTML(e.lotOccupantType)+""+(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):"")+""+cityssm.escapeHTML(e.occupantComment)+'
',c.querySelector(".button--edit").addEventListener("click",p),c.querySelector(".button--delete").addEventListener("click",m),t.querySelector("tbody").append(c)}e.append(t)};if(n){const e=document.querySelector("#lotOccupancy--lotOccupantTypeId");e.addEventListener("change",()=>{const t=l.querySelectorAll("[data-table='LotOccupancyOccupant']");for(const c of t)c.disabled=""===e.value})}else d=exports.lotOccupancyOccupants,delete exports.lotOccupancyOccupants,document.querySelector("#button--addOccupant").addEventListener("click",()=>{let e,t,c,n;const s=t=>{cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyOccupant",t,t=>{t.success?(d=t.lotOccupancyOccupants,e(),y()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupant,message:t.errorMessage||"",contextualColorName:"danger"})})},l=e=>{e.preventDefault(),s(t)};let r=[];const i=e=>{e.preventDefault();const t=e.currentTarget,c=r[Number.parseInt(t.dataset.index,10)],a=t.closest(".modal").querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId").value;""===a?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"}):(c.lotOccupantTypeId=Number.parseInt(a,10),c.lotOccupancyId=Number.parseInt(o,10),s(c))},u=e=>{e.preventDefault(),""!==c.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(n.innerHTML='

Searching...
',cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doSearchPastOccupants",c,e=>{r=e.occupants;const t=document.createElement("div");t.className="panel";for(const[e,c]of r.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",i),t.append(a)}n.innerHTML="",n.append(t)})):n.innerHTML='

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

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

There are no comments associated with this record.

');const o=document.createElement("table");o.className="table is-fullwidth is-striped is-hoverable",o.innerHTML='CommentorComment DateCommentOptions';for(const a of e){const e=document.createElement("tr");e.dataset.lotOccupancyCommentId=a.lotOccupancyCommentId.toString(),e.innerHTML=""+cityssm.escapeHTML(a.recordCreate_userName||"")+""+a.lotOccupancyCommentDateString+(0===a.lotOccupancyCommentTime?"":" "+a.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(a.lotOccupancyComment||"")+'
',e.querySelector(".button--edit").addEventListener("click",t),e.querySelector(".button--delete").addEventListener("click",c),o.querySelector("tbody").append(e)}a.innerHTML="",a.append(o)};document.querySelector("#button--addComment").addEventListener("click",()=>{let t,c;const s=o=>{o.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{t.success?(e=t.lotOccupancyComments,c(),n()):bulmaJS.alert({title:"Error Adding Comment",message:t.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addComment",{onshow:e=>{a.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=o},onshown:(e,a)=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",s),c=a},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),n(),Object.defineProperty(exports,"__esModule",{value:!0});let s=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const l=document.querySelector("#container--lotOccupancyFees"),r=()=>{let e=0;for(const t of s)e+=(t.feeAmount+t.taxAmount)*t.quantity;return e},i=e=>{const t=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(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:o,feeId:t},e=>{e.success?(s=e.lotOccupancyFees,u()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},u=()=>{if(0===s.length)return l.innerHTML='

There are no fees associated with this record.

',void O();l.innerHTML='
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
';let e=0,t=0;for(const c of s){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",i),l.querySelector("tbody").append(a),e+=c.feeAmount*c.quantity,t+=c.taxAmount*c.quantity}l.querySelector("#lotOccupancyFees--feeAmountTotal").textContent="$"+e.toFixed(2),l.querySelector("#lotOccupancyFees--taxAmountTotal").textContent="$"+t.toFixed(2),l.querySelector("#lotOccupancyFees--grandTotal").textContent="$"+(e+t).toFixed(2),O()};document.querySelector("#button--addFee").addEventListener("click",()=>{if(hasUnsavedChanges)return void bulmaJS.alert({message:"Please save all unsaved changes before adding fees.",contextualColorName:"warning"});let e,t,c;const n=(e,t=1)=>{cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyFee",{lotOccupancyId:o,feeId:e,quantity:t},e=>{e.success?(s=e.lotOccupancyFees,u(),i()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage||"",contextualColorName:"danger"})})},r=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(),n(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):n(c)},i=()=>{const a=t.value.trim().toLowerCase().split(" ");c.innerHTML="";for(const t of e){const e=document.createElement("div");e.className="container--feeCategory",e.dataset.feeCategoryId=t.feeCategoryId.toString(),e.innerHTML='

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

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

There are no transactions associated with this record.

');p.innerHTML='
Date'+cityssm.escapeHTML(exports.aliases.externalReceiptNumber)+'AmountOptions
Transaction Total
';let e=0;for(const t of d){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",y),p.querySelector("tbody").append(c)}p.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+e.toFixed(2);const t=r();t>e&&p.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(t-e).toFixed(2)+"
")};document.querySelector("#button--addTransaction").addEventListener("click",()=>{let e;const t=t=>{t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,t=>{t.success?(d=t.lotOccupancyTransactions,e(),O()):bulmaJS.confirm({title:"Error Adding Transaction",message:t.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow:e=>{a.populateAliases(e),e.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=o.toString();const t=r(),c=m(),n=e.querySelector("#lotOccupancyTransactionAdd--transactionAmount");n.min=(-1*c).toFixed(2),n.max=Math.max(t-c,0).toFixed(2),n.value=Math.max(t-c,0).toFixed(2)},onshown:(c,a)=>{bulmaJS.toggleHtmlClipped(),e=a,c.querySelector("form").addEventListener("submit",t)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),u()}})(); \ No newline at end of file diff --git a/public/javascripts/main.min.js b/public/javascripts/main.min.js index 307697a2..6545c12d 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"},s=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.toLowerCase()),Lot:cityssm.escapeHTML(exports.aliases.lot),lot:cityssm.escapeHTML(exports.aliases.lot.toLowerCase()),Lots:cityssm.escapeHTML(exports.aliases.lots),lots:cityssm.escapeHTML(exports.aliases.lots.toLowerCase()),Occupancy:cityssm.escapeHTML(exports.aliases.occupancy),occupancy:cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()),Occupancies:cityssm.escapeHTML(exports.aliases.occupancies),occupancies:cityssm.escapeHTML(exports.aliases.occupancies.toLowerCase()),Occupant:cityssm.escapeHTML(exports.aliases.occupant),occupant:cityssm.escapeHTML(exports.aliases.occupant.toLowerCase()),Occupants:cityssm.escapeHTML(exports.aliases.occupants),occupants:cityssm.escapeHTML(exports.aliases.occupants.toLowerCase()),ExternalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber),externalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber.toLowerCase()),OccupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate),occupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate.toLowerCase()),WorkOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate),workOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate.toLowerCase()),WorkOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate),workOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate.toLowerCase())}),a=["red","green","orange","blue","pink","yellow","purple"],o=["bright","light","dark"],c={urlPrefix:document.querySelector("main").dataset.urlPrefix,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:(e,t,s)=>{let a,o=t;for(;!(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:t=>{const s=t.querySelectorAll(".is-unlock-field-button");for(const t of s)t.addEventListener("click",e)},initializeDatePickers:e=>{const s=e.querySelectorAll("input[type='date']");for(const a of s){const s=Object.assign({},t);a.required&&(s.showClearButton=!1),a.min&&(s.minDate=cityssm.dateStringToDate(a.min)),a.max&&(s.maxDate=cityssm.dateStringToDate(a.max));const o=exports.bulmaCalendar.attach(a,s)[0];o.on("save",()=>{a.value=o.value(),a.dispatchEvent(new Event("change"))}),o.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),o.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const c=e.querySelector("#"+o._id),r=c.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+t.color),e.classList.remove("is-text");const l=c.querySelector(".datetimepicker-clear-button");l&&(a.required?l.remove():(l.dataset.tooltip="Clear",l.ariaLabel="Clear",l.innerHTML=''));const i=document.querySelector("label[for='"+a.id+"']");i&&(c.querySelector(".datetimepicker-dummy-input").ariaLabel=i.textContent)}},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}},escapedAliases:s,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:o[t.codePointAt(t.length-2)%o.length]})}};exports.los=c})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{let e=!1;function t(){return e}function s(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()}const a={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"};const o=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.toLowerCase()),Lot:cityssm.escapeHTML(exports.aliases.lot),lot:cityssm.escapeHTML(exports.aliases.lot.toLowerCase()),Lots:cityssm.escapeHTML(exports.aliases.lots),lots:cityssm.escapeHTML(exports.aliases.lots.toLowerCase()),Occupancy:cityssm.escapeHTML(exports.aliases.occupancy),occupancy:cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()),Occupancies:cityssm.escapeHTML(exports.aliases.occupancies),occupancies:cityssm.escapeHTML(exports.aliases.occupancies.toLowerCase()),Occupant:cityssm.escapeHTML(exports.aliases.occupant),occupant:cityssm.escapeHTML(exports.aliases.occupant.toLowerCase()),Occupants:cityssm.escapeHTML(exports.aliases.occupants),occupants:cityssm.escapeHTML(exports.aliases.occupants.toLowerCase()),ExternalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber),externalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber.toLowerCase()),OccupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate),occupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate.toLowerCase()),WorkOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate),workOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate.toLowerCase()),WorkOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate),workOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate.toLowerCase())}),c=["red","green","orange","blue","pink","yellow","purple"],r=["bright","light","dark"];const i={urlPrefix:document.querySelector("main").dataset.urlPrefix,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:function(e,t,s){let a,o=t;for(;!(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:function(e){const t=e.querySelectorAll(".is-unlock-field-button");for(const e of t)e.addEventListener("click",s)},initializeDatePickers:function(e){const t=e.querySelectorAll("input[type='date']");for(const s of t){const t=Object.assign({},a);s.required&&(t.showClearButton=!1),s.min&&(t.minDate=cityssm.dateStringToDate(s.min)),s.max&&(t.maxDate=cityssm.dateStringToDate(s.max));const o=exports.bulmaCalendar.attach(s,t)[0];o.on("save",()=>{s.value=o.value(),s.dispatchEvent(new Event("change"))}),o.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),o.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const c=e.querySelector("#"+o._id),r=c.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+a.color),e.classList.remove("is-text");const i=c.querySelector(".datetimepicker-clear-button");i&&(s.required?i.remove():(i.dataset.tooltip="Clear",i.ariaLabel="Clear",i.innerHTML=''));const n=document.querySelector("label[for='"+s.id+"']");n&&(c.querySelector(".datetimepicker-dummy-input").ariaLabel=n.textContent)}},populateAliases:function(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}},escapedAliases:o,getRandomColor:function(e){let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:c[t.codePointAt(t.length-1)%c.length],luminosity:r[t.codePointAt(t.length-2)%r.length]})},setUnsavedChanges:function(){t()||(e=!0,cityssm.enableNavBlocker())},clearUnsavedChanges:function(){e=!1,cityssm.disableNavBlocker()},hasUnsavedChanges:t};exports.los=i})(); \ No newline at end of file diff --git a/types/globalTypes.d.ts b/types/globalTypes.d.ts index d6517137..1a37316c 100644 --- a/types/globalTypes.d.ts +++ b/types/globalTypes.d.ts @@ -30,4 +30,7 @@ export interface LOS { workOrderCloseDate: string; }; getRandomColor: (seedString: string) => string; + setUnsavedChanges: () => void; + clearUnsavedChanges: () => void; + hasUnsavedChanges: () => boolean; } diff --git a/types/globalTypes.ts b/types/globalTypes.ts index b878403a..b891d603 100644 --- a/types/globalTypes.ts +++ b/types/globalTypes.ts @@ -41,4 +41,8 @@ export interface LOS { }; getRandomColor: (seedString: string) => string; + + setUnsavedChanges: () => void; + clearUnsavedChanges: () => void; + hasUnsavedChanges: () => boolean; }