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=' ';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=' ';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",