From d605b5d821665efa7737f0797fdedb84db06c5de Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Thu, 29 Dec 2022 11:36:26 -0500 Subject: [PATCH] break up adminTables --- gulpfile.js | 9 + gulpfile.ts | 14 + public-typescript/adminTables.js | 34 +- public-typescript/adminTables.ts | 1190 ----------------- .../{ => adminTables}/adminTables.d.ts | 0 public-typescript/adminTables/adminTables.js | 18 + public-typescript/adminTables/adminTables.ts | 23 + .../adminTablesLotOccupantTypes.d.ts | 1 + .../adminTablesLotOccupantTypes.js | 262 ++++ .../adminTablesLotOccupantTypes.ts | 366 +++++ .../adminTables/adminTablesLotStatuses.d.ts | 1 + .../adminTables/adminTablesLotStatuses.js | 191 +++ .../adminTables/adminTablesLotStatuses.ts | 279 ++++ .../adminTablesWorkOrderMilestoneTypes.d.ts | 1 + .../adminTablesWorkOrderMilestoneTypes.js | 187 +++ .../adminTablesWorkOrderMilestoneTypes.ts | 284 ++++ .../adminTablesWorkOrderTypes.d.ts | 1 + .../adminTables/adminTablesWorkOrderTypes.js | 186 +++ .../adminTables/adminTablesWorkOrderTypes.ts | 274 ++++ public/javascripts/adminTables.min.js | 2 +- tsconfig.client.json | 6 +- 21 files changed, 2123 insertions(+), 1206 deletions(-) delete mode 100644 public-typescript/adminTables.ts rename public-typescript/{ => adminTables}/adminTables.d.ts (100%) create mode 100644 public-typescript/adminTables/adminTables.js create mode 100644 public-typescript/adminTables/adminTables.ts create mode 100644 public-typescript/adminTables/adminTablesLotOccupantTypes.d.ts create mode 100644 public-typescript/adminTables/adminTablesLotOccupantTypes.js create mode 100644 public-typescript/adminTables/adminTablesLotOccupantTypes.ts create mode 100644 public-typescript/adminTables/adminTablesLotStatuses.d.ts create mode 100644 public-typescript/adminTables/adminTablesLotStatuses.js create mode 100644 public-typescript/adminTables/adminTablesLotStatuses.ts create mode 100644 public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.d.ts create mode 100644 public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.js create mode 100644 public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.ts create mode 100644 public-typescript/adminTables/adminTablesWorkOrderTypes.d.ts create mode 100644 public-typescript/adminTables/adminTablesWorkOrderTypes.js create mode 100644 public-typescript/adminTables/adminTablesWorkOrderTypes.ts diff --git a/gulpfile.js b/gulpfile.js index fdc3e117..fa708571 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -23,6 +23,12 @@ const publicJavascriptsMinFunction = () => { .pipe(minify({ noSource: true, ext: { min: ".min.js" } })) .pipe(gulp.dest(publicJavascriptsDestination)); }; +const publicJavascriptsAdminTablesFunction = () => { + return gulp + .src("public-typescript/adminTables/adminTables.js") + .pipe(include()) + .pipe(gulp.dest("public-typescript")); +}; const publicJavascriptsLotOccupancyEditFunction = () => { return gulp .src("public-typescript/lotOccupancyEdit/lotOccupancyEdit.js") @@ -35,17 +41,20 @@ const publicJavascriptsWorkOrderEditFunction = () => { .pipe(include()) .pipe(gulp.dest("public-typescript")); }; +gulp.task("public-javascript-adminTables", publicJavascriptsAdminTablesFunction); gulp.task("public-javascript-lotOccupancyEdit", publicJavascriptsLotOccupancyEditFunction); gulp.task("public-javascript-workOrderEdit", publicJavascriptsWorkOrderEditFunction); gulp.task("public-javascript-min", publicJavascriptsMinFunction); const watchFunction = () => { gulp.watch("public-scss/*.scss", publicSCSSFunction); + gulp.watch("public-typescript/adminTables/*.js", publicJavascriptsAdminTablesFunction); gulp.watch("public-typescript/lotOccupancyEdit/*.js", publicJavascriptsLotOccupancyEditFunction); gulp.watch("public-typescript/workOrderEdit/*.js", publicJavascriptsWorkOrderEditFunction); gulp.watch("public-typescript/*.js", publicJavascriptsMinFunction); }; gulp.task("watch", watchFunction); gulp.task("default", () => { + publicJavascriptsAdminTablesFunction(); publicJavascriptsLotOccupancyEditFunction(); publicJavascriptsWorkOrderEditFunction(); publicJavascriptsMinFunction(); diff --git a/gulpfile.ts b/gulpfile.ts index ecfab92f..a4ef706b 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -47,6 +47,13 @@ const publicJavascriptsMinFunction = () => { .pipe(gulp.dest(publicJavascriptsDestination)); }; +const publicJavascriptsAdminTablesFunction = () => { + return gulp + .src("public-typescript/adminTables/adminTables.js") + .pipe(include()) + .pipe(gulp.dest("public-typescript")); +}; + const publicJavascriptsLotOccupancyEditFunction = () => { return gulp .src("public-typescript/lotOccupancyEdit/lotOccupancyEdit.js") @@ -61,6 +68,7 @@ const publicJavascriptsWorkOrderEditFunction = () => { .pipe(gulp.dest("public-typescript")); }; +gulp.task("public-javascript-adminTables", publicJavascriptsAdminTablesFunction); gulp.task("public-javascript-lotOccupancyEdit", publicJavascriptsLotOccupancyEditFunction); gulp.task("public-javascript-workOrderEdit", publicJavascriptsWorkOrderEditFunction); gulp.task("public-javascript-min", publicJavascriptsMinFunction); @@ -71,11 +79,16 @@ gulp.task("public-javascript-min", publicJavascriptsMinFunction); const watchFunction = () => { gulp.watch("public-scss/*.scss", publicSCSSFunction); + + gulp.watch("public-typescript/adminTables/*.js", publicJavascriptsAdminTablesFunction); + gulp.watch( "public-typescript/lotOccupancyEdit/*.js", publicJavascriptsLotOccupancyEditFunction ); + gulp.watch("public-typescript/workOrderEdit/*.js", publicJavascriptsWorkOrderEditFunction); + gulp.watch("public-typescript/*.js", publicJavascriptsMinFunction); }; @@ -86,6 +99,7 @@ gulp.task("watch", watchFunction); */ gulp.task("default", () => { + publicJavascriptsAdminTablesFunction(); publicJavascriptsLotOccupancyEditFunction(); publicJavascriptsWorkOrderEditFunction(); publicJavascriptsMinFunction(); diff --git a/public-typescript/adminTables.js b/public-typescript/adminTables.js index 660f9741..c6e4452c 100644 --- a/public-typescript/adminTables.js +++ b/public-typescript/adminTables.js @@ -2,16 +2,18 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ Object.defineProperty(exports, "__esModule", { value: true }); (() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const los = exports.los; + // eslint-disable-next-line @typescript-eslint/no-unused-vars const refreshFontAwesomeIcon = (changeEvent) => { const inputElement = changeEvent.currentTarget; const fontAwesomeIconClass = inputElement.value; inputElement.closest(".field").querySelectorAll(".button.is-static")[1].innerHTML = ''; }; - /* - * Work Order Types - */ + "use strict"; + /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + Object.defineProperty(exports, "__esModule", { value: true }); let workOrderTypes = exports.workOrderTypes; delete exports.workOrderTypes; const updateWorkOrderType = (submitEvent) => { @@ -195,9 +197,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }); renderWorkOrderTypes(); - /* - * Work Order Milestone Types - */ + + "use strict"; + /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + Object.defineProperty(exports, "__esModule", { value: true }); let workOrderMilestoneTypes = exports.workOrderMilestoneTypes; delete exports.workOrderMilestoneTypes; const updateWorkOrderMilestoneType = (submitEvent) => { @@ -382,9 +385,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }); renderWorkOrderMilestoneTypes(); - /* - * Lot Statuses - */ + + "use strict"; + /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + Object.defineProperty(exports, "__esModule", { value: true }); let lotStatuses = exports.lotStatuses; delete exports.lotStatuses; const updateLotStatus = (submitEvent) => { @@ -491,7 +495,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const renderLotStatuses = () => { const containerElement = document.querySelector("#container--lotStatuses"); - if (workOrderTypes.length === 0) { + if (lotStatuses.length === 0) { containerElement.innerHTML = "" + '' + @@ -573,9 +577,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }); renderLotStatuses(); - /* - * Lot Occupant Types - */ + + "use strict"; + /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + Object.defineProperty(exports, "__esModule", { value: true }); let lotOccupantTypes = exports.lotOccupantTypes; delete exports.lotOccupantTypes; const updateLotOccupantType = (submitEvent) => { @@ -710,7 +715,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }; const renderLotOccupantTypes = () => { const containerElement = document.querySelector("#container--lotOccupantTypes"); - if (workOrderTypes.length === 0) { + if (lotOccupantTypes.length === 0) { containerElement.innerHTML = "" + '' + @@ -835,4 +840,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); }); renderLotOccupantTypes(); + })(); diff --git a/public-typescript/adminTables.ts b/public-typescript/adminTables.ts deleted file mode 100644 index c0c579d1..00000000 --- a/public-typescript/adminTables.ts +++ /dev/null @@ -1,1190 +0,0 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ - -import type * as globalTypes from "../types/globalTypes"; -import type * as recordTypes from "../types/recordTypes"; - -import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; - -import type { BulmaJS } from "@cityssm/bulma-js/types"; - -declare const cityssm: cityssmGlobal; -declare const bulmaJS: BulmaJS; - -(() => { - const los = exports.los as globalTypes.LOS; - - const refreshFontAwesomeIcon = (changeEvent: Event) => { - const inputElement = changeEvent.currentTarget as HTMLInputElement; - - const fontAwesomeIconClass = inputElement.value; - - inputElement.closest(".field")!.querySelectorAll(".button.is-static")[1].innerHTML = - ''; - }; - - /* - * Work Order Types - */ - - let workOrderTypes: recordTypes.WorkOrderType[] = exports.workOrderTypes; - delete exports.workOrderTypes; - - const updateWorkOrderType = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - cityssm.postJSON( - los.urlPrefix + "/admin/doUpdateWorkOrderType", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderTypes?: recordTypes.WorkOrderType[]; - }) => { - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes!; - - bulmaJS.alert({ - message: "Work Order Type Updated Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: "Error Updating Work Order Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const deleteWorkOrderType = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - - const doDelete = () => { - cityssm.postJSON( - los.urlPrefix + "/admin/doDeleteWorkOrderType", - { - workOrderTypeId - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderTypes?: recordTypes.WorkOrderType[]; - }) => { - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes!; - - if (workOrderTypes.length === 0) { - renderWorkOrderTypes(); - } else { - tableRowElement.remove(); - } - - bulmaJS.alert({ - message: "Work Order Type Deleted Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: "Error Deleting Work Order Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - bulmaJS.confirm({ - title: "Delete Work Order Type", - message: - "Are you sure you want to delete this work order type?
" + - "Note that no work orders will be removed.", - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: "Yes, Delete Work Order Type", - callbackFunction: doDelete - } - }); - }; - - const moveWorkOrderTypeUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveWorkOrderTypeUp", - { - workOrderTypeId, - moveToTop: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderTypes?: recordTypes.WorkOrderType[]; - }) => { - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes!; - renderWorkOrderTypes(); - } else { - bulmaJS.alert({ - title: "Error Moving Work Order Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const moveWorkOrderTypeDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveWorkOrderTypeDown", - { - workOrderTypeId, - moveToBottom: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderTypes?: recordTypes.WorkOrderType[]; - }) => { - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes!; - renderWorkOrderTypes(); - } else { - bulmaJS.alert({ - title: "Error Moving Work Order Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const renderWorkOrderTypes = () => { - const containerElement = document.querySelector( - "#container--workOrderTypes" - ) as HTMLTableSectionElement; - - if (workOrderTypes.length === 0) { - containerElement.innerHTML = - "" + - '' + - '
' + - '

There are no active work order types.

' + - "
" + - "" + - ""; - - return; - } - - containerElement.innerHTML = ""; - - for (const workOrderType of workOrderTypes) { - const tableRowElement = document.createElement("tr"); - - tableRowElement.dataset.workOrderTypeId = workOrderType.workOrderTypeId!.toString(); - - tableRowElement.innerHTML = - "" + - "
" + - '' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - "" + - '' + - '
' + - '
' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - '
' + - '" + - "
" + - "
" + - ""; - - tableRowElement.querySelector("form")!.addEventListener("submit", updateWorkOrderType); - - ( - tableRowElement.querySelector(".button--moveWorkOrderTypeUp") as HTMLButtonElement - ).addEventListener("click", moveWorkOrderTypeUp); - - ( - tableRowElement.querySelector(".button--moveWorkOrderTypeDown") as HTMLButtonElement - ).addEventListener("click", moveWorkOrderTypeDown); - - ( - tableRowElement.querySelector(".button--deleteWorkOrderType") as HTMLButtonElement - ).addEventListener("click", deleteWorkOrderType); - - containerElement.append(tableRowElement); - } - }; - - (document.querySelector("#form--addWorkOrderType") as HTMLFormElement).addEventListener( - "submit", - (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - const formElement = submitEvent.currentTarget as HTMLFormElement; - - cityssm.postJSON( - los.urlPrefix + "/admin/doAddWorkOrderType", - formElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderTypes?: recordTypes.WorkOrderType[]; - }) => { - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes!; - renderWorkOrderTypes(); - formElement.reset(); - formElement.querySelector("input")!.focus(); - } else { - bulmaJS.alert({ - title: "Error Adding Work Order Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - } - ); - - renderWorkOrderTypes(); - - /* - * Work Order Milestone Types - */ - - let workOrderMilestoneTypes: recordTypes.WorkOrderMilestoneType[] = - exports.workOrderMilestoneTypes; - delete exports.workOrderMilestoneTypes; - - const updateWorkOrderMilestoneType = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - cityssm.postJSON( - los.urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; - }) => { - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; - - bulmaJS.alert({ - message: "Work Order Milestone Type Updated Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: "Error Updating Work Order Milestone Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const deleteWorkOrderMilestoneType = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - - const doDelete = () => { - cityssm.postJSON( - los.urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", - { - workOrderMilestoneTypeId - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; - }) => { - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; - - if (workOrderMilestoneTypes.length === 0) { - renderWorkOrderMilestoneTypes(); - } else { - tableRowElement.remove(); - } - - bulmaJS.alert({ - message: "Work Order Milestone Type Deleted Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: "Error Deleting Work Order Milestone Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - bulmaJS.confirm({ - title: "Delete Work Order Milestone Type", - message: - "Are you sure you want to delete this work order milestone type?
" + - "Note that no work orders will be removed.", - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: "Yes, Delete Work Order Milestone Type", - callbackFunction: doDelete - } - }); - }; - - const moveWorkOrderMilestoneTypeUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", - { - workOrderMilestoneTypeId, - moveToTop: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; - }) => { - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; - renderWorkOrderMilestoneTypes(); - } else { - bulmaJS.alert({ - title: "Error Moving Work Order Milestone Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const moveWorkOrderMilestoneTypeDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", - { - workOrderMilestoneTypeId, - moveToBottom: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; - }) => { - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; - renderWorkOrderMilestoneTypes(); - } else { - bulmaJS.alert({ - title: "Error Moving Work Order Milestone Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const renderWorkOrderMilestoneTypes = () => { - const containerElement = document.querySelector( - "#container--workOrderMilestoneTypes" - ) as HTMLTableSectionElement; - - if (workOrderMilestoneTypes.length === 0) { - containerElement.innerHTML = - "" + - '' + - '
' + - '

There are no active work order milestone types.

' + - "
" + - "" + - ""; - - return; - } - - containerElement.innerHTML = ""; - - for (const workOrderMilestoneType of workOrderMilestoneTypes) { - const tableRowElement = document.createElement("tr"); - - tableRowElement.dataset.workOrderMilestoneTypeId = - workOrderMilestoneType.workOrderMilestoneTypeId.toString(); - - tableRowElement.innerHTML = - "" + - "
" + - '' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - "" + - '' + - '
' + - '
' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - '
' + - '" + - "
" + - "
" + - ""; - - (tableRowElement.querySelector("form") as HTMLFormElement).addEventListener( - "submit", - updateWorkOrderMilestoneType - ); - - ( - tableRowElement.querySelector( - ".button--moveWorkOrderMilestoneTypeUp" - ) as HTMLButtonElement - ).addEventListener("click", moveWorkOrderMilestoneTypeUp); - - ( - tableRowElement.querySelector( - ".button--moveWorkOrderMilestoneTypeDown" - ) as HTMLButtonElement - ).addEventListener("click", moveWorkOrderMilestoneTypeDown); - - ( - tableRowElement.querySelector( - ".button--deleteWorkOrderMilestoneType" - ) as HTMLButtonElement - ).addEventListener("click", deleteWorkOrderMilestoneType); - - containerElement.append(tableRowElement); - } - }; - - ( - document.querySelector("#form--addWorkOrderMilestoneType") as HTMLFormElement - ).addEventListener("submit", (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - const formElement = submitEvent.currentTarget as HTMLFormElement; - - cityssm.postJSON( - los.urlPrefix + "/admin/doAddWorkOrderMilestoneType", - formElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; - }) => { - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; - renderWorkOrderMilestoneTypes(); - formElement.reset(); - formElement.querySelector("input")!.focus(); - } else { - bulmaJS.alert({ - title: "Error Adding Work Order Milestone Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }); - - renderWorkOrderMilestoneTypes(); - - /* - * Lot Statuses - */ - - let lotStatuses: recordTypes.LotStatus[] = exports.lotStatuses; - delete exports.lotStatuses; - - const updateLotStatus = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - cityssm.postJSON( - los.urlPrefix + "/admin/doUpdateLotStatus", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotStatuses?: recordTypes.LotStatus[]; - }) => { - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses!; - - bulmaJS.alert({ - message: exports.aliases.lot + " Status Updated Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: "Error Updating " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const deleteLotStatus = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const lotStatusId = tableRowElement.dataset.lotStatusId; - - const doDelete = () => { - cityssm.postJSON( - los.urlPrefix + "/admin/doDeleteLotStatus", - { - lotStatusId - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotStatuses?: recordTypes.LotStatus[]; - }) => { - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses!; - - if (lotStatuses.length === 0) { - renderLotStatuses(); - } else { - tableRowElement.remove(); - } - - bulmaJS.alert({ - message: exports.aliases.lot + " Status Deleted Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: "Error Deleting " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - bulmaJS.confirm({ - title: "Delete " + exports.aliases.lot + " Status", - message: - "Are you sure you want to delete this status?
" + - "Note that no " + - exports.aliases.lots.toLowerCase() + - " will be removed.", - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: "Yes, Delete Status", - callbackFunction: doDelete - } - }); - }; - - const moveLotStatusUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const lotStatusId = tableRowElement.dataset.lotStatusId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveLotStatusUp", - { - lotStatusId, - moveToTop: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotStatuses?: recordTypes.LotStatus[]; - }) => { - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses!; - renderLotStatuses(); - } else { - bulmaJS.alert({ - title: "Error Moving " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const moveLotStatusDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const lotStatusId = tableRowElement.dataset.lotStatusId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveLotStatusDown", - { - lotStatusId, - moveToBottom: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotStatuses?: recordTypes.LotStatus[]; - }) => { - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses!; - renderLotStatuses(); - } else { - bulmaJS.alert({ - title: "Error Moving " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const renderLotStatuses = () => { - const containerElement = document.querySelector( - "#container--lotStatuses" - ) as HTMLTableSectionElement; - - if (workOrderTypes.length === 0) { - containerElement.innerHTML = - "" + - '' + - '
' + - '

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

" + - "
" + - "" + - ""; - - return; - } - - containerElement.innerHTML = ""; - - for (const lotStatus of lotStatuses) { - const tableRowElement = document.createElement("tr"); - - tableRowElement.dataset.lotStatusId = lotStatus.lotStatusId.toString(); - - tableRowElement.innerHTML = - "" + - "
" + - '' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - "" + - '' + - '
' + - '
' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - '
' + - '" + - "
" + - "
" + - ""; - - tableRowElement.querySelector("form")!.addEventListener("submit", updateLotStatus); - - ( - tableRowElement.querySelector(".button--moveLotStatusUp") as HTMLButtonElement - ).addEventListener("click", moveLotStatusUp); - - ( - tableRowElement.querySelector(".button--moveLotStatusDown") as HTMLButtonElement - ).addEventListener("click", moveLotStatusDown); - - ( - tableRowElement.querySelector(".button--deleteLotStatus") as HTMLButtonElement - ).addEventListener("click", deleteLotStatus); - - containerElement.append(tableRowElement); - } - }; - - (document.querySelector("#form--addLotStatus") as HTMLFormElement).addEventListener( - "submit", - (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - const formElement = submitEvent.currentTarget as HTMLFormElement; - - cityssm.postJSON( - los.urlPrefix + "/admin/doAddLotStatus", - formElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotStatuses?: recordTypes.LotStatus[]; - }) => { - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses!; - renderLotStatuses(); - formElement.reset(); - formElement.querySelector("input")!.focus(); - } else { - bulmaJS.alert({ - title: "Error Adding " + exports.aliases.lot + " Status", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - } - ); - - renderLotStatuses(); - - /* - * Lot Occupant Types - */ - - let lotOccupantTypes: recordTypes.LotOccupantType[] = exports.lotOccupantTypes; - delete exports.lotOccupantTypes; - - const updateLotOccupantType = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - cityssm.postJSON( - los.urlPrefix + "/admin/doUpdateLotOccupantType", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupantTypes?: recordTypes.LotOccupantType[]; - }) => { - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes!; - - bulmaJS.alert({ - message: - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type Updated Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: - "Error Updating " + - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const deleteLotOccupantType = (clickEvent: Event) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - - const doDelete = () => { - cityssm.postJSON( - los.urlPrefix + "/admin/doDeleteLotOccupantType", - { - lotOccupantTypeId - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupantTypes?: recordTypes.LotOccupantType[]; - }) => { - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes!; - - if (lotOccupantTypes.length === 0) { - renderLotOccupantTypes(); - } else { - tableRowElement.remove(); - } - - bulmaJS.alert({ - message: - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type Deleted Successfully", - contextualColorName: "success" - }); - } else { - bulmaJS.alert({ - title: - "Error Deleting " + - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - bulmaJS.confirm({ - title: "Delete " + exports.aliases.lot + " " + exports.aliases.occupant + " Type", - message: - "Are you sure you want to delete this " + - exports.aliases.lot.toLowerCase() + - " " + - exports.aliases.occupant.toLowerCase() + - " type?
" + - "Note that no " + - exports.aliases.lot.toLowerCase() + - " " + - exports.aliases.occupancy.toLowerCase() + - " will be removed.", - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: - "Yes, Delete " + exports.aliases.lot + " " + exports.aliases.occupant + " Type", - callbackFunction: doDelete - } - }); - }; - - const moveLotOccupantTypeUp = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveLotOccupantTypeUp", - { - lotOccupantTypeId, - moveToTop: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupantTypes?: recordTypes.LotOccupantType[]; - }) => { - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes!; - renderLotOccupantTypes(); - } else { - bulmaJS.alert({ - title: - "Error Moving " + - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const moveLotOccupantTypeDown = (clickEvent: MouseEvent) => { - const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; - - const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - - cityssm.postJSON( - los.urlPrefix + "/admin/doMoveLotOccupantTypeDown", - { - lotOccupantTypeId, - moveToBottom: clickEvent.shiftKey ? "1" : "0" - }, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupantTypes?: recordTypes.LotOccupantType[]; - }) => { - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes!; - renderLotOccupantTypes(); - } else { - bulmaJS.alert({ - title: - "Error Moving " + - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; - - const renderLotOccupantTypes = () => { - const containerElement = document.querySelector( - "#container--lotOccupantTypes" - ) as HTMLTableSectionElement; - - if (workOrderTypes.length === 0) { - containerElement.innerHTML = - "" + - '' + - '
' + - '

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

" + - "
" + - "" + - ""; - - return; - } - - containerElement.innerHTML = ""; - - for (const lotOccupantType of lotOccupantTypes) { - const tableRowElement = document.createElement("tr"); - - tableRowElement.dataset.lotOccupantTypeId = - lotOccupantType.lotOccupantTypeId.toString(); - - const formId = "form--lotOccupantType-" + lotOccupantType.lotOccupantTypeId; - - tableRowElement.innerHTML = - "" + - ('
' + - '
' + - '' + - "
" + - "
") + - "" + - "" + - ('
' + - '
fa-
' + - '
' + - '' + - "
" + - '
' + - '
' + - "
") + - "" + - ("" + - ('
') + - '" + - '' + - "
" + - "") + - '' + - '
' + - '
' + - ('
' + - '
' + - '' + - "
" + - '
' + - '' + - "
" + - "
") + - "
" + - '
' + - '" + - "
" + - "
" + - ""; - - const fontAwesomeInputElement = tableRowElement.querySelector( - "input[name='fontAwesomeIconClass']" - )!; - - fontAwesomeInputElement.addEventListener("keyup", refreshFontAwesomeIcon); - fontAwesomeInputElement.addEventListener("change", refreshFontAwesomeIcon); - - tableRowElement - .querySelector("form")! - .addEventListener("submit", updateLotOccupantType); - - ( - tableRowElement.querySelector(".button--moveLotOccupantTypeUp") as HTMLButtonElement - ).addEventListener("click", moveLotOccupantTypeUp); - - ( - tableRowElement.querySelector( - ".button--moveLotOccupantTypeDown" - ) as HTMLButtonElement - ).addEventListener("click", moveLotOccupantTypeDown); - - ( - tableRowElement.querySelector(".button--deleteLotOccupantType") as HTMLButtonElement - ).addEventListener("click", deleteLotOccupantType); - - containerElement.append(tableRowElement); - } - }; - - (document.querySelector("#form--addLotOccupantType") as HTMLFormElement).addEventListener( - "submit", - (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - const formElement = submitEvent.currentTarget as HTMLFormElement; - - cityssm.postJSON( - los.urlPrefix + "/admin/doAddLotOccupantType", - formElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - lotOccupantTypes?: recordTypes.LotOccupantType[]; - }) => { - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes!; - renderLotOccupantTypes(); - formElement.reset(); - formElement.querySelector("input")!.focus(); - } else { - bulmaJS.alert({ - title: - "Error Adding " + - exports.aliases.lot + - " " + - exports.aliases.occupant + - " Type", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - } - ); - - renderLotOccupantTypes(); -})(); diff --git a/public-typescript/adminTables.d.ts b/public-typescript/adminTables/adminTables.d.ts similarity index 100% rename from public-typescript/adminTables.d.ts rename to public-typescript/adminTables/adminTables.d.ts diff --git a/public-typescript/adminTables/adminTables.js b/public-typescript/adminTables/adminTables.js new file mode 100644 index 00000000..67c024f4 --- /dev/null +++ b/public-typescript/adminTables/adminTables.js @@ -0,0 +1,18 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ +Object.defineProperty(exports, "__esModule", { value: true }); +(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const los = exports.los; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const refreshFontAwesomeIcon = (changeEvent) => { + const inputElement = changeEvent.currentTarget; + const fontAwesomeIconClass = inputElement.value; + inputElement.closest(".field").querySelectorAll(".button.is-static")[1].innerHTML = + ''; + }; + //=include adminTablesWorkOrderTypes.js + //=include adminTablesWorkOrderMilestoneTypes.js + //=include adminTablesLotStatuses.js + //=include adminTablesLotOccupantTypes.js +})(); diff --git a/public-typescript/adminTables/adminTables.ts b/public-typescript/adminTables/adminTables.ts new file mode 100644 index 00000000..813284db --- /dev/null +++ b/public-typescript/adminTables/adminTables.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../../types/globalTypes"; + +(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const los = exports.los as globalTypes.LOS; + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const refreshFontAwesomeIcon = (changeEvent: Event) => { + const inputElement = changeEvent.currentTarget as HTMLInputElement; + + const fontAwesomeIconClass = inputElement.value; + + inputElement.closest(".field")!.querySelectorAll(".button.is-static")[1].innerHTML = + ''; + }; + + //=include adminTablesWorkOrderTypes.js + //=include adminTablesWorkOrderMilestoneTypes.js + //=include adminTablesLotStatuses.js + //=include adminTablesLotOccupantTypes.js +})(); diff --git a/public-typescript/adminTables/adminTablesLotOccupantTypes.d.ts b/public-typescript/adminTables/adminTablesLotOccupantTypes.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/adminTables/adminTablesLotOccupantTypes.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/adminTables/adminTablesLotOccupantTypes.js b/public-typescript/adminTables/adminTablesLotOccupantTypes.js new file mode 100644 index 00000000..9175966f --- /dev/null +++ b/public-typescript/adminTables/adminTablesLotOccupantTypes.js @@ -0,0 +1,262 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ +Object.defineProperty(exports, "__esModule", { value: true }); +let lotOccupantTypes = exports.lotOccupantTypes; +delete exports.lotOccupantTypes; +const updateLotOccupantType = (submitEvent) => { + submitEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateLotOccupantType", submitEvent.currentTarget, (responseJSON) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes; + bulmaJS.alert({ + message: exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type Updated Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Updating " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const deleteLotOccupantType = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; + const doDelete = () => { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteLotOccupantType", { + lotOccupantTypeId + }, (responseJSON) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes; + if (lotOccupantTypes.length === 0) { + renderLotOccupantTypes(); + } + else { + tableRowElement.remove(); + } + bulmaJS.alert({ + message: exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type Deleted Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Deleting " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + }; + bulmaJS.confirm({ + title: "Delete " + exports.aliases.lot + " " + exports.aliases.occupant + " Type", + message: "Are you sure you want to delete this " + + exports.aliases.lot.toLowerCase() + + " " + + exports.aliases.occupant.toLowerCase() + + " type?
" + + "Note that no " + + exports.aliases.lot.toLowerCase() + + " " + + exports.aliases.occupancy.toLowerCase() + + " will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete " + exports.aliases.lot + " " + exports.aliases.occupant + " Type", + callbackFunction: doDelete + } + }); +}; +const moveLotOccupantTypeUp = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotOccupantTypeUp", { + lotOccupantTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes; + renderLotOccupantTypes(); + } + else { + bulmaJS.alert({ + title: "Error Moving " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const moveLotOccupantTypeDown = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotOccupantTypeDown", { + lotOccupantTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes; + renderLotOccupantTypes(); + } + else { + bulmaJS.alert({ + title: "Error Moving " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const renderLotOccupantTypes = () => { + const containerElement = document.querySelector("#container--lotOccupantTypes"); + if (lotOccupantTypes.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

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

" + + "
" + + "" + + ""; + return; + } + containerElement.innerHTML = ""; + for (const lotOccupantType of lotOccupantTypes) { + const tableRowElement = document.createElement("tr"); + tableRowElement.dataset.lotOccupantTypeId = + lotOccupantType.lotOccupantTypeId.toString(); + const formId = "form--lotOccupantType-" + lotOccupantType.lotOccupantTypeId; + tableRowElement.innerHTML = + "" + + ('
' + + '
' + + '' + + "
" + + "
") + + "" + + "" + + ('
' + + '
fa-
' + + '
' + + '' + + "
" + + '
' + + '
' + + "
") + + "" + + ("" + + ('
') + + '" + + '' + + "
" + + "") + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + const fontAwesomeInputElement = tableRowElement.querySelector("input[name='fontAwesomeIconClass']"); + fontAwesomeInputElement.addEventListener("keyup", refreshFontAwesomeIcon); + fontAwesomeInputElement.addEventListener("change", refreshFontAwesomeIcon); + tableRowElement + .querySelector("form") + .addEventListener("submit", updateLotOccupantType); + tableRowElement.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click", moveLotOccupantTypeUp); + tableRowElement.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click", moveLotOccupantTypeDown); + tableRowElement.querySelector(".button--deleteLotOccupantType").addEventListener("click", deleteLotOccupantType); + containerElement.append(tableRowElement); + } +}; +document.querySelector("#form--addLotOccupantType").addEventListener("submit", (submitEvent) => { + submitEvent.preventDefault(); + const formElement = submitEvent.currentTarget; + cityssm.postJSON(los.urlPrefix + "/admin/doAddLotOccupantType", formElement, (responseJSON) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes; + renderLotOccupantTypes(); + formElement.reset(); + formElement.querySelector("input").focus(); + } + else { + bulmaJS.alert({ + title: "Error Adding " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}); +renderLotOccupantTypes(); diff --git a/public-typescript/adminTables/adminTablesLotOccupantTypes.ts b/public-typescript/adminTables/adminTablesLotOccupantTypes.ts new file mode 100644 index 00000000..3bdd11ba --- /dev/null +++ b/public-typescript/adminTables/adminTablesLotOccupantTypes.ts @@ -0,0 +1,366 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../../types/globalTypes"; +import type * as recordTypes from "../../types/recordTypes"; + +import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; + +import type { BulmaJS } from "@cityssm/bulma-js/types"; + +declare const cityssm: cityssmGlobal; +declare const bulmaJS: BulmaJS; + +declare const los: globalTypes.LOS; +declare const refreshFontAwesomeIcon: (changeEvent: Event) => void; + +let lotOccupantTypes: recordTypes.LotOccupantType[] = exports.lotOccupantTypes; +delete exports.lotOccupantTypes; + +const updateLotOccupantType = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + cityssm.postJSON( + los.urlPrefix + "/admin/doUpdateLotOccupantType", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupantTypes?: recordTypes.LotOccupantType[]; + }) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes!; + + bulmaJS.alert({ + message: + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type Updated Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: + "Error Updating " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const deleteLotOccupantType = (clickEvent: Event) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; + + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/admin/doDeleteLotOccupantType", + { + lotOccupantTypeId + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupantTypes?: recordTypes.LotOccupantType[]; + }) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes!; + + if (lotOccupantTypes.length === 0) { + renderLotOccupantTypes(); + } else { + tableRowElement.remove(); + } + + bulmaJS.alert({ + message: + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type Deleted Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: + "Error Deleting " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + }; + + bulmaJS.confirm({ + title: "Delete " + exports.aliases.lot + " " + exports.aliases.occupant + " Type", + message: + "Are you sure you want to delete this " + + exports.aliases.lot.toLowerCase() + + " " + + exports.aliases.occupant.toLowerCase() + + " type?
" + + "Note that no " + + exports.aliases.lot.toLowerCase() + + " " + + exports.aliases.occupancy.toLowerCase() + + " will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: + "Yes, Delete " + exports.aliases.lot + " " + exports.aliases.occupant + " Type", + callbackFunction: doDelete + } + }); +}; + +const moveLotOccupantTypeUp = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveLotOccupantTypeUp", + { + lotOccupantTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupantTypes?: recordTypes.LotOccupantType[]; + }) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes!; + renderLotOccupantTypes(); + } else { + bulmaJS.alert({ + title: + "Error Moving " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const moveLotOccupantTypeDown = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveLotOccupantTypeDown", + { + lotOccupantTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupantTypes?: recordTypes.LotOccupantType[]; + }) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes!; + renderLotOccupantTypes(); + } else { + bulmaJS.alert({ + title: + "Error Moving " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const renderLotOccupantTypes = () => { + const containerElement = document.querySelector( + "#container--lotOccupantTypes" + ) as HTMLTableSectionElement; + + if (lotOccupantTypes.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

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

" + + "
" + + "" + + ""; + + return; + } + + containerElement.innerHTML = ""; + + for (const lotOccupantType of lotOccupantTypes) { + const tableRowElement = document.createElement("tr"); + + tableRowElement.dataset.lotOccupantTypeId = + lotOccupantType.lotOccupantTypeId.toString(); + + const formId = "form--lotOccupantType-" + lotOccupantType.lotOccupantTypeId; + + tableRowElement.innerHTML = + "" + + ('
' + + '
' + + '' + + "
" + + "
") + + "" + + "" + + ('
' + + '
fa-
' + + '
' + + '' + + "
" + + '
' + + '
' + + "
") + + "" + + ("" + + ('
') + + '" + + '' + + "
" + + "") + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + + const fontAwesomeInputElement = tableRowElement.querySelector( + "input[name='fontAwesomeIconClass']" + )!; + + fontAwesomeInputElement.addEventListener("keyup", refreshFontAwesomeIcon); + fontAwesomeInputElement.addEventListener("change", refreshFontAwesomeIcon); + + tableRowElement + .querySelector("form")! + .addEventListener("submit", updateLotOccupantType); + + ( + tableRowElement.querySelector(".button--moveLotOccupantTypeUp") as HTMLButtonElement + ).addEventListener("click", moveLotOccupantTypeUp); + + ( + tableRowElement.querySelector( + ".button--moveLotOccupantTypeDown" + ) as HTMLButtonElement + ).addEventListener("click", moveLotOccupantTypeDown); + + ( + tableRowElement.querySelector(".button--deleteLotOccupantType") as HTMLButtonElement + ).addEventListener("click", deleteLotOccupantType); + + containerElement.append(tableRowElement); + } +}; + +(document.querySelector("#form--addLotOccupantType") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + const formElement = submitEvent.currentTarget as HTMLFormElement; + + cityssm.postJSON( + los.urlPrefix + "/admin/doAddLotOccupantType", + formElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotOccupantTypes?: recordTypes.LotOccupantType[]; + }) => { + if (responseJSON.success) { + lotOccupantTypes = responseJSON.lotOccupantTypes!; + renderLotOccupantTypes(); + formElement.reset(); + formElement.querySelector("input")!.focus(); + } else { + bulmaJS.alert({ + title: + "Error Adding " + + exports.aliases.lot + + " " + + exports.aliases.occupant + + " Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + } +); + +renderLotOccupantTypes(); \ No newline at end of file diff --git a/public-typescript/adminTables/adminTablesLotStatuses.d.ts b/public-typescript/adminTables/adminTablesLotStatuses.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/adminTables/adminTablesLotStatuses.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/adminTables/adminTablesLotStatuses.js b/public-typescript/adminTables/adminTablesLotStatuses.js new file mode 100644 index 00000000..3ea31d4d --- /dev/null +++ b/public-typescript/adminTables/adminTablesLotStatuses.js @@ -0,0 +1,191 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ +Object.defineProperty(exports, "__esModule", { value: true }); +let lotStatuses = exports.lotStatuses; +delete exports.lotStatuses; +const updateLotStatus = (submitEvent) => { + submitEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses; + bulmaJS.alert({ + message: exports.aliases.lot + " Status Updated Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Updating " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const deleteLotStatus = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const lotStatusId = tableRowElement.dataset.lotStatusId; + const doDelete = () => { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteLotStatus", { + lotStatusId + }, (responseJSON) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses; + if (lotStatuses.length === 0) { + renderLotStatuses(); + } + else { + tableRowElement.remove(); + } + bulmaJS.alert({ + message: exports.aliases.lot + " Status Deleted Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Deleting " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + }; + bulmaJS.confirm({ + title: "Delete " + exports.aliases.lot + " Status", + message: "Are you sure you want to delete this status?
" + + "Note that no " + + exports.aliases.lots.toLowerCase() + + " will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Status", + callbackFunction: doDelete + } + }); +}; +const moveLotStatusUp = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const lotStatusId = tableRowElement.dataset.lotStatusId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotStatusUp", { + lotStatusId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses; + renderLotStatuses(); + } + else { + bulmaJS.alert({ + title: "Error Moving " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const moveLotStatusDown = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const lotStatusId = tableRowElement.dataset.lotStatusId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveLotStatusDown", { + lotStatusId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses; + renderLotStatuses(); + } + else { + bulmaJS.alert({ + title: "Error Moving " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const renderLotStatuses = () => { + const containerElement = document.querySelector("#container--lotStatuses"); + if (lotStatuses.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

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

" + + "
" + + "" + + ""; + return; + } + containerElement.innerHTML = ""; + for (const lotStatus of lotStatuses) { + const tableRowElement = document.createElement("tr"); + tableRowElement.dataset.lotStatusId = lotStatus.lotStatusId.toString(); + tableRowElement.innerHTML = + "" + + "
" + + '' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + "" + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + tableRowElement.querySelector("form").addEventListener("submit", updateLotStatus); + tableRowElement.querySelector(".button--moveLotStatusUp").addEventListener("click", moveLotStatusUp); + tableRowElement.querySelector(".button--moveLotStatusDown").addEventListener("click", moveLotStatusDown); + tableRowElement.querySelector(".button--deleteLotStatus").addEventListener("click", deleteLotStatus); + containerElement.append(tableRowElement); + } +}; +document.querySelector("#form--addLotStatus").addEventListener("submit", (submitEvent) => { + submitEvent.preventDefault(); + const formElement = submitEvent.currentTarget; + cityssm.postJSON(los.urlPrefix + "/admin/doAddLotStatus", formElement, (responseJSON) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses; + renderLotStatuses(); + formElement.reset(); + formElement.querySelector("input").focus(); + } + else { + bulmaJS.alert({ + title: "Error Adding " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}); +renderLotStatuses(); diff --git a/public-typescript/adminTables/adminTablesLotStatuses.ts b/public-typescript/adminTables/adminTablesLotStatuses.ts new file mode 100644 index 00000000..6c30fe1a --- /dev/null +++ b/public-typescript/adminTables/adminTablesLotStatuses.ts @@ -0,0 +1,279 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../../types/globalTypes"; +import type * as recordTypes from "../../types/recordTypes"; + +import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; + +import type { BulmaJS } from "@cityssm/bulma-js/types"; + +declare const cityssm: cityssmGlobal; +declare const bulmaJS: BulmaJS; + +declare const los: globalTypes.LOS; + +let lotStatuses: recordTypes.LotStatus[] = exports.lotStatuses; +delete exports.lotStatuses; + +const updateLotStatus = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + cityssm.postJSON( + los.urlPrefix + "/admin/doUpdateLotStatus", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotStatuses?: recordTypes.LotStatus[]; + }) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses!; + + bulmaJS.alert({ + message: exports.aliases.lot + " Status Updated Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: "Error Updating " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const deleteLotStatus = (clickEvent: Event) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const lotStatusId = tableRowElement.dataset.lotStatusId; + + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/admin/doDeleteLotStatus", + { + lotStatusId + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotStatuses?: recordTypes.LotStatus[]; + }) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses!; + + if (lotStatuses.length === 0) { + renderLotStatuses(); + } else { + tableRowElement.remove(); + } + + bulmaJS.alert({ + message: exports.aliases.lot + " Status Deleted Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: "Error Deleting " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + }; + + bulmaJS.confirm({ + title: "Delete " + exports.aliases.lot + " Status", + message: + "Are you sure you want to delete this status?
" + + "Note that no " + + exports.aliases.lots.toLowerCase() + + " will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Status", + callbackFunction: doDelete + } + }); +}; + +const moveLotStatusUp = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const lotStatusId = tableRowElement.dataset.lotStatusId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveLotStatusUp", + { + lotStatusId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotStatuses?: recordTypes.LotStatus[]; + }) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses!; + renderLotStatuses(); + } else { + bulmaJS.alert({ + title: "Error Moving " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const moveLotStatusDown = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const lotStatusId = tableRowElement.dataset.lotStatusId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveLotStatusDown", + { + lotStatusId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotStatuses?: recordTypes.LotStatus[]; + }) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses!; + renderLotStatuses(); + } else { + bulmaJS.alert({ + title: "Error Moving " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const renderLotStatuses = () => { + const containerElement = document.querySelector( + "#container--lotStatuses" + ) as HTMLTableSectionElement; + + if (lotStatuses.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

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

" + + "
" + + "" + + ""; + + return; + } + + containerElement.innerHTML = ""; + + for (const lotStatus of lotStatuses) { + const tableRowElement = document.createElement("tr"); + + tableRowElement.dataset.lotStatusId = lotStatus.lotStatusId.toString(); + + tableRowElement.innerHTML = + "" + + "
" + + '' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + "" + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + + tableRowElement.querySelector("form")!.addEventListener("submit", updateLotStatus); + + ( + tableRowElement.querySelector(".button--moveLotStatusUp") as HTMLButtonElement + ).addEventListener("click", moveLotStatusUp); + + ( + tableRowElement.querySelector(".button--moveLotStatusDown") as HTMLButtonElement + ).addEventListener("click", moveLotStatusDown); + + ( + tableRowElement.querySelector(".button--deleteLotStatus") as HTMLButtonElement + ).addEventListener("click", deleteLotStatus); + + containerElement.append(tableRowElement); + } +}; + +(document.querySelector("#form--addLotStatus") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + const formElement = submitEvent.currentTarget as HTMLFormElement; + + cityssm.postJSON( + los.urlPrefix + "/admin/doAddLotStatus", + formElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + lotStatuses?: recordTypes.LotStatus[]; + }) => { + if (responseJSON.success) { + lotStatuses = responseJSON.lotStatuses!; + renderLotStatuses(); + formElement.reset(); + formElement.querySelector("input")!.focus(); + } else { + bulmaJS.alert({ + title: "Error Adding " + exports.aliases.lot + " Status", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + } +); + +renderLotStatuses(); diff --git a/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.d.ts b/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.js b/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.js new file mode 100644 index 00000000..7d9f1bea --- /dev/null +++ b/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.js @@ -0,0 +1,187 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ +Object.defineProperty(exports, "__esModule", { value: true }); +let workOrderMilestoneTypes = exports.workOrderMilestoneTypes; +delete exports.workOrderMilestoneTypes; +const updateWorkOrderMilestoneType = (submitEvent) => { + submitEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", submitEvent.currentTarget, (responseJSON) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + bulmaJS.alert({ + message: "Work Order Milestone Type Updated Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Updating Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const deleteWorkOrderMilestoneType = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; + const doDelete = () => { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", { + workOrderMilestoneTypeId + }, (responseJSON) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + if (workOrderMilestoneTypes.length === 0) { + renderWorkOrderMilestoneTypes(); + } + else { + tableRowElement.remove(); + } + bulmaJS.alert({ + message: "Work Order Milestone Type Deleted Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Deleting Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + }; + bulmaJS.confirm({ + title: "Delete Work Order Milestone Type", + message: "Are you sure you want to delete this work order milestone type?
" + + "Note that no work orders will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Work Order Milestone Type", + callbackFunction: doDelete + } + }); +}; +const moveWorkOrderMilestoneTypeUp = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", { + workOrderMilestoneTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + renderWorkOrderMilestoneTypes(); + } + else { + bulmaJS.alert({ + title: "Error Moving Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const moveWorkOrderMilestoneTypeDown = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", { + workOrderMilestoneTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + renderWorkOrderMilestoneTypes(); + } + else { + bulmaJS.alert({ + title: "Error Moving Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const renderWorkOrderMilestoneTypes = () => { + const containerElement = document.querySelector("#container--workOrderMilestoneTypes"); + if (workOrderMilestoneTypes.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

There are no active work order milestone types.

' + + "
" + + "" + + ""; + return; + } + containerElement.innerHTML = ""; + for (const workOrderMilestoneType of workOrderMilestoneTypes) { + const tableRowElement = document.createElement("tr"); + tableRowElement.dataset.workOrderMilestoneTypeId = + workOrderMilestoneType.workOrderMilestoneTypeId.toString(); + tableRowElement.innerHTML = + "" + + "
" + + '' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + "" + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + tableRowElement.querySelector("form").addEventListener("submit", updateWorkOrderMilestoneType); + tableRowElement.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click", moveWorkOrderMilestoneTypeUp); + tableRowElement.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click", moveWorkOrderMilestoneTypeDown); + tableRowElement.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click", deleteWorkOrderMilestoneType); + containerElement.append(tableRowElement); + } +}; +document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit", (submitEvent) => { + submitEvent.preventDefault(); + const formElement = submitEvent.currentTarget; + cityssm.postJSON(los.urlPrefix + "/admin/doAddWorkOrderMilestoneType", formElement, (responseJSON) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; + renderWorkOrderMilestoneTypes(); + formElement.reset(); + formElement.querySelector("input").focus(); + } + else { + bulmaJS.alert({ + title: "Error Adding Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}); +renderWorkOrderMilestoneTypes(); diff --git a/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.ts b/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.ts new file mode 100644 index 00000000..88cc8bb6 --- /dev/null +++ b/public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.ts @@ -0,0 +1,284 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../../types/globalTypes"; +import type * as recordTypes from "../../types/recordTypes"; + +import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; + +import type { BulmaJS } from "@cityssm/bulma-js/types"; + +declare const cityssm: cityssmGlobal; +declare const bulmaJS: BulmaJS; + +declare const los: globalTypes.LOS; + +let workOrderMilestoneTypes: recordTypes.WorkOrderMilestoneType[] = exports.workOrderMilestoneTypes; +delete exports.workOrderMilestoneTypes; + +const updateWorkOrderMilestoneType = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + cityssm.postJSON( + los.urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; + }) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; + + bulmaJS.alert({ + message: "Work Order Milestone Type Updated Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: "Error Updating Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const deleteWorkOrderMilestoneType = (clickEvent: Event) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; + + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", + { + workOrderMilestoneTypeId + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; + }) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; + + if (workOrderMilestoneTypes.length === 0) { + renderWorkOrderMilestoneTypes(); + } else { + tableRowElement.remove(); + } + + bulmaJS.alert({ + message: "Work Order Milestone Type Deleted Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: "Error Deleting Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + }; + + bulmaJS.confirm({ + title: "Delete Work Order Milestone Type", + message: + "Are you sure you want to delete this work order milestone type?
" + + "Note that no work orders will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Work Order Milestone Type", + callbackFunction: doDelete + } + }); +}; + +const moveWorkOrderMilestoneTypeUp = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", + { + workOrderMilestoneTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; + }) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; + renderWorkOrderMilestoneTypes(); + } else { + bulmaJS.alert({ + title: "Error Moving Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const moveWorkOrderMilestoneTypeDown = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", + { + workOrderMilestoneTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; + }) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; + renderWorkOrderMilestoneTypes(); + } else { + bulmaJS.alert({ + title: "Error Moving Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const renderWorkOrderMilestoneTypes = () => { + const containerElement = document.querySelector( + "#container--workOrderMilestoneTypes" + ) as HTMLTableSectionElement; + + if (workOrderMilestoneTypes.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

There are no active work order milestone types.

' + + "
" + + "" + + ""; + + return; + } + + containerElement.innerHTML = ""; + + for (const workOrderMilestoneType of workOrderMilestoneTypes) { + const tableRowElement = document.createElement("tr"); + + tableRowElement.dataset.workOrderMilestoneTypeId = + workOrderMilestoneType.workOrderMilestoneTypeId.toString(); + + tableRowElement.innerHTML = + "" + + "
" + + '' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + "" + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + + (tableRowElement.querySelector("form") as HTMLFormElement).addEventListener( + "submit", + updateWorkOrderMilestoneType + ); + + ( + tableRowElement.querySelector( + ".button--moveWorkOrderMilestoneTypeUp" + ) as HTMLButtonElement + ).addEventListener("click", moveWorkOrderMilestoneTypeUp); + + ( + tableRowElement.querySelector( + ".button--moveWorkOrderMilestoneTypeDown" + ) as HTMLButtonElement + ).addEventListener("click", moveWorkOrderMilestoneTypeDown); + + ( + tableRowElement.querySelector( + ".button--deleteWorkOrderMilestoneType" + ) as HTMLButtonElement + ).addEventListener("click", deleteWorkOrderMilestoneType); + + containerElement.append(tableRowElement); + } +}; + +(document.querySelector("#form--addWorkOrderMilestoneType") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + const formElement = submitEvent.currentTarget as HTMLFormElement; + + cityssm.postJSON( + los.urlPrefix + "/admin/doAddWorkOrderMilestoneType", + formElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestoneTypes?: recordTypes.WorkOrderMilestoneType[]; + }) => { + if (responseJSON.success) { + workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes!; + renderWorkOrderMilestoneTypes(); + formElement.reset(); + formElement.querySelector("input")!.focus(); + } else { + bulmaJS.alert({ + title: "Error Adding Work Order Milestone Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + } +); + +renderWorkOrderMilestoneTypes(); diff --git a/public-typescript/adminTables/adminTablesWorkOrderTypes.d.ts b/public-typescript/adminTables/adminTablesWorkOrderTypes.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/adminTables/adminTablesWorkOrderTypes.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/adminTables/adminTablesWorkOrderTypes.js b/public-typescript/adminTables/adminTablesWorkOrderTypes.js new file mode 100644 index 00000000..fbbfec3c --- /dev/null +++ b/public-typescript/adminTables/adminTablesWorkOrderTypes.js @@ -0,0 +1,186 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ +Object.defineProperty(exports, "__esModule", { value: true }); +let workOrderTypes = exports.workOrderTypes; +delete exports.workOrderTypes; +const updateWorkOrderType = (submitEvent) => { + submitEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + "/admin/doUpdateWorkOrderType", submitEvent.currentTarget, (responseJSON) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes; + bulmaJS.alert({ + message: "Work Order Type Updated Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Updating Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const deleteWorkOrderType = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; + const doDelete = () => { + cityssm.postJSON(los.urlPrefix + "/admin/doDeleteWorkOrderType", { + workOrderTypeId + }, (responseJSON) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes; + if (workOrderTypes.length === 0) { + renderWorkOrderTypes(); + } + else { + tableRowElement.remove(); + } + bulmaJS.alert({ + message: "Work Order Type Deleted Successfully", + contextualColorName: "success" + }); + } + else { + bulmaJS.alert({ + title: "Error Deleting Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + }; + bulmaJS.confirm({ + title: "Delete Work Order Type", + message: "Are you sure you want to delete this work order type?
" + + "Note that no work orders will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Work Order Type", + callbackFunction: doDelete + } + }); +}; +const moveWorkOrderTypeUp = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderTypeUp", { + workOrderTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes; + renderWorkOrderTypes(); + } + else { + bulmaJS.alert({ + title: "Error Moving Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const moveWorkOrderTypeDown = (clickEvent) => { + const tableRowElement = clickEvent.currentTarget.closest("tr"); + const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; + cityssm.postJSON(los.urlPrefix + "/admin/doMoveWorkOrderTypeDown", { + workOrderTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, (responseJSON) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes; + renderWorkOrderTypes(); + } + else { + bulmaJS.alert({ + title: "Error Moving Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}; +const renderWorkOrderTypes = () => { + const containerElement = document.querySelector("#container--workOrderTypes"); + if (workOrderTypes.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

There are no active work order types.

' + + "
" + + "" + + ""; + return; + } + containerElement.innerHTML = ""; + for (const workOrderType of workOrderTypes) { + const tableRowElement = document.createElement("tr"); + tableRowElement.dataset.workOrderTypeId = workOrderType.workOrderTypeId.toString(); + tableRowElement.innerHTML = + "" + + "
" + + '' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + "" + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + tableRowElement.querySelector("form").addEventListener("submit", updateWorkOrderType); + tableRowElement.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click", moveWorkOrderTypeUp); + tableRowElement.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click", moveWorkOrderTypeDown); + tableRowElement.querySelector(".button--deleteWorkOrderType").addEventListener("click", deleteWorkOrderType); + containerElement.append(tableRowElement); + } +}; +document.querySelector("#form--addWorkOrderType").addEventListener("submit", (submitEvent) => { + submitEvent.preventDefault(); + const formElement = submitEvent.currentTarget; + cityssm.postJSON(los.urlPrefix + "/admin/doAddWorkOrderType", formElement, (responseJSON) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes; + renderWorkOrderTypes(); + formElement.reset(); + formElement.querySelector("input").focus(); + } + else { + bulmaJS.alert({ + title: "Error Adding Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); +}); +renderWorkOrderTypes(); diff --git a/public-typescript/adminTables/adminTablesWorkOrderTypes.ts b/public-typescript/adminTables/adminTablesWorkOrderTypes.ts new file mode 100644 index 00000000..10dc8b24 --- /dev/null +++ b/public-typescript/adminTables/adminTablesWorkOrderTypes.ts @@ -0,0 +1,274 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ + +import type * as globalTypes from "../../types/globalTypes"; +import type * as recordTypes from "../../types/recordTypes"; + +import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; + +import type { BulmaJS } from "@cityssm/bulma-js/types"; + +declare const cityssm: cityssmGlobal; +declare const bulmaJS: BulmaJS; + +declare const los: globalTypes.LOS; + +let workOrderTypes: recordTypes.WorkOrderType[] = exports.workOrderTypes; +delete exports.workOrderTypes; + +const updateWorkOrderType = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + cityssm.postJSON( + los.urlPrefix + "/admin/doUpdateWorkOrderType", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderTypes?: recordTypes.WorkOrderType[]; + }) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes!; + + bulmaJS.alert({ + message: "Work Order Type Updated Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: "Error Updating Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const deleteWorkOrderType = (clickEvent: Event) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; + + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/admin/doDeleteWorkOrderType", + { + workOrderTypeId + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderTypes?: recordTypes.WorkOrderType[]; + }) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes!; + + if (workOrderTypes.length === 0) { + renderWorkOrderTypes(); + } else { + tableRowElement.remove(); + } + + bulmaJS.alert({ + message: "Work Order Type Deleted Successfully", + contextualColorName: "success" + }); + } else { + bulmaJS.alert({ + title: "Error Deleting Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + }; + + bulmaJS.confirm({ + title: "Delete Work Order Type", + message: + "Are you sure you want to delete this work order type?
" + + "Note that no work orders will be removed.", + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Work Order Type", + callbackFunction: doDelete + } + }); +}; + +const moveWorkOrderTypeUp = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveWorkOrderTypeUp", + { + workOrderTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderTypes?: recordTypes.WorkOrderType[]; + }) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes!; + renderWorkOrderTypes(); + } else { + bulmaJS.alert({ + title: "Error Moving Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const moveWorkOrderTypeDown = (clickEvent: MouseEvent) => { + const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; + + const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; + + cityssm.postJSON( + los.urlPrefix + "/admin/doMoveWorkOrderTypeDown", + { + workOrderTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" + }, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderTypes?: recordTypes.WorkOrderType[]; + }) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes!; + renderWorkOrderTypes(); + } else { + bulmaJS.alert({ + title: "Error Moving Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); +}; + +const renderWorkOrderTypes = () => { + const containerElement = document.querySelector( + "#container--workOrderTypes" + ) as HTMLTableSectionElement; + + if (workOrderTypes.length === 0) { + containerElement.innerHTML = + "" + + '' + + '
' + + '

There are no active work order types.

' + + "
" + + "" + + ""; + + return; + } + + containerElement.innerHTML = ""; + + for (const workOrderType of workOrderTypes) { + const tableRowElement = document.createElement("tr"); + + tableRowElement.dataset.workOrderTypeId = workOrderType.workOrderTypeId!.toString(); + + tableRowElement.innerHTML = + "" + + "
" + + '' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + "" + + '' + + '
' + + '
' + + ('
' + + '
' + + '' + + "
" + + '
' + + '' + + "
" + + "
") + + "
" + + '
' + + '" + + "
" + + "
" + + ""; + + tableRowElement.querySelector("form")!.addEventListener("submit", updateWorkOrderType); + + ( + tableRowElement.querySelector(".button--moveWorkOrderTypeUp") as HTMLButtonElement + ).addEventListener("click", moveWorkOrderTypeUp); + + ( + tableRowElement.querySelector(".button--moveWorkOrderTypeDown") as HTMLButtonElement + ).addEventListener("click", moveWorkOrderTypeDown); + + ( + tableRowElement.querySelector(".button--deleteWorkOrderType") as HTMLButtonElement + ).addEventListener("click", deleteWorkOrderType); + + containerElement.append(tableRowElement); + } +}; + +(document.querySelector("#form--addWorkOrderType") as HTMLFormElement).addEventListener( + "submit", + (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + const formElement = submitEvent.currentTarget as HTMLFormElement; + + cityssm.postJSON( + los.urlPrefix + "/admin/doAddWorkOrderType", + formElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderTypes?: recordTypes.WorkOrderType[]; + }) => { + if (responseJSON.success) { + workOrderTypes = responseJSON.workOrderTypes!; + renderWorkOrderTypes(); + formElement.reset(); + formElement.querySelector("input")!.focus(); + } else { + bulmaJS.alert({ + title: "Error Adding Work Order Type", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + } +); + +renderWorkOrderTypes(); \ No newline at end of file diff --git a/public/javascripts/adminTables.min.js b/public/javascripts/adminTables.min.js index 43b48839..56b287f2 100644 --- a/public/javascripts/adminTables.min.js +++ b/public/javascripts/adminTables.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=e=>{const t=e.currentTarget,s=t.value;t.closest(".field").querySelectorAll(".button.is-static")[1].innerHTML=''};let s=exports.workOrderTypes;delete exports.workOrderTypes;const o=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderType",t.currentTarget,e=>{e.success?(s=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},r=t=>{const o=t.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(s=e.workOrderTypes).length?n():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},a=t=>{const o=t.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(s=e.workOrderTypes,n()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},l=t=>{const o=t.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(s=e.workOrderTypes,n()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},n=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==s.length){e.innerHTML="";for(const t of s){const s=document.createElement("tr");s.dataset.workOrderTypeId=t.workOrderTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",o),s.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",a),s.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",l),s.querySelector(".button--deleteWorkOrderType").addEventListener("click",r),e.append(s)}}else e.innerHTML='

There are no active work order types.

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

There are no active work order milestone types.

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

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

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

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

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

There are no active work order types.

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

There are no active work order milestone types.

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

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

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

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

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotOccupantType",s,e=>{e.success?(S=e.lotOccupantTypes,w(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),w()})(); \ No newline at end of file diff --git a/tsconfig.client.json b/tsconfig.client.json index ba63292a..4c19b6f1 100644 --- a/tsconfig.client.json +++ b/tsconfig.client.json @@ -14,7 +14,11 @@ "public-typescript/adminFees.ts", "public-typescript/adminLotTypes.ts", "public-typescript/adminOccupancyTypes.ts", - "public-typescript/adminTables.ts", + "public-typescript/adminTables/adminTables.ts", + "public-typescript/adminTables/adminTablesLotOccupantTypes.ts", + "public-typescript/adminTables/adminTablesLotStatuses.ts", + "public-typescript/adminTables/adminTablesWorkOrderMilestoneTypes.ts", + "public-typescript/adminTables/adminTablesWorkOrderTypes.ts", "public-typescript/dashboard.ts", "public-typescript/lotEdit.ts", "public-typescript/lotOccupancyEdit/lotOccupancyEdit.ts",