update occupancy type field
parent
b6808f1559
commit
1b57e629c6
|
|
@ -0,0 +1,3 @@
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
export declare const handler: RequestHandler;
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
import { updateOccupancyTypeField } from "../../helpers/lotOccupancyDB/updateOccupancyTypeField.js";
|
||||||
|
import { getOccupancyTypes } from "../../helpers/functions.cache.js";
|
||||||
|
export const handler = async (request, response) => {
|
||||||
|
const success = updateOccupancyTypeField(request.body, request.session);
|
||||||
|
const occupancyTypes = getOccupancyTypes();
|
||||||
|
response.json({
|
||||||
|
success,
|
||||||
|
occupancyTypes
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
|
import { updateOccupancyTypeField } from "../../helpers/lotOccupancyDB/updateOccupancyTypeField.js";
|
||||||
|
|
||||||
|
import { getOccupancyTypes } from "../../helpers/functions.cache.js";
|
||||||
|
|
||||||
|
export const handler: RequestHandler = async (request, response) => {
|
||||||
|
const success = updateOccupancyTypeField(request.body, request.session);
|
||||||
|
|
||||||
|
const occupancyTypes = getOccupancyTypes();
|
||||||
|
|
||||||
|
response.json({
|
||||||
|
success,
|
||||||
|
occupancyTypes
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
import type * as recordTypes from "../../types/recordTypes";
|
||||||
|
interface UpdateOccupancyTypeFieldForm {
|
||||||
|
occupancyTypeFieldId: number | string;
|
||||||
|
occupancyTypeField: string;
|
||||||
|
isRequired: "0" | "1";
|
||||||
|
minimumLength?: string;
|
||||||
|
maximumLength?: string;
|
||||||
|
pattern?: string;
|
||||||
|
occupancyTypeFieldValues: string;
|
||||||
|
}
|
||||||
|
export declare const updateOccupancyTypeField: (occupancyTypeFieldForm: UpdateOccupancyTypeFieldForm, requestSession: recordTypes.PartialSession) => boolean;
|
||||||
|
export default updateOccupancyTypeField;
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import sqlite from "better-sqlite3";
|
||||||
|
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
||||||
|
import { clearOccupancyTypesCache } from "../functions.cache.js";
|
||||||
|
export const updateOccupancyTypeField = (occupancyTypeFieldForm, requestSession) => {
|
||||||
|
const database = sqlite(databasePath);
|
||||||
|
const rightNowMillis = Date.now();
|
||||||
|
const result = database
|
||||||
|
.prepare("update OccupancyTypeFields" +
|
||||||
|
" set occupancyTypeField = ?," +
|
||||||
|
" isRequired = ?," +
|
||||||
|
" minimumLength = ?," +
|
||||||
|
" maximumLength = ?," +
|
||||||
|
" pattern = ?," +
|
||||||
|
" occupancyTypeFieldValues = ?," +
|
||||||
|
" recordUpdate_userName = ?," +
|
||||||
|
" recordUpdate_timeMillis = ?" +
|
||||||
|
" where occupancyTypeFieldId = ?" +
|
||||||
|
" and recordDelete_timeMillis is null")
|
||||||
|
.run(occupancyTypeFieldForm.occupancyTypeField, Number.parseInt(occupancyTypeFieldForm.isRequired, 10), occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.pattern || "", occupancyTypeFieldForm.occupancyTypeFieldValues, requestSession.user.userName, rightNowMillis, occupancyTypeFieldForm.occupancyTypeFieldId);
|
||||||
|
database.close();
|
||||||
|
clearOccupancyTypesCache();
|
||||||
|
return result.changes > 0;
|
||||||
|
};
|
||||||
|
export default updateOccupancyTypeField;
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
import sqlite from "better-sqlite3";
|
||||||
|
|
||||||
|
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
||||||
|
|
||||||
|
import { clearOccupancyTypesCache } from "../functions.cache.js";
|
||||||
|
|
||||||
|
import type * as recordTypes from "../../types/recordTypes";
|
||||||
|
|
||||||
|
interface UpdateOccupancyTypeFieldForm {
|
||||||
|
occupancyTypeFieldId: number | string;
|
||||||
|
occupancyTypeField: string;
|
||||||
|
isRequired: "0" | "1";
|
||||||
|
minimumLength?: string;
|
||||||
|
maximumLength?: string;
|
||||||
|
pattern?: string;
|
||||||
|
occupancyTypeFieldValues: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateOccupancyTypeField = (
|
||||||
|
occupancyTypeFieldForm: UpdateOccupancyTypeFieldForm,
|
||||||
|
requestSession: recordTypes.PartialSession
|
||||||
|
): boolean => {
|
||||||
|
const database = sqlite(databasePath);
|
||||||
|
|
||||||
|
const rightNowMillis = Date.now();
|
||||||
|
|
||||||
|
const result = database
|
||||||
|
.prepare(
|
||||||
|
"update OccupancyTypeFields" +
|
||||||
|
" set occupancyTypeField = ?," +
|
||||||
|
" isRequired = ?," +
|
||||||
|
" minimumLength = ?," +
|
||||||
|
" maximumLength = ?," +
|
||||||
|
" pattern = ?," +
|
||||||
|
" occupancyTypeFieldValues = ?," +
|
||||||
|
" recordUpdate_userName = ?," +
|
||||||
|
" recordUpdate_timeMillis = ?" +
|
||||||
|
" where occupancyTypeFieldId = ?" +
|
||||||
|
" and recordDelete_timeMillis is null"
|
||||||
|
)
|
||||||
|
.run(
|
||||||
|
occupancyTypeFieldForm.occupancyTypeField,
|
||||||
|
Number.parseInt(occupancyTypeFieldForm.isRequired, 10),
|
||||||
|
occupancyTypeFieldForm.minimumLength || 0,
|
||||||
|
occupancyTypeFieldForm.maximumLength || 100,
|
||||||
|
occupancyTypeFieldForm.pattern || "",
|
||||||
|
occupancyTypeFieldForm.occupancyTypeFieldValues,
|
||||||
|
requestSession.user.userName,
|
||||||
|
rightNowMillis,
|
||||||
|
occupancyTypeFieldForm.occupancyTypeFieldId
|
||||||
|
);
|
||||||
|
|
||||||
|
database.close();
|
||||||
|
|
||||||
|
clearOccupancyTypesCache();
|
||||||
|
|
||||||
|
return result.changes > 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default updateOccupancyTypeField;
|
||||||
|
|
@ -104,9 +104,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
};
|
};
|
||||||
const openAddOccupancyTypeField = (clickEvent) => {
|
const openAddOccupancyTypeField = (clickEvent) => {
|
||||||
const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10);
|
const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10);
|
||||||
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
|
|
||||||
return occupancyTypeId === currentOccupancyType.occupancyTypeId;
|
|
||||||
});
|
|
||||||
let addCloseModalFunction;
|
let addCloseModalFunction;
|
||||||
const doAdd = (submitEvent) => {
|
const doAdd = (submitEvent) => {
|
||||||
submitEvent.preventDefault();
|
submitEvent.preventDefault();
|
||||||
|
|
@ -116,6 +113,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
addCloseModalFunction();
|
addCloseModalFunction();
|
||||||
occupancyTypes = responseJSON.occupancyTypes;
|
occupancyTypes = responseJSON.occupancyTypes;
|
||||||
renderOccupancyTypes();
|
renderOccupancyTypes();
|
||||||
|
openEditOccupancyTypeField(occupancyTypeId, responseJSON.occupancyTypeFieldId);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bulmaJS.alert({
|
bulmaJS.alert({
|
||||||
|
|
@ -186,6 +184,93 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
const openEditOccupancyTypeField = (occupancyTypeId, occupancyTypeFieldId) => {
|
||||||
|
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
|
||||||
|
return currentOccupancyType.occupancyTypeId === occupancyTypeId;
|
||||||
|
});
|
||||||
|
const occupancyTypeField = occupancyType.occupancyTypeFields.find((currentOccupancyTypeField) => {
|
||||||
|
return (currentOccupancyTypeField.occupancyTypeFieldId ===
|
||||||
|
occupancyTypeFieldId);
|
||||||
|
});
|
||||||
|
let minimumLengthElement;
|
||||||
|
let maximumLengthElement;
|
||||||
|
let patternElement;
|
||||||
|
let occupancyTypeFieldValuesElement;
|
||||||
|
let editCloseModalFunction;
|
||||||
|
const updateMaximumLengthMin = () => {
|
||||||
|
maximumLengthElement.min = minimumLengthElement.value;
|
||||||
|
};
|
||||||
|
const toggleInputFields = () => {
|
||||||
|
if (occupancyTypeFieldValuesElement.value === "") {
|
||||||
|
minimumLengthElement.disabled = false;
|
||||||
|
maximumLengthElement.disabled = false;
|
||||||
|
patternElement.disabled = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
minimumLengthElement.disabled = true;
|
||||||
|
maximumLengthElement.disabled = true;
|
||||||
|
patternElement.disabled = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const doUpdate = (submitEvent) => {
|
||||||
|
submitEvent.preventDefault();
|
||||||
|
cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => {
|
||||||
|
if (responseJSON.success) {
|
||||||
|
occupancyTypes = responseJSON.occupancyTypes;
|
||||||
|
editCloseModalFunction();
|
||||||
|
renderOccupancyTypes();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bulmaJS.alert({
|
||||||
|
title: "Error Updating Field",
|
||||||
|
message: responseJSON.errorMessage,
|
||||||
|
contextualColorName: "danger"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyTypeField", {
|
||||||
|
onshow: (modalElement) => {
|
||||||
|
los.populateAliases(modalElement);
|
||||||
|
modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldId").value = occupancyTypeField.occupancyTypeFieldId.toString();
|
||||||
|
modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value = occupancyTypeField.occupancyTypeField;
|
||||||
|
modalElement.querySelector("#occupancyTypeFieldEdit--isRequired").value = occupancyTypeField.isRequired ? "1" : "0";
|
||||||
|
minimumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--minimumLength");
|
||||||
|
minimumLengthElement.value =
|
||||||
|
occupancyTypeField.minimumLength.toString();
|
||||||
|
maximumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--maximumLength");
|
||||||
|
maximumLengthElement.value =
|
||||||
|
occupancyTypeField.maximumLength.toString();
|
||||||
|
patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern");
|
||||||
|
patternElement.value = occupancyTypeField.pattern;
|
||||||
|
occupancyTypeFieldValuesElement = modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues");
|
||||||
|
occupancyTypeFieldValuesElement.value =
|
||||||
|
occupancyTypeField.occupancyTypeFieldValues;
|
||||||
|
toggleInputFields();
|
||||||
|
},
|
||||||
|
onshown: (modalElement, closeModalFunction) => {
|
||||||
|
editCloseModalFunction = closeModalFunction;
|
||||||
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
cityssm.enableNavBlocker();
|
||||||
|
modalElement
|
||||||
|
.querySelector("form")
|
||||||
|
.addEventListener("submit", doUpdate);
|
||||||
|
minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin);
|
||||||
|
updateMaximumLengthMin();
|
||||||
|
occupancyTypeFieldValuesElement.addEventListener("keyup", toggleInputFields);
|
||||||
|
},
|
||||||
|
onremoved: () => {
|
||||||
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
cityssm.disableNavBlocker();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const openEditOccupancyTypeFieldByClick = (clickEvent) => {
|
||||||
|
clickEvent.preventDefault();
|
||||||
|
const occupancyTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId, 10);
|
||||||
|
const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10);
|
||||||
|
openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId);
|
||||||
|
};
|
||||||
const renderOccupancyTypes = () => {
|
const renderOccupancyTypes = () => {
|
||||||
if (occupancyTypes.length === 0) {
|
if (occupancyTypes.length === 0) {
|
||||||
containerElement.innerHTML =
|
containerElement.innerHTML =
|
||||||
|
|
@ -304,6 +389,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
"</div>") +
|
"</div>") +
|
||||||
"</div>" +
|
"</div>" +
|
||||||
"</div>";
|
"</div>";
|
||||||
|
panelBlockElement
|
||||||
|
.querySelector(".button--editOccupancyTypeField")
|
||||||
|
.addEventListener("click", openEditOccupancyTypeFieldByClick);
|
||||||
occupancyTypeContainer.append(panelBlockElement);
|
occupancyTypeContainer.append(panelBlockElement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -201,10 +201,6 @@ declare const bulmaJS: BulmaJS;
|
||||||
10
|
10
|
||||||
);
|
);
|
||||||
|
|
||||||
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
|
|
||||||
return occupancyTypeId === currentOccupancyType.occupancyTypeId;
|
|
||||||
});
|
|
||||||
|
|
||||||
let addCloseModalFunction: () => void;
|
let addCloseModalFunction: () => void;
|
||||||
|
|
||||||
const doAdd = (submitEvent: SubmitEvent) => {
|
const doAdd = (submitEvent: SubmitEvent) => {
|
||||||
|
|
@ -217,6 +213,7 @@ declare const bulmaJS: BulmaJS;
|
||||||
success: boolean;
|
success: boolean;
|
||||||
errorMessage?: string;
|
errorMessage?: string;
|
||||||
occupancyTypes?: recordTypes.OccupancyType[];
|
occupancyTypes?: recordTypes.OccupancyType[];
|
||||||
|
occupancyTypeFieldId?: number;
|
||||||
}) => {
|
}) => {
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
expandedOccupancyTypes.add(occupancyTypeId);
|
expandedOccupancyTypes.add(occupancyTypeId);
|
||||||
|
|
@ -224,6 +221,11 @@ declare const bulmaJS: BulmaJS;
|
||||||
addCloseModalFunction();
|
addCloseModalFunction();
|
||||||
occupancyTypes = responseJSON.occupancyTypes;
|
occupancyTypes = responseJSON.occupancyTypes;
|
||||||
renderOccupancyTypes();
|
renderOccupancyTypes();
|
||||||
|
|
||||||
|
openEditOccupancyTypeField(
|
||||||
|
occupancyTypeId,
|
||||||
|
responseJSON.occupancyTypeFieldId
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
bulmaJS.alert({
|
bulmaJS.alert({
|
||||||
title: "Error Adding Field",
|
title: "Error Adding Field",
|
||||||
|
|
@ -338,6 +340,175 @@ declare const bulmaJS: BulmaJS;
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const openEditOccupancyTypeField = (
|
||||||
|
occupancyTypeId: number,
|
||||||
|
occupancyTypeFieldId: number
|
||||||
|
) => {
|
||||||
|
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
|
||||||
|
return currentOccupancyType.occupancyTypeId === occupancyTypeId;
|
||||||
|
});
|
||||||
|
|
||||||
|
const occupancyTypeField = occupancyType.occupancyTypeFields.find(
|
||||||
|
(currentOccupancyTypeField) => {
|
||||||
|
return (
|
||||||
|
currentOccupancyTypeField.occupancyTypeFieldId ===
|
||||||
|
occupancyTypeFieldId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let minimumLengthElement: HTMLInputElement;
|
||||||
|
let maximumLengthElement: HTMLInputElement;
|
||||||
|
let patternElement: HTMLInputElement;
|
||||||
|
let occupancyTypeFieldValuesElement: HTMLTextAreaElement;
|
||||||
|
|
||||||
|
let editCloseModalFunction: () => void;
|
||||||
|
|
||||||
|
const updateMaximumLengthMin = () => {
|
||||||
|
maximumLengthElement.min = minimumLengthElement.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleInputFields = () => {
|
||||||
|
if (occupancyTypeFieldValuesElement.value === "") {
|
||||||
|
minimumLengthElement.disabled = false;
|
||||||
|
maximumLengthElement.disabled = false;
|
||||||
|
patternElement.disabled = false;
|
||||||
|
} else {
|
||||||
|
minimumLengthElement.disabled = true;
|
||||||
|
maximumLengthElement.disabled = true;
|
||||||
|
patternElement.disabled = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const doUpdate = (submitEvent: SubmitEvent) => {
|
||||||
|
submitEvent.preventDefault();
|
||||||
|
|
||||||
|
cityssm.postJSON(
|
||||||
|
urlPrefix + "/admin/doUpdateOccupancyTypeField",
|
||||||
|
submitEvent.currentTarget,
|
||||||
|
(responseJSON: {
|
||||||
|
success: boolean;
|
||||||
|
errorMessage?: string;
|
||||||
|
occupancyTypes?: recordTypes.OccupancyType[];
|
||||||
|
}) => {
|
||||||
|
if (responseJSON.success) {
|
||||||
|
occupancyTypes = responseJSON.occupancyTypes;
|
||||||
|
editCloseModalFunction();
|
||||||
|
renderOccupancyTypes();
|
||||||
|
} else {
|
||||||
|
bulmaJS.alert({
|
||||||
|
title: "Error Updating Field",
|
||||||
|
message: responseJSON.errorMessage,
|
||||||
|
contextualColorName: "danger"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyTypeField", {
|
||||||
|
onshow: (modalElement) => {
|
||||||
|
los.populateAliases(modalElement);
|
||||||
|
|
||||||
|
(
|
||||||
|
modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--occupancyTypeFieldId"
|
||||||
|
) as HTMLInputElement
|
||||||
|
).value = occupancyTypeField.occupancyTypeFieldId.toString();
|
||||||
|
|
||||||
|
(
|
||||||
|
modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--occupancyTypeField"
|
||||||
|
) as HTMLInputElement
|
||||||
|
).value = occupancyTypeField.occupancyTypeField;
|
||||||
|
|
||||||
|
(
|
||||||
|
modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--isRequired"
|
||||||
|
) as HTMLSelectElement
|
||||||
|
).value = occupancyTypeField.isRequired ? "1" : "0";
|
||||||
|
|
||||||
|
minimumLengthElement = modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--minimumLength"
|
||||||
|
);
|
||||||
|
|
||||||
|
minimumLengthElement.value =
|
||||||
|
occupancyTypeField.minimumLength.toString();
|
||||||
|
|
||||||
|
maximumLengthElement = modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--maximumLength"
|
||||||
|
);
|
||||||
|
|
||||||
|
maximumLengthElement.value =
|
||||||
|
occupancyTypeField.maximumLength.toString();
|
||||||
|
|
||||||
|
patternElement = modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--pattern"
|
||||||
|
);
|
||||||
|
|
||||||
|
patternElement.value = occupancyTypeField.pattern;
|
||||||
|
|
||||||
|
occupancyTypeFieldValuesElement = modalElement.querySelector(
|
||||||
|
"#occupancyTypeFieldEdit--occupancyTypeFieldValues"
|
||||||
|
);
|
||||||
|
|
||||||
|
occupancyTypeFieldValuesElement.value =
|
||||||
|
occupancyTypeField.occupancyTypeFieldValues;
|
||||||
|
|
||||||
|
toggleInputFields();
|
||||||
|
},
|
||||||
|
onshown: (modalElement, closeModalFunction) => {
|
||||||
|
editCloseModalFunction = closeModalFunction;
|
||||||
|
|
||||||
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
cityssm.enableNavBlocker();
|
||||||
|
|
||||||
|
modalElement
|
||||||
|
.querySelector("form")
|
||||||
|
.addEventListener("submit", doUpdate);
|
||||||
|
|
||||||
|
minimumLengthElement.addEventListener(
|
||||||
|
"keyup",
|
||||||
|
updateMaximumLengthMin
|
||||||
|
);
|
||||||
|
updateMaximumLengthMin();
|
||||||
|
|
||||||
|
occupancyTypeFieldValuesElement.addEventListener(
|
||||||
|
"keyup",
|
||||||
|
toggleInputFields
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onremoved: () => {
|
||||||
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
cityssm.disableNavBlocker();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const openEditOccupancyTypeFieldByClick = (clickEvent: Event) => {
|
||||||
|
clickEvent.preventDefault();
|
||||||
|
|
||||||
|
const occupancyTypeFieldId = Number.parseInt(
|
||||||
|
(
|
||||||
|
(clickEvent.currentTarget as HTMLElement).closest(
|
||||||
|
".container--occupancyTypeField"
|
||||||
|
) as HTMLElement
|
||||||
|
).dataset.occupancyTypeFieldId,
|
||||||
|
10
|
||||||
|
);
|
||||||
|
|
||||||
|
const occupancyTypeId = Number.parseInt(
|
||||||
|
(
|
||||||
|
(clickEvent.currentTarget as HTMLElement).closest(
|
||||||
|
".container--occupancyType"
|
||||||
|
) as HTMLElement
|
||||||
|
).dataset.occupancyTypeId,
|
||||||
|
10
|
||||||
|
);
|
||||||
|
|
||||||
|
openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId);
|
||||||
|
};
|
||||||
|
|
||||||
const renderOccupancyTypes = () => {
|
const renderOccupancyTypes = () => {
|
||||||
if (occupancyTypes.length === 0) {
|
if (occupancyTypes.length === 0) {
|
||||||
containerElement.innerHTML =
|
containerElement.innerHTML =
|
||||||
|
|
@ -477,6 +648,13 @@ declare const bulmaJS: BulmaJS;
|
||||||
"</div>" +
|
"</div>" +
|
||||||
"</div>";
|
"</div>";
|
||||||
|
|
||||||
|
panelBlockElement
|
||||||
|
.querySelector(".button--editOccupancyTypeField")
|
||||||
|
.addEventListener(
|
||||||
|
"click",
|
||||||
|
openEditOccupancyTypeFieldByClick
|
||||||
|
);
|
||||||
|
|
||||||
occupancyTypeContainer.append(panelBlockElement);
|
occupancyTypeContainer.append(panelBlockElement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<form id="form--occupancyTypeFieldAdd">
|
<form id="form--occupancyTypeFieldAdd">
|
||||||
<input class="input" id="occupancyTypeFieldAdd--occupancyTypeId" name="occupancyTypeId" type="hidden" />
|
<input class="input" id="occupancyTypeFieldAdd--occupancyTypeId" name="occupancyTypeId" type="hidden" />
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label" for="occupancyTypeFieldAdd--occupancyTypeField">New Field</label>
|
<label class="label" for="occupancyTypeFieldAdd--occupancyTypeField">New Field Name</label>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<input class="input" id="occupancyTypeFieldAdd--occupancyTypeField" name="occupancyTypeField" type="text" maxlength="100" required />
|
<input class="input" id="occupancyTypeFieldAdd--occupancyTypeField" name="occupancyTypeField" type="text" maxlength="100" required />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
<div class="modal">
|
||||||
|
<div class="modal-background"></div>
|
||||||
|
<div class="modal-card" style="width:900px">
|
||||||
|
<header class="modal-card-head">
|
||||||
|
<h3 class="modal-card-title">
|
||||||
|
Update <span class="alias" data-alias="Occupancy"></span> Type Field
|
||||||
|
</h3>
|
||||||
|
<button class="delete is-close-modal-button" aria-label="close" type="button"></button>
|
||||||
|
</header>
|
||||||
|
<section class="modal-card-body">
|
||||||
|
<form id="form--occupancyTypeFieldEdit">
|
||||||
|
<input class="input" id="occupancyTypeFieldEdit--occupancyTypeFieldId" name="occupancyTypeFieldId" type="hidden" />
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-8">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="occupancyTypeFieldEdit--occupancyTypeField">Field Name</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" id="occupancyTypeFieldEdit--occupancyTypeField" name="occupancyTypeField" type="text" maxlength="100" required />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="occupancyTypeFieldEdit--isRequired">Required</label>
|
||||||
|
<div class="control">
|
||||||
|
<div class="select is-fullwidth">
|
||||||
|
<select id="occupancyTypeFieldEdit--isRequired" name="isRequired">
|
||||||
|
<option value="0">Not Required</option>
|
||||||
|
<option value="1">Required</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-5">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="occupancyTypeFieldEdit--minimumLength">Minimum Length</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" id="occupancyTypeFieldEdit--minimumLength" name="minimumLength" type="number" min="0" max="32767" step="1" onwheel="return false" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="occupancyTypeFieldEdit--maximumLength">Maximum Length</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" id="occupancyTypeFieldEdit--maximumLength" name="maximumLength" type="number" min="0" max="32767" step="1" onwheel="return false" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="occupancyTypeFieldEdit--pattern">Regular Expression</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" id="occupancyTypeFieldEdit--pattern" name="pattern" type="text" maxlength="100" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="occupancyTypeFieldEdit--occupancyTypeFieldValues">Field Values</label>
|
||||||
|
<div class="control">
|
||||||
|
<textarea class="textarea" id="occupancyTypeFieldEdit--occupancyTypeFieldValues" name="occupancyTypeFieldValues"></textarea>
|
||||||
|
</div>
|
||||||
|
<p class="help is-info">
|
||||||
|
Place each item on a separate line.
|
||||||
|
Note that when field values are set, only those values can be used to complete the field.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
<footer class="modal-card-foot justify-right">
|
||||||
|
<button class="button is-success" type="submit" form="form--occupancyTypeFieldEdit">
|
||||||
|
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
|
||||||
|
<span>Update Field</span>
|
||||||
|
</button>
|
||||||
|
<button class="button is-close-modal-button" type="button">Cancel</button>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -18,6 +18,7 @@ import handler_doMoveOccupancyTypeUp from "../handlers/admin-post/doMoveOccupanc
|
||||||
import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupancyTypeDown.js";
|
import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupancyTypeDown.js";
|
||||||
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
|
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
|
||||||
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
|
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
|
||||||
|
import handler_doUpdateOccupancyTypeField from "../handlers/admin-post/doUpdateOccupancyTypeField.js";
|
||||||
import handler_tables from "../handlers/admin-get/tables.js";
|
import handler_tables from "../handlers/admin-get/tables.js";
|
||||||
import handler_doAddWorkOrderType from "../handlers/admin-post/doAddWorkOrderType.js";
|
import handler_doAddWorkOrderType from "../handlers/admin-post/doAddWorkOrderType.js";
|
||||||
import handler_doUpdateWorkOrderType from "../handlers/admin-post/doUpdateWorkOrderType.js";
|
import handler_doUpdateWorkOrderType from "../handlers/admin-post/doUpdateWorkOrderType.js";
|
||||||
|
|
@ -53,6 +54,7 @@ router.post("/doMoveOccupancyTypeUp", permissionHandlers.adminPostHandler, handl
|
||||||
router.post("/doMoveOccupancyTypeDown", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeDown);
|
router.post("/doMoveOccupancyTypeDown", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeDown);
|
||||||
router.post("/doDeleteOccupancyType", permissionHandlers.adminPostHandler, handler_doDeleteOccupancyType);
|
router.post("/doDeleteOccupancyType", permissionHandlers.adminPostHandler, handler_doDeleteOccupancyType);
|
||||||
router.post("/doAddOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doAddOccupancyTypeField);
|
router.post("/doAddOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doAddOccupancyTypeField);
|
||||||
|
router.post("/doUpdateOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doUpdateOccupancyTypeField);
|
||||||
router.get("/tables", permissionHandlers.adminGetHandler, handler_tables);
|
router.get("/tables", permissionHandlers.adminGetHandler, handler_tables);
|
||||||
router.post("/doAddWorkOrderType", permissionHandlers.adminPostHandler, handler_doAddWorkOrderType);
|
router.post("/doAddWorkOrderType", permissionHandlers.adminPostHandler, handler_doAddWorkOrderType);
|
||||||
router.post("/doUpdateWorkOrderType", permissionHandlers.adminPostHandler, handler_doUpdateWorkOrderType);
|
router.post("/doUpdateWorkOrderType", permissionHandlers.adminPostHandler, handler_doUpdateWorkOrderType);
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupa
|
||||||
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
|
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
|
||||||
|
|
||||||
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
|
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
|
||||||
|
import handler_doUpdateOccupancyTypeField from "../handlers/admin-post/doUpdateOccupancyTypeField.js";
|
||||||
|
|
||||||
// Config Table Management
|
// Config Table Management
|
||||||
|
|
||||||
|
|
@ -164,6 +165,12 @@ router.post(
|
||||||
handler_doAddOccupancyTypeField
|
handler_doAddOccupancyTypeField
|
||||||
);
|
);
|
||||||
|
|
||||||
|
router.post(
|
||||||
|
"/doUpdateOccupancyTypeField",
|
||||||
|
permissionHandlers.adminPostHandler,
|
||||||
|
handler_doUpdateOccupancyTypeField
|
||||||
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Config Tables
|
* Config Tables
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue