global occupancy type fields

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-19 10:28:46 -04:00
parent fd3d622dc8
commit db790d2e8a
37 changed files with 580 additions and 571 deletions

View File

@ -1,11 +1,13 @@
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
import * as configFunctions from "../../helpers/functions.config.js"; import * as configFunctions from "../../helpers/functions.config.js";
export const handler = (_request, response) => { export const handler = (_request, response) => {
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.render("admin-occupancyTypes", { response.render("admin-occupancyTypes", {
headTitle: configFunctions.getProperty("aliases.occupancy") + headTitle: configFunctions.getProperty("aliases.occupancy") +
" Type Management", " Type Management",
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -1,17 +1,19 @@
import type { RequestHandler } from "express"; import type { RequestHandler } from "express";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
import * as configFunctions from "../../helpers/functions.config.js"; import * as configFunctions from "../../helpers/functions.config.js";
export const handler: RequestHandler = (_request, response) => { export const handler: RequestHandler = (_request, response) => {
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.render("admin-occupancyTypes", { response.render("admin-occupancyTypes", {
headTitle: headTitle:
configFunctions.getProperty("aliases.occupancy") + configFunctions.getProperty("aliases.occupancy") +
" Type Management", " Type Management",
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,12 +1,14 @@
import { addOccupancyType } from "../../helpers/lotOccupancyDB/addOccupancyType.js"; import { addOccupancyType } from "../../helpers/lotOccupancyDB/addOccupancyType.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const occupancyTypeId = addOccupancyType(request.body, request.session); const occupancyTypeId = addOccupancyType(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success: true, success: true,
occupancyTypeId, occupancyTypeId,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,17 +2,19 @@ import type { RequestHandler } from "express";
import { addOccupancyType } from "../../helpers/lotOccupancyDB/addOccupancyType.js"; import { addOccupancyType } from "../../helpers/lotOccupancyDB/addOccupancyType.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const occupancyTypeId = addOccupancyType(request.body, request.session); const occupancyTypeId = addOccupancyType(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success: true, success: true,
occupancyTypeId, occupancyTypeId,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,12 +1,14 @@
import { addOccupancyTypeField } from "../../helpers/lotOccupancyDB/addOccupancyTypeField.js"; import { addOccupancyTypeField } from "../../helpers/lotOccupancyDB/addOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session); const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success: true, success: true,
occupancyTypeFieldId, occupancyTypeFieldId,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,17 +2,19 @@ import type { RequestHandler } from "express";
import { addOccupancyTypeField } from "../../helpers/lotOccupancyDB/addOccupancyTypeField.js"; import { addOccupancyTypeField } from "../../helpers/lotOccupancyDB/addOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session); const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success: true, success: true,
occupancyTypeFieldId, occupancyTypeFieldId,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,11 +1,13 @@
import { deleteOccupancyType } from "../../helpers/lotOccupancyDB/deleteOccupancyType.js"; import { deleteOccupancyType } from "../../helpers/lotOccupancyDB/deleteOccupancyType.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = deleteOccupancyType(request.body.occupancyTypeId, request.session); const success = deleteOccupancyType(request.body.occupancyTypeId, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,7 +2,7 @@ import type { RequestHandler } from "express";
import { deleteOccupancyType } from "../../helpers/lotOccupancyDB/deleteOccupancyType.js"; import { deleteOccupancyType } from "../../helpers/lotOccupancyDB/deleteOccupancyType.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = deleteOccupancyType( const success = deleteOccupancyType(
@ -11,10 +11,12 @@ export const handler: RequestHandler = async (request, response) => {
); );
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,11 +1,13 @@
import { deleteOccupancyTypeField } from "../../helpers/lotOccupancyDB/deleteOccupancyTypeField.js"; import { deleteOccupancyTypeField } from "../../helpers/lotOccupancyDB/deleteOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = deleteOccupancyTypeField(request.body.occupancyTypeFieldId, request.session); const success = deleteOccupancyTypeField(request.body.occupancyTypeFieldId, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,7 +2,7 @@ import type { RequestHandler } from "express";
import { deleteOccupancyTypeField } from "../../helpers/lotOccupancyDB/deleteOccupancyTypeField.js"; import { deleteOccupancyTypeField } from "../../helpers/lotOccupancyDB/deleteOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = deleteOccupancyTypeField( const success = deleteOccupancyTypeField(
@ -11,10 +11,12 @@ export const handler: RequestHandler = async (request, response) => {
); );
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,11 +1,13 @@
import { moveOccupancyTypeDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js"; import { moveOccupancyTypeDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = moveOccupancyTypeDown(request.body.occupancyTypeId); const success = moveOccupancyTypeDown(request.body.occupancyTypeId);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,16 +2,18 @@ import type { RequestHandler } from "express";
import { moveOccupancyTypeDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js"; import { moveOccupancyTypeDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = moveOccupancyTypeDown(request.body.occupancyTypeId); const success = moveOccupancyTypeDown(request.body.occupancyTypeId);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,11 +1,13 @@
import { moveOccupancyTypeUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js"; import { moveOccupancyTypeUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = moveOccupancyTypeUp(request.body.occupancyTypeId); const success = moveOccupancyTypeUp(request.body.occupancyTypeId);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,16 +2,18 @@ import type { RequestHandler } from "express";
import { moveOccupancyTypeUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js"; import { moveOccupancyTypeUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = moveOccupancyTypeUp(request.body.occupancyTypeId); const success = moveOccupancyTypeUp(request.body.occupancyTypeId);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,11 +1,13 @@
import { updateOccupancyType } from "../../helpers/lotOccupancyDB/updateOccupancyType.js"; import { updateOccupancyType } from "../../helpers/lotOccupancyDB/updateOccupancyType.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = updateOccupancyType(request.body, request.session); const success = updateOccupancyType(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,16 +2,18 @@ import type { RequestHandler } from "express";
import { updateOccupancyType } from "../../helpers/lotOccupancyDB/updateOccupancyType.js"; import { updateOccupancyType } from "../../helpers/lotOccupancyDB/updateOccupancyType.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = updateOccupancyType(request.body, request.session); const success = updateOccupancyType(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -1,11 +1,13 @@
import { updateOccupancyTypeField } from "../../helpers/lotOccupancyDB/updateOccupancyTypeField.js"; import { updateOccupancyTypeField } from "../../helpers/lotOccupancyDB/updateOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = updateOccupancyTypeField(request.body, request.session); const success = updateOccupancyTypeField(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };
export default handler; export default handler;

View File

@ -2,16 +2,18 @@ import type { RequestHandler } from "express";
import { updateOccupancyTypeField } from "../../helpers/lotOccupancyDB/updateOccupancyTypeField.js"; import { updateOccupancyTypeField } from "../../helpers/lotOccupancyDB/updateOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = updateOccupancyTypeField(request.body, request.session); const success = updateOccupancyTypeField(request.body, request.session);
const occupancyTypes = getOccupancyTypes(); const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({ response.json({
success, success,
occupancyTypes occupancyTypes,
allOccupancyTypeFields
}); });
}; };

View File

@ -12,6 +12,7 @@ export declare function getLotTypeById(lotTypeId: number): recordTypes.LotType;
export declare function getLotTypesByLotType(lotType: string): recordTypes.LotType; export declare function getLotTypesByLotType(lotType: string): recordTypes.LotType;
export declare function clearLotTypesCache(): void; export declare function clearLotTypesCache(): void;
export declare function getOccupancyTypes(): recordTypes.OccupancyType[]; export declare function getOccupancyTypes(): recordTypes.OccupancyType[];
export declare function getAllOccupancyTypeFields(): recordTypes.OccupancyTypeField[];
export declare function getOccupancyTypeById(occupancyTypeId: number): recordTypes.OccupancyType; export declare function getOccupancyTypeById(occupancyTypeId: number): recordTypes.OccupancyType;
export declare function getOccupancyTypeByOccupancyType(occupancyTypeString: string): recordTypes.OccupancyType; export declare function getOccupancyTypeByOccupancyType(occupancyTypeString: string): recordTypes.OccupancyType;
export declare function clearOccupancyTypesCache(): void; export declare function clearOccupancyTypesCache(): void;

View File

@ -2,6 +2,7 @@ import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from "./lotOcc
import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/getLotStatuses.js"; import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/getLotStatuses.js";
import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.js"; import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.js";
import { getOccupancyTypes as getOccupancyTypesFromDatabase } from "./lotOccupancyDB/getOccupancyTypes.js"; import { getOccupancyTypes as getOccupancyTypesFromDatabase } from "./lotOccupancyDB/getOccupancyTypes.js";
import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from "./lotOccupancyDB/getOccupancyTypeFields.js";
import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderTypes.js"; import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderTypes.js";
import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderMilestoneTypes.js"; import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderMilestoneTypes.js";
let lotOccupantTypes; let lotOccupantTypes;
@ -21,8 +22,7 @@ export function getLotOccupantTypesByLotOccupantType(lotOccupantType) {
const cachedLotOccupantTypes = getLotOccupantTypes(); const cachedLotOccupantTypes = getLotOccupantTypes();
const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase(); const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase();
return cachedLotOccupantTypes.find((currentLotOccupantType) => { return cachedLotOccupantTypes.find((currentLotOccupantType) => {
return (currentLotOccupantType.lotOccupantType.toLowerCase() === return currentLotOccupantType.lotOccupantType.toLowerCase() === lotOccupantTypeLowerCase;
lotOccupantTypeLowerCase);
}); });
} }
export function clearLotOccupantTypesCache() { export function clearLotOccupantTypesCache() {
@ -75,12 +75,19 @@ export function clearLotTypesCache() {
lotTypes = undefined; lotTypes = undefined;
} }
let occupancyTypes; let occupancyTypes;
let allOccupancyTypeFields;
export function getOccupancyTypes() { export function getOccupancyTypes() {
if (!occupancyTypes) { if (!occupancyTypes) {
occupancyTypes = getOccupancyTypesFromDatabase(); occupancyTypes = getOccupancyTypesFromDatabase();
} }
return occupancyTypes; return occupancyTypes;
} }
export function getAllOccupancyTypeFields() {
if (!allOccupancyTypeFields) {
allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase();
}
return allOccupancyTypeFields;
}
export function getOccupancyTypeById(occupancyTypeId) { export function getOccupancyTypeById(occupancyTypeId) {
const cachedOccupancyTypes = getOccupancyTypes(); const cachedOccupancyTypes = getOccupancyTypes();
return cachedOccupancyTypes.find((currentOccupancyType) => { return cachedOccupancyTypes.find((currentOccupancyType) => {
@ -91,12 +98,12 @@ export function getOccupancyTypeByOccupancyType(occupancyTypeString) {
const cachedOccupancyTypes = getOccupancyTypes(); const cachedOccupancyTypes = getOccupancyTypes();
const occupancyTypeLowerCase = occupancyTypeString.toLowerCase(); const occupancyTypeLowerCase = occupancyTypeString.toLowerCase();
return cachedOccupancyTypes.find((currentOccupancyType) => { return cachedOccupancyTypes.find((currentOccupancyType) => {
return (currentOccupancyType.occupancyType.toLowerCase() === return currentOccupancyType.occupancyType.toLowerCase() === occupancyTypeLowerCase;
occupancyTypeLowerCase);
}); });
} }
export function clearOccupancyTypesCache() { export function clearOccupancyTypesCache() {
occupancyTypes = undefined; occupancyTypes = undefined;
allOccupancyTypeFields = undefined;
} }
let workOrderTypes; let workOrderTypes;
export function getWorkOrderTypes() { export function getWorkOrderTypes() {

View File

@ -5,6 +5,7 @@ import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/g
import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.js"; import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.js";
import { getOccupancyTypes as getOccupancyTypesFromDatabase } from "./lotOccupancyDB/getOccupancyTypes.js"; import { getOccupancyTypes as getOccupancyTypesFromDatabase } from "./lotOccupancyDB/getOccupancyTypes.js";
import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from "./lotOccupancyDB/getOccupancyTypeFields.js";
import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderTypes.js"; import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderTypes.js";
@ -40,10 +41,7 @@ export function getLotOccupantTypesByLotOccupantType(lotOccupantType: string) {
const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase(); const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase();
return cachedLotOccupantTypes.find((currentLotOccupantType) => { return cachedLotOccupantTypes.find((currentLotOccupantType) => {
return ( return currentLotOccupantType.lotOccupantType.toLowerCase() === lotOccupantTypeLowerCase;
currentLotOccupantType.lotOccupantType.toLowerCase() ===
lotOccupantTypeLowerCase
);
}); });
} }
@ -128,6 +126,7 @@ export function clearLotTypesCache() {
*/ */
let occupancyTypes: recordTypes.OccupancyType[]; let occupancyTypes: recordTypes.OccupancyType[];
let allOccupancyTypeFields: recordTypes.OccupancyTypeField[];
export function getOccupancyTypes() { export function getOccupancyTypes() {
if (!occupancyTypes) { if (!occupancyTypes) {
@ -137,6 +136,13 @@ export function getOccupancyTypes() {
return occupancyTypes; return occupancyTypes;
} }
export function getAllOccupancyTypeFields() {
if (!allOccupancyTypeFields) {
allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase();
}
return allOccupancyTypeFields;
}
export function getOccupancyTypeById(occupancyTypeId: number) { export function getOccupancyTypeById(occupancyTypeId: number) {
const cachedOccupancyTypes = getOccupancyTypes(); const cachedOccupancyTypes = getOccupancyTypes();
@ -151,15 +157,13 @@ export function getOccupancyTypeByOccupancyType(occupancyTypeString: string) {
const occupancyTypeLowerCase = occupancyTypeString.toLowerCase(); const occupancyTypeLowerCase = occupancyTypeString.toLowerCase();
return cachedOccupancyTypes.find((currentOccupancyType) => { return cachedOccupancyTypes.find((currentOccupancyType) => {
return ( return currentOccupancyType.occupancyType.toLowerCase() === occupancyTypeLowerCase;
currentOccupancyType.occupancyType.toLowerCase() ===
occupancyTypeLowerCase
);
}); });
} }
export function clearOccupancyTypesCache() { export function clearOccupancyTypesCache() {
occupancyTypes = undefined; occupancyTypes = undefined;
allOccupancyTypeFields = undefined;
} }
/* /*
@ -194,7 +198,9 @@ export function getWorkOrderMilestoneTypes() {
return workOrderMilestoneTypes; return workOrderMilestoneTypes;
} }
export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string) { export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(
workOrderMilestoneTypeString: string
) {
const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes(); const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes();
const workOrderMilestoneTypeLowerCase = workOrderMilestoneTypeString.toLowerCase(); const workOrderMilestoneTypeLowerCase = workOrderMilestoneTypeString.toLowerCase();

View File

@ -24,8 +24,7 @@ export const initializeDatabase = () => {
")") ")")
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare("create index if not exists idx_lottypes_ordernumber" + .prepare("create index if not exists idx_lottypes_ordernumber" + " on LotTypes (orderNumber, lotType)")
" on LotTypes (orderNumber, lotType)")
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare("create table if not exists LotTypeFields (" + .prepare("create table if not exists LotTypeFields (" +
@ -56,8 +55,7 @@ export const initializeDatabase = () => {
")") ")")
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare("create index if not exists idx_lotstatuses_ordernumber" + .prepare("create index if not exists idx_lotstatuses_ordernumber" + " on LotStatuses (orderNumber, lotStatus)")
" on LotStatuses (orderNumber, lotStatus)")
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare("create table if not exists Maps (" + .prepare("create table if not exists Maps (" +
@ -136,7 +134,7 @@ export const initializeDatabase = () => {
lotOccupancyDB lotOccupancyDB
.prepare("create table if not exists OccupancyTypeFields (" + .prepare("create table if not exists OccupancyTypeFields (" +
"occupancyTypeFieldId integer not null primary key autoincrement," + "occupancyTypeFieldId integer not null primary key autoincrement," +
" occupancyTypeId integer not null," + " occupancyTypeId integer," +
" occupancyTypeField varchar(100) not null," + " occupancyTypeField varchar(100) not null," +
" occupancyTypeFieldValues text," + " occupancyTypeFieldValues text," +
" isRequired bit not null default 0," + " isRequired bit not null default 0," +
@ -257,8 +255,7 @@ export const initializeDatabase = () => {
")") ")")
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare("create index if not exists idx_fees_ordernumber" + .prepare("create index if not exists idx_fees_ordernumber" + " on Fees (orderNumber, feeName)")
" on Fees (orderNumber, feeName)")
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare("create table if not exists LotOccupancyFees (" + .prepare("create table if not exists LotOccupancyFees (" +

View File

@ -17,9 +17,7 @@ export const initializeDatabase = (): boolean => {
const lotOccupancyDB = sqlite(databasePath); const lotOccupancyDB = sqlite(databasePath);
const row = lotOccupancyDB const row = lotOccupancyDB
.prepare( .prepare("select name from sqlite_master where type = 'table' and name = 'WorkOrderMilestones'")
"select name from sqlite_master where type = 'table' and name = 'WorkOrderMilestones'"
)
.get(); .get();
if (!row) { if (!row) {
@ -39,10 +37,7 @@ export const initializeDatabase = (): boolean => {
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare( .prepare("create index if not exists idx_lottypes_ordernumber" + " on LotTypes (orderNumber, lotType)")
"create index if not exists idx_lottypes_ordernumber" +
" on LotTypes (orderNumber, lotType)"
)
.run(); .run();
lotOccupancyDB lotOccupancyDB
@ -84,8 +79,7 @@ export const initializeDatabase = (): boolean => {
lotOccupancyDB lotOccupancyDB
.prepare( .prepare(
"create index if not exists idx_lotstatuses_ordernumber" + "create index if not exists idx_lotstatuses_ordernumber" + " on LotStatuses (orderNumber, lotStatus)"
" on LotStatuses (orderNumber, lotStatus)"
) )
.run(); .run();
@ -192,7 +186,7 @@ export const initializeDatabase = (): boolean => {
.prepare( .prepare(
"create table if not exists OccupancyTypeFields (" + "create table if not exists OccupancyTypeFields (" +
"occupancyTypeFieldId integer not null primary key autoincrement," + "occupancyTypeFieldId integer not null primary key autoincrement," +
" occupancyTypeId integer not null," + " occupancyTypeId integer," +
" occupancyTypeField varchar(100) not null," + " occupancyTypeField varchar(100) not null," +
" occupancyTypeFieldValues text," + " occupancyTypeFieldValues text," +
" isRequired bit not null default 0," + " isRequired bit not null default 0," +
@ -347,10 +341,7 @@ export const initializeDatabase = (): boolean => {
.run(); .run();
lotOccupancyDB lotOccupancyDB
.prepare( .prepare("create index if not exists idx_fees_ordernumber" + " on Fees (orderNumber, feeName)")
"create index if not exists idx_fees_ordernumber" +
" on Fees (orderNumber, feeName)"
)
.run(); .run();
lotOccupancyDB lotOccupancyDB

View File

@ -1,6 +1,6 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from "../../types/recordTypes";
interface AddOccupancyTypeFieldForm { interface AddOccupancyTypeFieldForm {
occupancyTypeId: string | number; occupancyTypeId?: string | number;
occupancyTypeField: string; occupancyTypeField: string;
occupancyTypeFieldValues?: string; occupancyTypeFieldValues?: string;
isRequired?: string; isRequired?: string;

View File

@ -13,7 +13,7 @@ export const addOccupancyTypeField = (occupancyTypeFieldForm, requestSession) =>
" recordCreate_userName, recordCreate_timeMillis," + " recordCreate_userName, recordCreate_timeMillis," +
" recordUpdate_userName, recordUpdate_timeMillis)" + " recordUpdate_userName, recordUpdate_timeMillis)" +
" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
.run(occupancyTypeFieldForm.occupancyTypeId, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.pattern || "", occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); .run(occupancyTypeFieldForm.occupancyTypeId || undefined, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.pattern || "", occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close(); database.close();
clearOccupancyTypesCache(); clearOccupancyTypesCache();
return result.lastInsertRowid; return result.lastInsertRowid;

View File

@ -6,7 +6,7 @@ import type * as recordTypes from "../../types/recordTypes";
import { clearOccupancyTypesCache } from "../functions.cache.js"; import { clearOccupancyTypesCache } from "../functions.cache.js";
interface AddOccupancyTypeFieldForm { interface AddOccupancyTypeFieldForm {
occupancyTypeId: string | number; occupancyTypeId?: string | number;
occupancyTypeField: string; occupancyTypeField: string;
occupancyTypeFieldValues?: string; occupancyTypeFieldValues?: string;
isRequired?: string; isRequired?: string;
@ -36,7 +36,7 @@ export const addOccupancyTypeField = (
" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
) )
.run( .run(
occupancyTypeFieldForm.occupancyTypeId, occupancyTypeFieldForm.occupancyTypeId || undefined,
occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeField,
occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.occupancyTypeFieldValues || "",
occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.isRequired ? 1 : 0,

View File

@ -23,7 +23,7 @@ export const getLotOccupancyFields = (lotOccupancyId, connectedDatabase) => {
" f.orderNumber" + " f.orderNumber" +
" from OccupancyTypeFields f" + " from OccupancyTypeFields f" +
" where f.recordDelete_timeMillis is null" + " where f.recordDelete_timeMillis is null" +
" and f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?)" + " and (f.occupancyTypeId is null or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))" +
" and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" + " and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" +
" order by orderNumber, occupancyTypeField") " order by orderNumber, occupancyTypeField")
.all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId); .all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId);

View File

@ -33,7 +33,7 @@ export const getLotOccupancyFields = (
" f.orderNumber" + " f.orderNumber" +
" from OccupancyTypeFields f" + " from OccupancyTypeFields f" +
" where f.recordDelete_timeMillis is null" + " where f.recordDelete_timeMillis is null" +
" and f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?)" + " and (f.occupancyTypeId is null or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))" +
" and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" + " and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" +
" order by orderNumber, occupancyTypeField" " order by orderNumber, occupancyTypeField"
) )

View File

@ -0,0 +1,4 @@
import sqlite from "better-sqlite3";
import type * as recordTypes from "../../types/recordTypes";
export declare const getOccupancyTypeFields: (occupancyTypeId?: number, connectedDatabase?: sqlite.Database) => recordTypes.OccupancyTypeField[];
export default getOccupancyTypeFields;

View File

@ -0,0 +1,36 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
export const getOccupancyTypeFields = (occupancyTypeId, connectedDatabase) => {
const database = connectedDatabase || sqlite(databasePath);
const sqlParameters = [];
if (occupancyTypeId) {
sqlParameters.push(occupancyTypeId);
}
const occupancyTypeFields = database
.prepare("select occupancyTypeFieldId," +
" occupancyTypeField, occupancyTypeFieldValues, isRequired, pattern," +
" minimumLength, maximumLength," +
" orderNumber" +
" from OccupancyTypeFields" +
" where recordDelete_timeMillis is null" +
(occupancyTypeId ? " and occupancyTypeId = ?" : " and occupancyTypeId is null") +
" order by orderNumber, occupancyTypeField")
.all(sqlParameters);
let expectedFieldOrderNumber = -1;
for (const occupancyTypeField of occupancyTypeFields) {
expectedFieldOrderNumber += 1;
if (occupancyTypeField.orderNumber !== expectedFieldOrderNumber) {
database
.prepare("update OccupancyTypeFields" +
" set orderNumber = ?" +
" where occupancyTypeFieldId = ?")
.run(expectedFieldOrderNumber, occupancyTypeField.occupancyTypeFieldId);
occupancyTypeField.orderNumber = expectedFieldOrderNumber;
}
}
if (!connectedDatabase) {
database.close();
}
return occupancyTypeFields;
};
export default getOccupancyTypeFields;

View File

@ -0,0 +1,57 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import type * as recordTypes from "../../types/recordTypes";
export const getOccupancyTypeFields = (
occupancyTypeId?: number,
connectedDatabase?: sqlite.Database
): recordTypes.OccupancyTypeField[] => {
const database = connectedDatabase || sqlite(databasePath);
const sqlParameters = [];
if (occupancyTypeId) {
sqlParameters.push(occupancyTypeId);
}
const occupancyTypeFields: recordTypes.OccupancyTypeField[] = database
.prepare(
"select occupancyTypeFieldId," +
" occupancyTypeField, occupancyTypeFieldValues, isRequired, pattern," +
" minimumLength, maximumLength," +
" orderNumber" +
" from OccupancyTypeFields" +
" where recordDelete_timeMillis is null" +
(occupancyTypeId ? " and occupancyTypeId = ?" : " and occupancyTypeId is null") +
" order by orderNumber, occupancyTypeField"
)
.all(sqlParameters);
let expectedFieldOrderNumber = -1;
for (const occupancyTypeField of occupancyTypeFields) {
expectedFieldOrderNumber += 1;
if (occupancyTypeField.orderNumber !== expectedFieldOrderNumber) {
database
.prepare(
"update OccupancyTypeFields" +
" set orderNumber = ?" +
" where occupancyTypeFieldId = ?"
)
.run(expectedFieldOrderNumber, occupancyTypeField.occupancyTypeFieldId);
occupancyTypeField.orderNumber = expectedFieldOrderNumber;
}
}
if (!connectedDatabase) {
database.close();
}
return occupancyTypeFields;
};
export default getOccupancyTypeFields;

View File

@ -1,5 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { getOccupancyTypeFields } from "./getOccupancyTypeFields.js";
export const getOccupancyTypes = () => { export const getOccupancyTypes = () => {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const occupancyTypes = database const occupancyTypes = database
@ -13,22 +14,11 @@ export const getOccupancyTypes = () => {
expectedTypeOrderNumber += 1; expectedTypeOrderNumber += 1;
if (occupancyType.orderNumber !== expectedTypeOrderNumber) { if (occupancyType.orderNumber !== expectedTypeOrderNumber) {
database database
.prepare("update OccupancyTypes" + .prepare("update OccupancyTypes" + " set orderNumber = ?" + " where occupancyTypeId = ?")
" set orderNumber = ?" +
" where occupancyTypeId = ?")
.run(expectedTypeOrderNumber, occupancyType.occupancyTypeId); .run(expectedTypeOrderNumber, occupancyType.occupancyTypeId);
occupancyType.orderNumber = expectedTypeOrderNumber; occupancyType.orderNumber = expectedTypeOrderNumber;
} }
occupancyType.occupancyTypeFields = database occupancyType.occupancyTypeFields = getOccupancyTypeFields(occupancyType.occupancyTypeId, database);
.prepare("select occupancyTypeFieldId," +
" occupancyTypeField, occupancyTypeFieldValues, isRequired, pattern," +
" minimumLength, maximumLength," +
" orderNumber" +
" from OccupancyTypeFields" +
" where recordDelete_timeMillis is null" +
" and occupancyTypeId = ?" +
" order by orderNumber, occupancyTypeField")
.all(occupancyType.occupancyTypeId);
let expectedFieldOrderNumber = -1; let expectedFieldOrderNumber = -1;
for (const occupancyTypeField of occupancyType.occupancyTypeFields) { for (const occupancyTypeField of occupancyType.occupancyTypeFields) {
expectedFieldOrderNumber += 1; expectedFieldOrderNumber += 1;

View File

@ -2,6 +2,8 @@ import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { getOccupancyTypeFields } from "./getOccupancyTypeFields.js";
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from "../../types/recordTypes";
export const getOccupancyTypes = (): recordTypes.OccupancyType[] => { export const getOccupancyTypes = (): recordTypes.OccupancyType[] => {
@ -24,27 +26,17 @@ export const getOccupancyTypes = (): recordTypes.OccupancyType[] => {
if (occupancyType.orderNumber !== expectedTypeOrderNumber) { if (occupancyType.orderNumber !== expectedTypeOrderNumber) {
database database
.prepare( .prepare(
"update OccupancyTypes" + "update OccupancyTypes" + " set orderNumber = ?" + " where occupancyTypeId = ?"
" set orderNumber = ?" +
" where occupancyTypeId = ?"
) )
.run(expectedTypeOrderNumber, occupancyType.occupancyTypeId); .run(expectedTypeOrderNumber, occupancyType.occupancyTypeId);
occupancyType.orderNumber = expectedTypeOrderNumber; occupancyType.orderNumber = expectedTypeOrderNumber;
} }
occupancyType.occupancyTypeFields = database occupancyType.occupancyTypeFields = getOccupancyTypeFields(
.prepare( occupancyType.occupancyTypeId,
"select occupancyTypeFieldId," + database
" occupancyTypeField, occupancyTypeFieldValues, isRequired, pattern," + );
" minimumLength, maximumLength," +
" orderNumber" +
" from OccupancyTypeFields" +
" where recordDelete_timeMillis is null" +
" and occupancyTypeId = ?" +
" order by orderNumber, occupancyTypeField"
)
.all(occupancyType.occupancyTypeId);
let expectedFieldOrderNumber = -1; let expectedFieldOrderNumber = -1;
@ -58,10 +50,7 @@ export const getOccupancyTypes = (): recordTypes.OccupancyType[] => {
" set orderNumber = ?" + " set orderNumber = ?" +
" where occupancyTypeFieldId = ?" " where occupancyTypeFieldId = ?"
) )
.run( .run(expectedFieldOrderNumber, occupancyTypeField.occupancyTypeFieldId);
expectedFieldOrderNumber,
occupancyTypeField.occupancyTypeFieldId
);
occupancyTypeField.orderNumber = expectedFieldOrderNumber; occupancyTypeField.orderNumber = expectedFieldOrderNumber;
} }

View File

@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
const containerElement = document.querySelector("#container--occupancyTypes"); const containerElement = document.querySelector("#container--occupancyTypes");
let occupancyTypes = exports.occupancyTypes; let occupancyTypes = exports.occupancyTypes;
delete exports.occupancyTypes; delete exports.occupancyTypes;
let allOccupancyTypeFields = exports.allOccupancyTypeFields;
delete exports.allOccupancyTypeFields;
const expandedOccupancyTypes = new Set(); const expandedOccupancyTypes = new Set();
const toggleOccupancyTypeFields = (clickEvent) => { const toggleOccupancyTypeFields = (clickEvent) => {
const toggleButtonElement = clickEvent.currentTarget; const toggleButtonElement = clickEvent.currentTarget;
@ -25,26 +27,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
panelBlockElement.classList.toggle("is-hidden"); panelBlockElement.classList.toggle("is-hidden");
} }
}; };
const occupancyTypeResponseHandler = (responseJSON) => {
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
allOccupancyTypeFields = responseJSON.allOccupancyTypeFields;
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Updating " + exports.aliases.occupancy + " Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
};
const deleteOccupancyType = (clickEvent) => { const deleteOccupancyType = (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 doDelete = () => { const doDelete = () => {
cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyType", { cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyType", {
occupancyTypeId occupancyTypeId
}, (responseJSON) => { }, occupancyTypeResponseHandler);
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Deleting " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
});
}; };
bulmaJS.confirm({ bulmaJS.confirm({
title: "Delete " + exports.aliases.occupancy + " Type", title: "Delete " + exports.aliases.occupancy + " Type",
@ -67,19 +69,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
const doEdit = (submitEvent) => { const doEdit = (submitEvent) => {
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyType", submitEvent.currentTarget, (responseJSON) => { cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyType", submitEvent.currentTarget, (responseJSON) => {
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction(); editCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Updating " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
}); });
}; };
@ -92,9 +84,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
onshown: (modalElement, closeModalFunction) => { onshown: (modalElement, closeModalFunction) => {
editCloseModalFunction = closeModalFunction; editCloseModalFunction = closeModalFunction;
modalElement.querySelector("#occupancyTypeEdit--occupancyType").focus(); modalElement.querySelector("#occupancyTypeEdit--occupancyType").focus();
modalElement modalElement.querySelector("form").addEventListener("submit", doEdit);
.querySelector("form")
.addEventListener("submit", doEdit);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
onremoved: () => { onremoved: () => {
@ -108,33 +98,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
const doAdd = (submitEvent) => { const doAdd = (submitEvent) => {
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { cityssm.postJSON(urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => {
if (responseJSON.success) {
expandedOccupancyTypes.add(occupancyTypeId); expandedOccupancyTypes.add(occupancyTypeId);
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) {
addCloseModalFunction(); addCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
openEditOccupancyTypeField(occupancyTypeId, responseJSON.occupancyTypeFieldId); openEditOccupancyTypeField(occupancyTypeId, responseJSON.occupancyTypeFieldId);
} }
else {
bulmaJS.alert({
title: "Error Adding Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
}); });
}; };
cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField", { cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField", {
onshow: (modalElement) => { onshow: (modalElement) => {
los.populateAliases(modalElement); los.populateAliases(modalElement);
if (occupancyTypeId) {
modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value = occupancyTypeId.toString(); modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value = occupancyTypeId.toString();
}
}, },
onshown: (modalElement, closeModalFunction) => { onshown: (modalElement, closeModalFunction) => {
addCloseModalFunction = closeModalFunction; addCloseModalFunction = closeModalFunction;
modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus(); modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus();
modalElement modalElement.querySelector("form").addEventListener("submit", doAdd);
.querySelector("form")
.addEventListener("submit", doAdd);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
onremoved: () => { onremoved: () => {
@ -147,51 +129,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;
cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeUp", { cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeUp", {
occupancyTypeId occupancyTypeId
}, (responseJSON) => { }, occupancyTypeResponseHandler);
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Moving " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
});
}; };
const moveOccupancyTypeDown = (clickEvent) => { const moveOccupancyTypeDown = (clickEvent) => {
clickEvent.preventDefault(); clickEvent.preventDefault();
const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;
cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeDown", { cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeDown", {
occupancyTypeId occupancyTypeId
}, (responseJSON) => { }, occupancyTypeResponseHandler);
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Moving " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
});
}; };
const openEditOccupancyTypeField = (occupancyTypeId, occupancyTypeFieldId) => { const openEditOccupancyTypeField = (occupancyTypeId, occupancyTypeFieldId) => {
let occupancyTypeField;
if (occupancyTypeId) {
const occupancyType = occupancyTypes.find((currentOccupancyType) => { const occupancyType = occupancyTypes.find((currentOccupancyType) => {
return currentOccupancyType.occupancyTypeId === occupancyTypeId; return currentOccupancyType.occupancyTypeId === occupancyTypeId;
}); });
const occupancyTypeField = occupancyType.occupancyTypeFields.find((currentOccupancyTypeField) => { occupancyTypeField = occupancyType.occupancyTypeFields.find((currentOccupancyTypeField) => {
return (currentOccupancyTypeField.occupancyTypeFieldId === return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
occupancyTypeFieldId);
}); });
}
else {
occupancyTypeField = allOccupancyTypeFields.find((currentOccupancyTypeField) => {
return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
});
}
let minimumLengthElement; let minimumLengthElement;
let maximumLengthElement; let maximumLengthElement;
let patternElement; let patternElement;
@ -215,17 +176,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
const doUpdate = (submitEvent) => { const doUpdate = (submitEvent) => {
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => {
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
editCloseModalFunction(); editCloseModalFunction();
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Updating Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
}); });
}; };
@ -234,17 +187,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyTypeField", { cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyTypeField", {
occupancyTypeFieldId occupancyTypeFieldId
}, (responseJSON) => { }, (responseJSON) => {
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
editCloseModalFunction(); editCloseModalFunction();
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Deleting Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
}); });
}; };
@ -265,16 +210,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value = occupancyTypeField.occupancyTypeField; modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value = occupancyTypeField.occupancyTypeField;
modalElement.querySelector("#occupancyTypeFieldEdit--isRequired").value = occupancyTypeField.isRequired ? "1" : "0"; modalElement.querySelector("#occupancyTypeFieldEdit--isRequired").value = occupancyTypeField.isRequired ? "1" : "0";
minimumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--minimumLength"); minimumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--minimumLength");
minimumLengthElement.value = minimumLengthElement.value = occupancyTypeField.minimumLength.toString();
occupancyTypeField.minimumLength.toString();
maximumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--maximumLength"); maximumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--maximumLength");
maximumLengthElement.value = maximumLengthElement.value = occupancyTypeField.maximumLength.toString();
occupancyTypeField.maximumLength.toString();
patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern"); patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern");
patternElement.value = occupancyTypeField.pattern; patternElement.value = occupancyTypeField.pattern;
occupancyTypeFieldValuesElement = modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues"); occupancyTypeFieldValuesElement = modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues");
occupancyTypeFieldValuesElement.value = occupancyTypeFieldValuesElement.value = occupancyTypeField.occupancyTypeFieldValues;
occupancyTypeField.occupancyTypeFieldValues;
toggleInputFields(); toggleInputFields();
}, },
onshown: (modalElement, closeModalFunction) => { onshown: (modalElement, closeModalFunction) => {
@ -282,9 +224,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
bulmaJS.init(modalElement); bulmaJS.init(modalElement);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
cityssm.enableNavBlocker(); cityssm.enableNavBlocker();
modalElement modalElement.querySelector("form").addEventListener("submit", doUpdate);
.querySelector("form")
.addEventListener("submit", doUpdate);
minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin); minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin);
updateMaximumLengthMin(); updateMaximumLengthMin();
occupancyTypeFieldValuesElement.addEventListener("keyup", toggleInputFields); occupancyTypeFieldValuesElement.addEventListener("keyup", toggleInputFields);
@ -304,17 +244,91 @@ Object.defineProperty(exports, "__esModule", { value: true });
const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10); const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10);
openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId); openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId);
}; };
const renderOccupancyTypeFields = (panelElement, occupancyTypeId, occupancyTypeFields) => {
if (occupancyTypeFields.length === 0) {
panelElement.insertAdjacentHTML("beforeend", '<div class="panel-block is-block' +
(!occupancyTypeId || expandedOccupancyTypes.has(occupancyTypeId)
? ""
: " is-hidden") +
'">' +
'<div class="message is-info">' +
'<p class="message-body">There are no additional fields.</p>' +
"</div>" +
"</div>");
}
else {
for (const occupancyTypeField of occupancyTypeFields) {
const panelBlockElement = document.createElement("div");
panelBlockElement.className = "panel-block is-block container--occupancyTypeField";
if (occupancyTypeId && !expandedOccupancyTypes.has(occupancyTypeId)) {
panelBlockElement.classList.add("is-hidden");
}
panelBlockElement.dataset.occupancyTypeFieldId =
occupancyTypeField.occupancyTypeFieldId.toString();
panelBlockElement.innerHTML =
'<div class="level is-mobile">' +
'<div class="level-left">' +
('<div class="level-item">' +
'<a class="has-text-weight-bold button--editOccupancyTypeField" href="#">' +
cityssm.escapeHTML(occupancyTypeField.occupancyTypeField) +
"</a>" +
"</div>") +
"</div>" +
'<div class="level-right">' +
('<div class="level-item">' +
'<div class="field has-addons">' +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldUp" data-tooltip="Move Up" type="button" aria-label="Move Up">' +
'<i class="fas fa-arrow-up" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldDown" data-tooltip="Move Down" type="button" aria-label="Move Down">' +
'<i class="fas fa-arrow-down" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
"</div>" +
"</div>") +
"</div>" +
"</div>";
panelBlockElement
.querySelector(".button--editOccupancyTypeField")
.addEventListener("click", openEditOccupancyTypeFieldByClick);
panelElement.append(panelBlockElement);
}
}
};
const renderOccupancyTypes = () => { const renderOccupancyTypes = () => {
if (occupancyTypes.length === 0) {
containerElement.innerHTML = containerElement.innerHTML =
'<div class="message is-warning>' + '<div class="panel container--occupancyType" id="container--allOccupancyTypeFields" data-occupancy-type-id="">' +
'<div class="panel-heading">' +
('<div class="level is-mobile">' +
('<div class="level-left">' +
'<div class="level-item"><h2 class="title is-4">(All Occupancy Types)</h2></div>' +
"</div>") +
('<div class="level-right">' +
('<div class="level-item">' +
'<button class="button is-success is-small button--addOccupancyTypeField" type="button">' +
'<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>' +
"<span>Add Field</span>" +
"</button>" +
"</div>") +
"</div>") +
"</div>") +
"</div>" +
"</div>";
renderOccupancyTypeFields(containerElement.querySelector("#container--allOccupancyTypeFields"), undefined, allOccupancyTypeFields);
containerElement
.querySelector(".button--addOccupancyTypeField")
.addEventListener("click", openAddOccupancyTypeField);
if (occupancyTypes.length === 0) {
containerElement.insertAdjacentHTML("afterbegin", '<div class="message is-warning>' +
'<p class="message-body">There are no active ' + '<p class="message-body">There are no active ' +
exports.aliases.occupancy.toLowerCase() + exports.aliases.occupancy.toLowerCase() +
" types.</p>" + " types.</p>" +
"</div>"; "</div>");
return; return;
} }
containerElement.innerHTML = "";
for (const occupancyType of occupancyTypes) { for (const occupancyType of occupancyTypes) {
const occupancyTypeContainer = document.createElement("div"); const occupancyTypeContainer = document.createElement("div");
occupancyTypeContainer.className = "panel container--occupancyType"; occupancyTypeContainer.className = "panel container--occupancyType";
@ -375,59 +389,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
"</div>") + "</div>") +
"</div>" + "</div>" +
"</div>"; "</div>";
if (occupancyType.occupancyTypeFields.length === 0) { renderOccupancyTypeFields(occupancyTypeContainer, occupancyType.occupancyTypeId, occupancyType.occupancyTypeFields);
occupancyTypeContainer.insertAdjacentHTML("beforeend", '<div class="panel-block is-block' +
(expandedOccupancyTypes.has(occupancyType.occupancyTypeId)
? ""
: " is-hidden") +
'">' +
'<div class="message is-info">' +
'<p class="message-body">There are no additional fields.</p>' +
"</div>" +
"</div>");
}
else {
for (const occupancyTypeField of occupancyType.occupancyTypeFields) {
const panelBlockElement = document.createElement("div");
panelBlockElement.className =
"panel-block is-block container--occupancyTypeField";
if (!expandedOccupancyTypes.has(occupancyType.occupancyTypeId)) {
panelBlockElement.classList.add("is-hidden");
}
panelBlockElement.dataset.occupancyTypeFieldId =
occupancyTypeField.occupancyTypeFieldId.toString();
panelBlockElement.innerHTML =
'<div class="level is-mobile">' +
'<div class="level-left">' +
('<div class="level-item">' +
'<a class="has-text-weight-bold button--editOccupancyTypeField" href="#">' +
cityssm.escapeHTML(occupancyTypeField.occupancyTypeField) +
"</a>" +
"</div>") +
"</div>" +
'<div class="level-right">' +
('<div class="level-item">' +
'<div class="field has-addons">' +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldUp" data-tooltip="Move Up" type="button" aria-label="Move Up">' +
'<i class="fas fa-arrow-up" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldDown" data-tooltip="Move Down" type="button" aria-label="Move Down">' +
'<i class="fas fa-arrow-down" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
"</div>" +
"</div>") +
"</div>" +
"</div>";
panelBlockElement
.querySelector(".button--editOccupancyTypeField")
.addEventListener("click", openEditOccupancyTypeFieldByClick);
occupancyTypeContainer.append(panelBlockElement);
}
}
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--toggleOccupancyTypeFields") .querySelector(".button--toggleOccupancyTypeFields")
.addEventListener("click", toggleOccupancyTypeFields); .addEventListener("click", toggleOccupancyTypeFields);
@ -449,9 +411,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
containerElement.append(occupancyTypeContainer); containerElement.append(occupancyTypeContainer);
} }
}; };
document document.querySelector("#button--addOccupancyType").addEventListener("click", () => {
.querySelector("#button--addOccupancyType")
.addEventListener("click", () => {
let addCloseModalFunction; let addCloseModalFunction;
const doAdd = (submitEvent) => { const doAdd = (submitEvent) => {
submitEvent.preventDefault(); submitEvent.preventDefault();
@ -463,9 +423,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
else { else {
bulmaJS.alert({ bulmaJS.alert({
title: "Error Adding " + title: "Error Adding " + exports.aliases.occupancy + " Type",
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage, message: responseJSON.errorMessage,
contextualColorName: "danger" contextualColorName: "danger"
}); });
@ -479,9 +437,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
onshown: (modalElement, closeModalFunction) => { onshown: (modalElement, closeModalFunction) => {
addCloseModalFunction = closeModalFunction; addCloseModalFunction = closeModalFunction;
modalElement.querySelector("#occupancyTypeAdd--occupancyType").focus(); modalElement.querySelector("#occupancyTypeAdd--occupancyType").focus();
modalElement modalElement.querySelector("form").addEventListener("submit", doAdd);
.querySelector("form")
.addEventListener("submit", doAdd);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
onremoved: () => { onremoved: () => {

View File

@ -15,27 +15,24 @@ declare const bulmaJS: BulmaJS;
const urlPrefix = document.querySelector("main").dataset.urlPrefix; const urlPrefix = document.querySelector("main").dataset.urlPrefix;
const containerElement = document.querySelector( const containerElement = document.querySelector("#container--occupancyTypes") as HTMLElement;
"#container--occupancyTypes"
) as HTMLElement;
let occupancyTypes: recordTypes.OccupancyType[] = exports.occupancyTypes; let occupancyTypes: recordTypes.OccupancyType[] = exports.occupancyTypes;
delete exports.occupancyTypes; delete exports.occupancyTypes;
let allOccupancyTypeFields: recordTypes.OccupancyTypeField[] = exports.allOccupancyTypeFields;
delete exports.allOccupancyTypeFields;
const expandedOccupancyTypes = new Set<number>(); const expandedOccupancyTypes = new Set<number>();
const toggleOccupancyTypeFields = (clickEvent: Event) => { const toggleOccupancyTypeFields = (clickEvent: Event) => {
const toggleButtonElement = const toggleButtonElement = clickEvent.currentTarget as HTMLButtonElement;
clickEvent.currentTarget as HTMLButtonElement;
const occupancyTypeElement = toggleButtonElement.closest( const occupancyTypeElement = toggleButtonElement.closest(
".container--occupancyType" ".container--occupancyType"
) as HTMLElement; ) as HTMLElement;
const occupancyTypeId = Number.parseInt( const occupancyTypeId = Number.parseInt(occupancyTypeElement.dataset.occupancyTypeId, 10);
occupancyTypeElement.dataset.occupancyTypeId,
10
);
if (expandedOccupancyTypes.has(occupancyTypeId)) { if (expandedOccupancyTypes.has(occupancyTypeId)) {
expandedOccupancyTypes.delete(occupancyTypeId); expandedOccupancyTypes.delete(occupancyTypeId);
@ -43,20 +40,36 @@ declare const bulmaJS: BulmaJS;
expandedOccupancyTypes.add(occupancyTypeId); expandedOccupancyTypes.add(occupancyTypeId);
} }
toggleButtonElement.innerHTML = expandedOccupancyTypes.has( toggleButtonElement.innerHTML = expandedOccupancyTypes.has(occupancyTypeId)
occupancyTypeId
)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>' ? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'; : '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>';
const panelBlockElements = const panelBlockElements = occupancyTypeElement.querySelectorAll(".panel-block");
occupancyTypeElement.querySelectorAll(".panel-block");
for (const panelBlockElement of panelBlockElements) { for (const panelBlockElement of panelBlockElements) {
panelBlockElement.classList.toggle("is-hidden"); panelBlockElement.classList.toggle("is-hidden");
} }
}; };
const occupancyTypeResponseHandler = (responseJSON: {
success: boolean;
errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[];
allOccupancyTypeFields?: recordTypes.OccupancyTypeField[];
}) => {
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
allOccupancyTypeFields = responseJSON.allOccupancyTypeFields;
renderOccupancyTypes();
} else {
bulmaJS.alert({
title: "Error Updating " + exports.aliases.occupancy + " Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
};
const deleteOccupancyType = (clickEvent: Event) => { const deleteOccupancyType = (clickEvent: Event) => {
const occupancyTypeId = Number.parseInt( const occupancyTypeId = Number.parseInt(
( (
@ -73,25 +86,7 @@ declare const bulmaJS: BulmaJS;
{ {
occupancyTypeId occupancyTypeId
}, },
(responseJSON: { occupancyTypeResponseHandler
success: boolean;
errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[];
}) => {
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
} else {
bulmaJS.alert({
title:
"Error Deleting " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
}
); );
}; };
@ -135,20 +130,11 @@ declare const bulmaJS: BulmaJS;
success: boolean; success: boolean;
errorMessage?: string; errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[]; occupancyTypes?: recordTypes.OccupancyType[];
allOccupancyTypeFields?: recordTypes.OccupancyTypeField[];
}) => { }) => {
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction(); editCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
} else {
bulmaJS.alert({
title:
"Error Updating " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
} }
); );
@ -179,9 +165,7 @@ declare const bulmaJS: BulmaJS;
) as HTMLInputElement ) as HTMLInputElement
).focus(); ).focus();
modalElement modalElement.querySelector("form").addEventListener("submit", doEdit);
.querySelector("form")
.addEventListener("submit", doEdit);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
@ -213,25 +197,18 @@ declare const bulmaJS: BulmaJS;
success: boolean; success: boolean;
errorMessage?: string; errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[]; occupancyTypes?: recordTypes.OccupancyType[];
allOccupancyTypeFields?: recordTypes.OccupancyTypeField[];
occupancyTypeFieldId?: number; occupancyTypeFieldId?: number;
}) => { }) => {
if (responseJSON.success) {
expandedOccupancyTypes.add(occupancyTypeId); expandedOccupancyTypes.add(occupancyTypeId);
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) {
addCloseModalFunction(); addCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
openEditOccupancyTypeField( openEditOccupancyTypeField(
occupancyTypeId, occupancyTypeId,
responseJSON.occupancyTypeFieldId responseJSON.occupancyTypeFieldId
); );
} else {
bulmaJS.alert({
title: "Error Adding Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
} }
); );
@ -241,11 +218,13 @@ declare const bulmaJS: BulmaJS;
onshow: (modalElement) => { onshow: (modalElement) => {
los.populateAliases(modalElement); los.populateAliases(modalElement);
if (occupancyTypeId) {
( (
modalElement.querySelector( modalElement.querySelector(
"#occupancyTypeFieldAdd--occupancyTypeId" "#occupancyTypeFieldAdd--occupancyTypeId"
) as HTMLInputElement ) as HTMLInputElement
).value = occupancyTypeId.toString(); ).value = occupancyTypeId.toString();
}
}, },
onshown: (modalElement, closeModalFunction) => { onshown: (modalElement, closeModalFunction) => {
addCloseModalFunction = closeModalFunction; addCloseModalFunction = closeModalFunction;
@ -256,9 +235,7 @@ declare const bulmaJS: BulmaJS;
) as HTMLInputElement ) as HTMLInputElement
).focus(); ).focus();
modalElement modalElement.querySelector("form").addEventListener("submit", doAdd);
.querySelector("form")
.addEventListener("submit", doAdd);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
@ -282,25 +259,7 @@ declare const bulmaJS: BulmaJS;
{ {
occupancyTypeId occupancyTypeId
}, },
(responseJSON: { occupancyTypeResponseHandler
success: boolean;
errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[];
}) => {
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
} else {
bulmaJS.alert({
title:
"Error Moving " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
}
); );
}; };
@ -318,44 +277,28 @@ declare const bulmaJS: BulmaJS;
{ {
occupancyTypeId occupancyTypeId
}, },
(responseJSON: { occupancyTypeResponseHandler
success: boolean;
errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[];
}) => {
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
} else {
bulmaJS.alert({
title:
"Error Moving " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
}
); );
}; };
const openEditOccupancyTypeField = ( const openEditOccupancyTypeField = (occupancyTypeId: number, occupancyTypeFieldId: number) => {
occupancyTypeId: number, let occupancyTypeField: recordTypes.OccupancyTypeField;
occupancyTypeFieldId: number
) => { if (occupancyTypeId) {
const occupancyType = occupancyTypes.find((currentOccupancyType) => { const occupancyType = occupancyTypes.find((currentOccupancyType) => {
return currentOccupancyType.occupancyTypeId === occupancyTypeId; return currentOccupancyType.occupancyTypeId === occupancyTypeId;
}); });
const occupancyTypeField = occupancyType.occupancyTypeFields.find( occupancyTypeField = occupancyType.occupancyTypeFields.find(
(currentOccupancyTypeField) => { (currentOccupancyTypeField) => {
return ( return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
currentOccupancyTypeField.occupancyTypeFieldId ===
occupancyTypeFieldId
);
} }
); );
} else {
occupancyTypeField = allOccupancyTypeFields.find((currentOccupancyTypeField) => {
return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
});
}
let minimumLengthElement: HTMLInputElement; let minimumLengthElement: HTMLInputElement;
let maximumLengthElement: HTMLInputElement; let maximumLengthElement: HTMLInputElement;
@ -391,16 +334,9 @@ declare const bulmaJS: BulmaJS;
errorMessage?: string; errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[]; occupancyTypes?: recordTypes.OccupancyType[];
}) => { }) => {
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
editCloseModalFunction(); editCloseModalFunction();
renderOccupancyTypes();
} else {
bulmaJS.alert({
title: "Error Updating Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
} }
); );
@ -418,16 +354,9 @@ declare const bulmaJS: BulmaJS;
errorMessage?: string; errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[]; occupancyTypes?: recordTypes.OccupancyType[];
}) => { }) => {
occupancyTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
editCloseModalFunction(); editCloseModalFunction();
renderOccupancyTypes();
} else {
bulmaJS.alert({
title: "Error Deleting Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
} }
} }
); );
@ -471,19 +400,15 @@ declare const bulmaJS: BulmaJS;
"#occupancyTypeFieldEdit--minimumLength" "#occupancyTypeFieldEdit--minimumLength"
); );
minimumLengthElement.value = minimumLengthElement.value = occupancyTypeField.minimumLength.toString();
occupancyTypeField.minimumLength.toString();
maximumLengthElement = modalElement.querySelector( maximumLengthElement = modalElement.querySelector(
"#occupancyTypeFieldEdit--maximumLength" "#occupancyTypeFieldEdit--maximumLength"
); );
maximumLengthElement.value = maximumLengthElement.value = occupancyTypeField.maximumLength.toString();
occupancyTypeField.maximumLength.toString();
patternElement = modalElement.querySelector( patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern");
"#occupancyTypeFieldEdit--pattern"
);
patternElement.value = occupancyTypeField.pattern; patternElement.value = occupancyTypeField.pattern;
@ -491,8 +416,7 @@ declare const bulmaJS: BulmaJS;
"#occupancyTypeFieldEdit--occupancyTypeFieldValues" "#occupancyTypeFieldEdit--occupancyTypeFieldValues"
); );
occupancyTypeFieldValuesElement.value = occupancyTypeFieldValuesElement.value = occupancyTypeField.occupancyTypeFieldValues;
occupancyTypeField.occupancyTypeFieldValues;
toggleInputFields(); toggleInputFields();
}, },
@ -503,20 +427,12 @@ declare const bulmaJS: BulmaJS;
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
cityssm.enableNavBlocker(); cityssm.enableNavBlocker();
modalElement modalElement.querySelector("form").addEventListener("submit", doUpdate);
.querySelector("form")
.addEventListener("submit", doUpdate);
minimumLengthElement.addEventListener( minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin);
"keyup",
updateMaximumLengthMin
);
updateMaximumLengthMin(); updateMaximumLengthMin();
occupancyTypeFieldValuesElement.addEventListener( occupancyTypeFieldValuesElement.addEventListener("keyup", toggleInputFields);
"keyup",
toggleInputFields
);
modalElement modalElement
.querySelector("#button--deleteOccupancyTypeField") .querySelector("#button--deleteOccupancyTypeField")
@ -553,20 +469,115 @@ declare const bulmaJS: BulmaJS;
openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId); openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId);
}; };
const renderOccupancyTypeFields = (
panelElement: HTMLElement,
occupancyTypeId: number | undefined,
occupancyTypeFields: recordTypes.OccupancyTypeField[]
) => {
if (occupancyTypeFields.length === 0) {
panelElement.insertAdjacentHTML(
"beforeend",
'<div class="panel-block is-block' +
(!occupancyTypeId || expandedOccupancyTypes.has(occupancyTypeId)
? ""
: " is-hidden") +
'">' +
'<div class="message is-info">' +
'<p class="message-body">There are no additional fields.</p>' +
"</div>" +
"</div>"
);
} else {
for (const occupancyTypeField of occupancyTypeFields) {
const panelBlockElement = document.createElement("div");
panelBlockElement.className = "panel-block is-block container--occupancyTypeField";
if (occupancyTypeId && !expandedOccupancyTypes.has(occupancyTypeId)) {
panelBlockElement.classList.add("is-hidden");
}
panelBlockElement.dataset.occupancyTypeFieldId =
occupancyTypeField.occupancyTypeFieldId.toString();
panelBlockElement.innerHTML =
'<div class="level is-mobile">' +
'<div class="level-left">' +
('<div class="level-item">' +
'<a class="has-text-weight-bold button--editOccupancyTypeField" href="#">' +
cityssm.escapeHTML(occupancyTypeField.occupancyTypeField) +
"</a>" +
"</div>") +
"</div>" +
'<div class="level-right">' +
('<div class="level-item">' +
'<div class="field has-addons">' +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldUp" data-tooltip="Move Up" type="button" aria-label="Move Up">' +
'<i class="fas fa-arrow-up" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldDown" data-tooltip="Move Down" type="button" aria-label="Move Down">' +
'<i class="fas fa-arrow-down" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
"</div>" +
"</div>") +
"</div>" +
"</div>";
panelBlockElement
.querySelector(".button--editOccupancyTypeField")
.addEventListener("click", openEditOccupancyTypeFieldByClick);
panelElement.append(panelBlockElement);
}
}
};
const renderOccupancyTypes = () => { const renderOccupancyTypes = () => {
if (occupancyTypes.length === 0) {
containerElement.innerHTML = containerElement.innerHTML =
'<div class="panel container--occupancyType" id="container--allOccupancyTypeFields" data-occupancy-type-id="">' +
'<div class="panel-heading">' +
('<div class="level is-mobile">' +
('<div class="level-left">' +
'<div class="level-item"><h2 class="title is-4">(All Occupancy Types)</h2></div>' +
"</div>") +
('<div class="level-right">' +
('<div class="level-item">' +
'<button class="button is-success is-small button--addOccupancyTypeField" type="button">' +
'<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>' +
"<span>Add Field</span>" +
"</button>" +
"</div>") +
"</div>") +
"</div>") +
"</div>" +
"</div>";
renderOccupancyTypeFields(
containerElement.querySelector("#container--allOccupancyTypeFields"),
undefined,
allOccupancyTypeFields
);
containerElement
.querySelector(".button--addOccupancyTypeField")
.addEventListener("click", openAddOccupancyTypeField);
if (occupancyTypes.length === 0) {
containerElement.insertAdjacentHTML(
"afterbegin",
'<div class="message is-warning>' + '<div class="message is-warning>' +
'<p class="message-body">There are no active ' + '<p class="message-body">There are no active ' +
exports.aliases.occupancy.toLowerCase() + exports.aliases.occupancy.toLowerCase() +
" types.</p>" + " types.</p>" +
"</div>"; "</div>"
);
return; return;
} }
containerElement.innerHTML = "";
for (const occupancyType of occupancyTypes) { for (const occupancyType of occupancyTypes) {
const occupancyTypeContainer = document.createElement("div"); const occupancyTypeContainer = document.createElement("div");
@ -631,77 +642,11 @@ declare const bulmaJS: BulmaJS;
"</div>" + "</div>" +
"</div>"; "</div>";
if (occupancyType.occupancyTypeFields.length === 0) { renderOccupancyTypeFields(
occupancyTypeContainer.insertAdjacentHTML( occupancyTypeContainer,
"beforeend", occupancyType.occupancyTypeId,
'<div class="panel-block is-block' + occupancyType.occupancyTypeFields
(expandedOccupancyTypes.has(
occupancyType.occupancyTypeId
)
? ""
: " is-hidden") +
'">' +
'<div class="message is-info">' +
'<p class="message-body">There are no additional fields.</p>' +
"</div>" +
"</div>"
); );
} else {
for (const occupancyTypeField of occupancyType.occupancyTypeFields) {
const panelBlockElement = document.createElement("div");
panelBlockElement.className =
"panel-block is-block container--occupancyTypeField";
if (
!expandedOccupancyTypes.has(
occupancyType.occupancyTypeId
)
) {
panelBlockElement.classList.add("is-hidden");
}
panelBlockElement.dataset.occupancyTypeFieldId =
occupancyTypeField.occupancyTypeFieldId.toString();
panelBlockElement.innerHTML =
'<div class="level is-mobile">' +
'<div class="level-left">' +
('<div class="level-item">' +
'<a class="has-text-weight-bold button--editOccupancyTypeField" href="#">' +
cityssm.escapeHTML(
occupancyTypeField.occupancyTypeField
) +
"</a>" +
"</div>") +
"</div>" +
'<div class="level-right">' +
('<div class="level-item">' +
'<div class="field has-addons">' +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldUp" data-tooltip="Move Up" type="button" aria-label="Move Up">' +
'<i class="fas fa-arrow-up" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
'<div class="control">' +
'<button class="button is-small button--moveOccupancyTypeFieldDown" data-tooltip="Move Down" type="button" aria-label="Move Down">' +
'<i class="fas fa-arrow-down" aria-hidden="true"></i>' +
"</button>" +
"</div>" +
"</div>" +
"</div>") +
"</div>" +
"</div>";
panelBlockElement
.querySelector(".button--editOccupancyTypeField")
.addEventListener(
"click",
openEditOccupancyTypeFieldByClick
);
occupancyTypeContainer.append(panelBlockElement);
}
}
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--toggleOccupancyTypeFields") .querySelector(".button--toggleOccupancyTypeFields")
@ -731,9 +676,7 @@ declare const bulmaJS: BulmaJS;
} }
}; };
document document.querySelector("#button--addOccupancyType").addEventListener("click", () => {
.querySelector("#button--addOccupancyType")
.addEventListener("click", () => {
let addCloseModalFunction: () => void; let addCloseModalFunction: () => void;
const doAdd = (submitEvent: SubmitEvent) => { const doAdd = (submitEvent: SubmitEvent) => {
@ -753,10 +696,7 @@ declare const bulmaJS: BulmaJS;
renderOccupancyTypes(); renderOccupancyTypes();
} else { } else {
bulmaJS.alert({ bulmaJS.alert({
title: title: "Error Adding " + exports.aliases.occupancy + " Type",
"Error Adding " +
exports.aliases.occupancy +
" Type",
message: responseJSON.errorMessage, message: responseJSON.errorMessage,
contextualColorName: "danger" contextualColorName: "danger"
}); });
@ -778,9 +718,7 @@ declare const bulmaJS: BulmaJS;
) as HTMLInputElement ) as HTMLInputElement
).focus(); ).focus();
modalElement modalElement.querySelector("form").addEventListener("submit", doAdd);
.querySelector("form")
.addEventListener("submit", doAdd);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },

File diff suppressed because one or more lines are too long

View File

@ -49,6 +49,7 @@
<script> <script>
exports.occupancyTypes = <%- JSON.stringify(occupancyTypes) %>; exports.occupancyTypes = <%- JSON.stringify(occupancyTypes) %>;
exports.allOccupancyTypeFields = <%- JSON.stringify(allOccupancyTypeFields) %>;
</script> </script>
<script src="<%= urlPrefix %>/javascripts/adminOccupancyTypes.min.js"></script> <script src="<%= urlPrefix %>/javascripts/adminOccupancyTypes.min.js"></script>