diff --git a/handlers/admin-get/occupancyTypes.js b/handlers/admin-get/occupancyTypes.js index b3900305..9dfc77de 100644 --- a/handlers/admin-get/occupancyTypes.js +++ b/handlers/admin-get/occupancyTypes.js @@ -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"; export const handler = (_request, response) => { const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.render("admin-occupancyTypes", { headTitle: configFunctions.getProperty("aliases.occupancy") + " Type Management", - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-get/occupancyTypes.ts b/handlers/admin-get/occupancyTypes.ts index 84a6e7d7..f950aa44 100644 --- a/handlers/admin-get/occupancyTypes.ts +++ b/handlers/admin-get/occupancyTypes.ts @@ -1,17 +1,19 @@ 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"; export const handler: RequestHandler = (_request, response) => { const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.render("admin-occupancyTypes", { headTitle: configFunctions.getProperty("aliases.occupancy") + " Type Management", - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doAddOccupancyType.js b/handlers/admin-post/doAddOccupancyType.js index 82a0525c..70ba7845 100644 --- a/handlers/admin-post/doAddOccupancyType.js +++ b/handlers/admin-post/doAddOccupancyType.js @@ -1,12 +1,14 @@ 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) => { const occupancyTypeId = addOccupancyType(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success: true, occupancyTypeId, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doAddOccupancyType.ts b/handlers/admin-post/doAddOccupancyType.ts index 255e1d22..1551b430 100644 --- a/handlers/admin-post/doAddOccupancyType.ts +++ b/handlers/admin-post/doAddOccupancyType.ts @@ -2,17 +2,19 @@ import type { RequestHandler } from "express"; 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) => { const occupancyTypeId = addOccupancyType(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success: true, occupancyTypeId, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doAddOccupancyTypeField.js b/handlers/admin-post/doAddOccupancyTypeField.js index 9fff25b7..81f7bba5 100644 --- a/handlers/admin-post/doAddOccupancyTypeField.js +++ b/handlers/admin-post/doAddOccupancyTypeField.js @@ -1,12 +1,14 @@ 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) => { const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success: true, occupancyTypeFieldId, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doAddOccupancyTypeField.ts b/handlers/admin-post/doAddOccupancyTypeField.ts index 980fbd9a..8d1ee285 100644 --- a/handlers/admin-post/doAddOccupancyTypeField.ts +++ b/handlers/admin-post/doAddOccupancyTypeField.ts @@ -2,17 +2,19 @@ import type { RequestHandler } from "express"; 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) => { const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success: true, occupancyTypeFieldId, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doDeleteOccupancyType.js b/handlers/admin-post/doDeleteOccupancyType.js index 5828f947..2d4a23f8 100644 --- a/handlers/admin-post/doDeleteOccupancyType.js +++ b/handlers/admin-post/doDeleteOccupancyType.js @@ -1,11 +1,13 @@ 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) => { const success = deleteOccupancyType(request.body.occupancyTypeId, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doDeleteOccupancyType.ts b/handlers/admin-post/doDeleteOccupancyType.ts index 5ff491fd..daccdf62 100644 --- a/handlers/admin-post/doDeleteOccupancyType.ts +++ b/handlers/admin-post/doDeleteOccupancyType.ts @@ -2,7 +2,7 @@ import type { RequestHandler } from "express"; 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) => { const success = deleteOccupancyType( @@ -11,10 +11,12 @@ export const handler: RequestHandler = async (request, response) => { ); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doDeleteOccupancyTypeField.js b/handlers/admin-post/doDeleteOccupancyTypeField.js index 37cdabd6..8c46a6b1 100644 --- a/handlers/admin-post/doDeleteOccupancyTypeField.js +++ b/handlers/admin-post/doDeleteOccupancyTypeField.js @@ -1,11 +1,13 @@ 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) => { const success = deleteOccupancyTypeField(request.body.occupancyTypeFieldId, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doDeleteOccupancyTypeField.ts b/handlers/admin-post/doDeleteOccupancyTypeField.ts index b65accaa..8b6c2eee 100644 --- a/handlers/admin-post/doDeleteOccupancyTypeField.ts +++ b/handlers/admin-post/doDeleteOccupancyTypeField.ts @@ -2,7 +2,7 @@ import type { RequestHandler } from "express"; 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) => { const success = deleteOccupancyTypeField( @@ -11,10 +11,12 @@ export const handler: RequestHandler = async (request, response) => { ); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doMoveOccupancyTypeDown.js b/handlers/admin-post/doMoveOccupancyTypeDown.js index 380142d3..e5e89d6c 100644 --- a/handlers/admin-post/doMoveOccupancyTypeDown.js +++ b/handlers/admin-post/doMoveOccupancyTypeDown.js @@ -1,11 +1,13 @@ 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) => { const success = moveOccupancyTypeDown(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doMoveOccupancyTypeDown.ts b/handlers/admin-post/doMoveOccupancyTypeDown.ts index 0e7e42b8..0a67f168 100644 --- a/handlers/admin-post/doMoveOccupancyTypeDown.ts +++ b/handlers/admin-post/doMoveOccupancyTypeDown.ts @@ -2,16 +2,18 @@ import type { RequestHandler } from "express"; 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) => { const success = moveOccupancyTypeDown(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doMoveOccupancyTypeUp.js b/handlers/admin-post/doMoveOccupancyTypeUp.js index 67477308..c8dce3da 100644 --- a/handlers/admin-post/doMoveOccupancyTypeUp.js +++ b/handlers/admin-post/doMoveOccupancyTypeUp.js @@ -1,11 +1,13 @@ 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) => { const success = moveOccupancyTypeUp(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doMoveOccupancyTypeUp.ts b/handlers/admin-post/doMoveOccupancyTypeUp.ts index 286b14a3..2a399b62 100644 --- a/handlers/admin-post/doMoveOccupancyTypeUp.ts +++ b/handlers/admin-post/doMoveOccupancyTypeUp.ts @@ -2,16 +2,18 @@ import type { RequestHandler } from "express"; 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) => { const success = moveOccupancyTypeUp(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doUpdateOccupancyType.js b/handlers/admin-post/doUpdateOccupancyType.js index 952a3280..e0be48b2 100644 --- a/handlers/admin-post/doUpdateOccupancyType.js +++ b/handlers/admin-post/doUpdateOccupancyType.js @@ -1,11 +1,13 @@ 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) => { const success = updateOccupancyType(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doUpdateOccupancyType.ts b/handlers/admin-post/doUpdateOccupancyType.ts index ee27dd38..c23341de 100644 --- a/handlers/admin-post/doUpdateOccupancyType.ts +++ b/handlers/admin-post/doUpdateOccupancyType.ts @@ -2,16 +2,18 @@ import type { RequestHandler } from "express"; 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) => { const success = updateOccupancyType(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/handlers/admin-post/doUpdateOccupancyTypeField.js b/handlers/admin-post/doUpdateOccupancyTypeField.js index 2cd41510..e267ea19 100644 --- a/handlers/admin-post/doUpdateOccupancyTypeField.js +++ b/handlers/admin-post/doUpdateOccupancyTypeField.js @@ -1,11 +1,13 @@ 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) => { const success = updateOccupancyTypeField(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; export default handler; diff --git a/handlers/admin-post/doUpdateOccupancyTypeField.ts b/handlers/admin-post/doUpdateOccupancyTypeField.ts index c378f0f4..257c0341 100644 --- a/handlers/admin-post/doUpdateOccupancyTypeField.ts +++ b/handlers/admin-post/doUpdateOccupancyTypeField.ts @@ -2,16 +2,18 @@ import type { RequestHandler } from "express"; 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) => { const success = updateOccupancyTypeField(request.body, request.session); const occupancyTypes = getOccupancyTypes(); + const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ success, - occupancyTypes + occupancyTypes, + allOccupancyTypeFields }); }; diff --git a/helpers/functions.cache.d.ts b/helpers/functions.cache.d.ts index 35c30a32..9fb7fa48 100644 --- a/helpers/functions.cache.d.ts +++ b/helpers/functions.cache.d.ts @@ -12,6 +12,7 @@ export declare function getLotTypeById(lotTypeId: number): recordTypes.LotType; export declare function getLotTypesByLotType(lotType: string): recordTypes.LotType; export declare function clearLotTypesCache(): void; export declare function getOccupancyTypes(): recordTypes.OccupancyType[]; +export declare function getAllOccupancyTypeFields(): recordTypes.OccupancyTypeField[]; export declare function getOccupancyTypeById(occupancyTypeId: number): recordTypes.OccupancyType; export declare function getOccupancyTypeByOccupancyType(occupancyTypeString: string): recordTypes.OccupancyType; export declare function clearOccupancyTypesCache(): void; diff --git a/helpers/functions.cache.js b/helpers/functions.cache.js index 740e68d2..d6f2169f 100644 --- a/helpers/functions.cache.js +++ b/helpers/functions.cache.js @@ -2,6 +2,7 @@ import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from "./lotOcc import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/getLotStatuses.js"; import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.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 { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderMilestoneTypes.js"; let lotOccupantTypes; @@ -21,8 +22,7 @@ export function getLotOccupantTypesByLotOccupantType(lotOccupantType) { const cachedLotOccupantTypes = getLotOccupantTypes(); const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase(); return cachedLotOccupantTypes.find((currentLotOccupantType) => { - return (currentLotOccupantType.lotOccupantType.toLowerCase() === - lotOccupantTypeLowerCase); + return currentLotOccupantType.lotOccupantType.toLowerCase() === lotOccupantTypeLowerCase; }); } export function clearLotOccupantTypesCache() { @@ -75,12 +75,19 @@ export function clearLotTypesCache() { lotTypes = undefined; } let occupancyTypes; +let allOccupancyTypeFields; export function getOccupancyTypes() { if (!occupancyTypes) { occupancyTypes = getOccupancyTypesFromDatabase(); } return occupancyTypes; } +export function getAllOccupancyTypeFields() { + if (!allOccupancyTypeFields) { + allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase(); + } + return allOccupancyTypeFields; +} export function getOccupancyTypeById(occupancyTypeId) { const cachedOccupancyTypes = getOccupancyTypes(); return cachedOccupancyTypes.find((currentOccupancyType) => { @@ -91,12 +98,12 @@ export function getOccupancyTypeByOccupancyType(occupancyTypeString) { const cachedOccupancyTypes = getOccupancyTypes(); const occupancyTypeLowerCase = occupancyTypeString.toLowerCase(); return cachedOccupancyTypes.find((currentOccupancyType) => { - return (currentOccupancyType.occupancyType.toLowerCase() === - occupancyTypeLowerCase); + return currentOccupancyType.occupancyType.toLowerCase() === occupancyTypeLowerCase; }); } export function clearOccupancyTypesCache() { occupancyTypes = undefined; + allOccupancyTypeFields = undefined; } let workOrderTypes; export function getWorkOrderTypes() { diff --git a/helpers/functions.cache.ts b/helpers/functions.cache.ts index 9d3f2960..2f9c89be 100644 --- a/helpers/functions.cache.ts +++ b/helpers/functions.cache.ts @@ -5,6 +5,7 @@ import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/g import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.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"; @@ -40,10 +41,7 @@ export function getLotOccupantTypesByLotOccupantType(lotOccupantType: string) { const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase(); return cachedLotOccupantTypes.find((currentLotOccupantType) => { - return ( - currentLotOccupantType.lotOccupantType.toLowerCase() === - lotOccupantTypeLowerCase - ); + return currentLotOccupantType.lotOccupantType.toLowerCase() === lotOccupantTypeLowerCase; }); } @@ -128,6 +126,7 @@ export function clearLotTypesCache() { */ let occupancyTypes: recordTypes.OccupancyType[]; +let allOccupancyTypeFields: recordTypes.OccupancyTypeField[]; export function getOccupancyTypes() { if (!occupancyTypes) { @@ -137,6 +136,13 @@ export function getOccupancyTypes() { return occupancyTypes; } +export function getAllOccupancyTypeFields() { + if (!allOccupancyTypeFields) { + allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase(); + } + return allOccupancyTypeFields; +} + export function getOccupancyTypeById(occupancyTypeId: number) { const cachedOccupancyTypes = getOccupancyTypes(); @@ -151,15 +157,13 @@ export function getOccupancyTypeByOccupancyType(occupancyTypeString: string) { const occupancyTypeLowerCase = occupancyTypeString.toLowerCase(); return cachedOccupancyTypes.find((currentOccupancyType) => { - return ( - currentOccupancyType.occupancyType.toLowerCase() === - occupancyTypeLowerCase - ); + return currentOccupancyType.occupancyType.toLowerCase() === occupancyTypeLowerCase; }); } export function clearOccupancyTypesCache() { occupancyTypes = undefined; + allOccupancyTypeFields = undefined; } /* @@ -194,7 +198,9 @@ export function getWorkOrderMilestoneTypes() { return workOrderMilestoneTypes; } -export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string) { +export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType( + workOrderMilestoneTypeString: string +) { const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes(); const workOrderMilestoneTypeLowerCase = workOrderMilestoneTypeString.toLowerCase(); diff --git a/helpers/initializer.database.js b/helpers/initializer.database.js index 5781123f..d964c7a0 100644 --- a/helpers/initializer.database.js +++ b/helpers/initializer.database.js @@ -24,8 +24,7 @@ export const initializeDatabase = () => { ")") .run(); lotOccupancyDB - .prepare("create index if not exists idx_lottypes_ordernumber" + - " on LotTypes (orderNumber, lotType)") + .prepare("create index if not exists idx_lottypes_ordernumber" + " on LotTypes (orderNumber, lotType)") .run(); lotOccupancyDB .prepare("create table if not exists LotTypeFields (" + @@ -56,8 +55,7 @@ export const initializeDatabase = () => { ")") .run(); lotOccupancyDB - .prepare("create index if not exists idx_lotstatuses_ordernumber" + - " on LotStatuses (orderNumber, lotStatus)") + .prepare("create index if not exists idx_lotstatuses_ordernumber" + " on LotStatuses (orderNumber, lotStatus)") .run(); lotOccupancyDB .prepare("create table if not exists Maps (" + @@ -136,7 +134,7 @@ export const initializeDatabase = () => { lotOccupancyDB .prepare("create table if not exists OccupancyTypeFields (" + "occupancyTypeFieldId integer not null primary key autoincrement," + - " occupancyTypeId integer not null," + + " occupancyTypeId integer," + " occupancyTypeField varchar(100) not null," + " occupancyTypeFieldValues text," + " isRequired bit not null default 0," + @@ -257,8 +255,7 @@ export const initializeDatabase = () => { ")") .run(); lotOccupancyDB - .prepare("create index if not exists idx_fees_ordernumber" + - " on Fees (orderNumber, feeName)") + .prepare("create index if not exists idx_fees_ordernumber" + " on Fees (orderNumber, feeName)") .run(); lotOccupancyDB .prepare("create table if not exists LotOccupancyFees (" + diff --git a/helpers/initializer.database.ts b/helpers/initializer.database.ts index 0282e6f2..e2b05ced 100644 --- a/helpers/initializer.database.ts +++ b/helpers/initializer.database.ts @@ -17,9 +17,7 @@ export const initializeDatabase = (): boolean => { const lotOccupancyDB = sqlite(databasePath); const row = lotOccupancyDB - .prepare( - "select name from sqlite_master where type = 'table' and name = 'WorkOrderMilestones'" - ) + .prepare("select name from sqlite_master where type = 'table' and name = 'WorkOrderMilestones'") .get(); if (!row) { @@ -39,10 +37,7 @@ export const initializeDatabase = (): boolean => { .run(); lotOccupancyDB - .prepare( - "create index if not exists idx_lottypes_ordernumber" + - " on LotTypes (orderNumber, lotType)" - ) + .prepare("create index if not exists idx_lottypes_ordernumber" + " on LotTypes (orderNumber, lotType)") .run(); lotOccupancyDB @@ -84,8 +79,7 @@ export const initializeDatabase = (): boolean => { lotOccupancyDB .prepare( - "create index if not exists idx_lotstatuses_ordernumber" + - " on LotStatuses (orderNumber, lotStatus)" + "create index if not exists idx_lotstatuses_ordernumber" + " on LotStatuses (orderNumber, lotStatus)" ) .run(); @@ -192,7 +186,7 @@ export const initializeDatabase = (): boolean => { .prepare( "create table if not exists OccupancyTypeFields (" + "occupancyTypeFieldId integer not null primary key autoincrement," + - " occupancyTypeId integer not null," + + " occupancyTypeId integer," + " occupancyTypeField varchar(100) not null," + " occupancyTypeFieldValues text," + " isRequired bit not null default 0," + @@ -347,10 +341,7 @@ export const initializeDatabase = (): boolean => { .run(); lotOccupancyDB - .prepare( - "create index if not exists idx_fees_ordernumber" + - " on Fees (orderNumber, feeName)" - ) + .prepare("create index if not exists idx_fees_ordernumber" + " on Fees (orderNumber, feeName)") .run(); lotOccupancyDB diff --git a/helpers/lotOccupancyDB/addOccupancyTypeField.d.ts b/helpers/lotOccupancyDB/addOccupancyTypeField.d.ts index 11381a1a..5411fd7c 100644 --- a/helpers/lotOccupancyDB/addOccupancyTypeField.d.ts +++ b/helpers/lotOccupancyDB/addOccupancyTypeField.d.ts @@ -1,6 +1,6 @@ import type * as recordTypes from "../../types/recordTypes"; interface AddOccupancyTypeFieldForm { - occupancyTypeId: string | number; + occupancyTypeId?: string | number; occupancyTypeField: string; occupancyTypeFieldValues?: string; isRequired?: string; diff --git a/helpers/lotOccupancyDB/addOccupancyTypeField.js b/helpers/lotOccupancyDB/addOccupancyTypeField.js index 73116ee9..7ee98ff5 100644 --- a/helpers/lotOccupancyDB/addOccupancyTypeField.js +++ b/helpers/lotOccupancyDB/addOccupancyTypeField.js @@ -13,7 +13,7 @@ export const addOccupancyTypeField = (occupancyTypeFieldForm, requestSession) => " recordCreate_userName, recordCreate_timeMillis," + " recordUpdate_userName, recordUpdate_timeMillis)" + " 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(); clearOccupancyTypesCache(); return result.lastInsertRowid; diff --git a/helpers/lotOccupancyDB/addOccupancyTypeField.ts b/helpers/lotOccupancyDB/addOccupancyTypeField.ts index 52ebb036..f50e5815 100644 --- a/helpers/lotOccupancyDB/addOccupancyTypeField.ts +++ b/helpers/lotOccupancyDB/addOccupancyTypeField.ts @@ -6,7 +6,7 @@ import type * as recordTypes from "../../types/recordTypes"; import { clearOccupancyTypesCache } from "../functions.cache.js"; interface AddOccupancyTypeFieldForm { - occupancyTypeId: string | number; + occupancyTypeId?: string | number; occupancyTypeField: string; occupancyTypeFieldValues?: string; isRequired?: string; @@ -36,7 +36,7 @@ export const addOccupancyTypeField = ( " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" ) .run( - occupancyTypeFieldForm.occupancyTypeId, + occupancyTypeFieldForm.occupancyTypeId || undefined, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.isRequired ? 1 : 0, diff --git a/helpers/lotOccupancyDB/getLotOccupancyFields.js b/helpers/lotOccupancyDB/getLotOccupancyFields.js index 30c635f7..b4f40a08 100644 --- a/helpers/lotOccupancyDB/getLotOccupancyFields.js +++ b/helpers/lotOccupancyDB/getLotOccupancyFields.js @@ -23,7 +23,7 @@ export const getLotOccupancyFields = (lotOccupancyId, connectedDatabase) => { " f.orderNumber" + " from OccupancyTypeFields f" + " 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)" + " order by orderNumber, occupancyTypeField") .all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId); diff --git a/helpers/lotOccupancyDB/getLotOccupancyFields.ts b/helpers/lotOccupancyDB/getLotOccupancyFields.ts index 92785166..f3263f9e 100644 --- a/helpers/lotOccupancyDB/getLotOccupancyFields.ts +++ b/helpers/lotOccupancyDB/getLotOccupancyFields.ts @@ -33,7 +33,7 @@ export const getLotOccupancyFields = ( " f.orderNumber" + " from OccupancyTypeFields f" + " 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)" + " order by orderNumber, occupancyTypeField" ) diff --git a/helpers/lotOccupancyDB/getOccupancyTypeFields.d.ts b/helpers/lotOccupancyDB/getOccupancyTypeFields.d.ts new file mode 100644 index 00000000..1a709597 --- /dev/null +++ b/helpers/lotOccupancyDB/getOccupancyTypeFields.d.ts @@ -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; diff --git a/helpers/lotOccupancyDB/getOccupancyTypeFields.js b/helpers/lotOccupancyDB/getOccupancyTypeFields.js new file mode 100644 index 00000000..d5c20434 --- /dev/null +++ b/helpers/lotOccupancyDB/getOccupancyTypeFields.js @@ -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; diff --git a/helpers/lotOccupancyDB/getOccupancyTypeFields.ts b/helpers/lotOccupancyDB/getOccupancyTypeFields.ts new file mode 100644 index 00000000..04895b5d --- /dev/null +++ b/helpers/lotOccupancyDB/getOccupancyTypeFields.ts @@ -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; diff --git a/helpers/lotOccupancyDB/getOccupancyTypes.js b/helpers/lotOccupancyDB/getOccupancyTypes.js index 7fd001ea..37b9225a 100644 --- a/helpers/lotOccupancyDB/getOccupancyTypes.js +++ b/helpers/lotOccupancyDB/getOccupancyTypes.js @@ -1,5 +1,6 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { getOccupancyTypeFields } from "./getOccupancyTypeFields.js"; export const getOccupancyTypes = () => { const database = sqlite(databasePath); const occupancyTypes = database @@ -13,22 +14,11 @@ export const getOccupancyTypes = () => { expectedTypeOrderNumber += 1; if (occupancyType.orderNumber !== expectedTypeOrderNumber) { database - .prepare("update OccupancyTypes" + - " set orderNumber = ?" + - " where occupancyTypeId = ?") + .prepare("update OccupancyTypes" + " set orderNumber = ?" + " where occupancyTypeId = ?") .run(expectedTypeOrderNumber, occupancyType.occupancyTypeId); occupancyType.orderNumber = expectedTypeOrderNumber; } - occupancyType.occupancyTypeFields = 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); + occupancyType.occupancyTypeFields = getOccupancyTypeFields(occupancyType.occupancyTypeId, database); let expectedFieldOrderNumber = -1; for (const occupancyTypeField of occupancyType.occupancyTypeFields) { expectedFieldOrderNumber += 1; diff --git a/helpers/lotOccupancyDB/getOccupancyTypes.ts b/helpers/lotOccupancyDB/getOccupancyTypes.ts index 24df53c5..7362e237 100644 --- a/helpers/lotOccupancyDB/getOccupancyTypes.ts +++ b/helpers/lotOccupancyDB/getOccupancyTypes.ts @@ -2,6 +2,8 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { getOccupancyTypeFields } from "./getOccupancyTypeFields.js"; + import type * as recordTypes from "../../types/recordTypes"; export const getOccupancyTypes = (): recordTypes.OccupancyType[] => { @@ -24,27 +26,17 @@ export const getOccupancyTypes = (): recordTypes.OccupancyType[] => { if (occupancyType.orderNumber !== expectedTypeOrderNumber) { database .prepare( - "update OccupancyTypes" + - " set orderNumber = ?" + - " where occupancyTypeId = ?" + "update OccupancyTypes" + " set orderNumber = ?" + " where occupancyTypeId = ?" ) .run(expectedTypeOrderNumber, occupancyType.occupancyTypeId); occupancyType.orderNumber = expectedTypeOrderNumber; } - occupancyType.occupancyTypeFields = 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); + occupancyType.occupancyTypeFields = getOccupancyTypeFields( + occupancyType.occupancyTypeId, + database + ); let expectedFieldOrderNumber = -1; @@ -58,10 +50,7 @@ export const getOccupancyTypes = (): recordTypes.OccupancyType[] => { " set orderNumber = ?" + " where occupancyTypeFieldId = ?" ) - .run( - expectedFieldOrderNumber, - occupancyTypeField.occupancyTypeFieldId - ); + .run(expectedFieldOrderNumber, occupancyTypeField.occupancyTypeFieldId); occupancyTypeField.orderNumber = expectedFieldOrderNumber; } diff --git a/public-typescript/adminOccupancyTypes.js b/public-typescript/adminOccupancyTypes.js index f83e78d8..fef0ea73 100644 --- a/public-typescript/adminOccupancyTypes.js +++ b/public-typescript/adminOccupancyTypes.js @@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const containerElement = document.querySelector("#container--occupancyTypes"); let occupancyTypes = exports.occupancyTypes; delete exports.occupancyTypes; + let allOccupancyTypeFields = exports.allOccupancyTypeFields; + delete exports.allOccupancyTypeFields; const expandedOccupancyTypes = new Set(); const toggleOccupancyTypeFields = (clickEvent) => { const toggleButtonElement = clickEvent.currentTarget; @@ -25,26 +27,26 @@ Object.defineProperty(exports, "__esModule", { value: true }); 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 occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10); const doDelete = () => { cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyType", { occupancyTypeId - }, (responseJSON) => { - if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; - renderOccupancyTypes(); - } - else { - bulmaJS.alert({ - title: "Error Deleting " + - exports.aliases.occupancy + - " Type", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); - } - }); + }, occupancyTypeResponseHandler); }; bulmaJS.confirm({ title: "Delete " + exports.aliases.occupancy + " Type", @@ -67,19 +69,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); const doEdit = (submitEvent) => { submitEvent.preventDefault(); cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyType", submitEvent.currentTarget, (responseJSON) => { + occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { 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) => { editCloseModalFunction = closeModalFunction; modalElement.querySelector("#occupancyTypeEdit--occupancyType").focus(); - modalElement - .querySelector("form") - .addEventListener("submit", doEdit); + modalElement.querySelector("form").addEventListener("submit", doEdit); bulmaJS.toggleHtmlClipped(); }, onremoved: () => { @@ -108,33 +98,25 @@ Object.defineProperty(exports, "__esModule", { value: true }); const doAdd = (submitEvent) => { submitEvent.preventDefault(); cityssm.postJSON(urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { + expandedOccupancyTypes.add(occupancyTypeId); + occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { - expandedOccupancyTypes.add(occupancyTypeId); addCloseModalFunction(); - occupancyTypes = responseJSON.occupancyTypes; - renderOccupancyTypes(); openEditOccupancyTypeField(occupancyTypeId, responseJSON.occupancyTypeFieldId); } - else { - bulmaJS.alert({ - title: "Error Adding Field", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); - } }); }; cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField", { onshow: (modalElement) => { los.populateAliases(modalElement); - modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value = occupancyTypeId.toString(); + if (occupancyTypeId) { + modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value = occupancyTypeId.toString(); + } }, onshown: (modalElement, closeModalFunction) => { addCloseModalFunction = closeModalFunction; modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus(); - modalElement - .querySelector("form") - .addEventListener("submit", doAdd); + modalElement.querySelector("form").addEventListener("submit", doAdd); bulmaJS.toggleHtmlClipped(); }, onremoved: () => { @@ -147,51 +129,30 @@ Object.defineProperty(exports, "__esModule", { value: true }); const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeUp", { occupancyTypeId - }, (responseJSON) => { - if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; - renderOccupancyTypes(); - } - else { - bulmaJS.alert({ - title: "Error Moving " + - exports.aliases.occupancy + - " Type", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); - } - }); + }, occupancyTypeResponseHandler); }; const moveOccupancyTypeDown = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeDown", { occupancyTypeId - }, (responseJSON) => { - if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; - renderOccupancyTypes(); - } - else { - bulmaJS.alert({ - title: "Error Moving " + - exports.aliases.occupancy + - " Type", - message: responseJSON.errorMessage, - contextualColorName: "danger" - }); - } - }); + }, occupancyTypeResponseHandler); }; const openEditOccupancyTypeField = (occupancyTypeId, occupancyTypeFieldId) => { - const occupancyType = occupancyTypes.find((currentOccupancyType) => { - return currentOccupancyType.occupancyTypeId === occupancyTypeId; - }); - const occupancyTypeField = occupancyType.occupancyTypeFields.find((currentOccupancyTypeField) => { - return (currentOccupancyTypeField.occupancyTypeFieldId === - occupancyTypeFieldId); - }); + let occupancyTypeField; + if (occupancyTypeId) { + const occupancyType = occupancyTypes.find((currentOccupancyType) => { + return currentOccupancyType.occupancyTypeId === occupancyTypeId; + }); + occupancyTypeField = occupancyType.occupancyTypeFields.find((currentOccupancyTypeField) => { + return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId; + }); + } + else { + occupancyTypeField = allOccupancyTypeFields.find((currentOccupancyTypeField) => { + return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId; + }); + } let minimumLengthElement; let maximumLengthElement; let patternElement; @@ -215,17 +176,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); const doUpdate = (submitEvent) => { submitEvent.preventDefault(); cityssm.postJSON(urlPrefix + "/admin/doUpdateOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => { + occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; 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", { occupancyTypeFieldId }, (responseJSON) => { + occupancyTypeResponseHandler(responseJSON); if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; 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--isRequired").value = occupancyTypeField.isRequired ? "1" : "0"; minimumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--minimumLength"); - minimumLengthElement.value = - occupancyTypeField.minimumLength.toString(); + minimumLengthElement.value = occupancyTypeField.minimumLength.toString(); maximumLengthElement = modalElement.querySelector("#occupancyTypeFieldEdit--maximumLength"); - maximumLengthElement.value = - occupancyTypeField.maximumLength.toString(); + maximumLengthElement.value = occupancyTypeField.maximumLength.toString(); patternElement = modalElement.querySelector("#occupancyTypeFieldEdit--pattern"); patternElement.value = occupancyTypeField.pattern; occupancyTypeFieldValuesElement = modalElement.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues"); - occupancyTypeFieldValuesElement.value = - occupancyTypeField.occupancyTypeFieldValues; + occupancyTypeFieldValuesElement.value = occupancyTypeField.occupancyTypeFieldValues; toggleInputFields(); }, onshown: (modalElement, closeModalFunction) => { @@ -282,9 +224,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); bulmaJS.init(modalElement); bulmaJS.toggleHtmlClipped(); cityssm.enableNavBlocker(); - modalElement - .querySelector("form") - .addEventListener("submit", doUpdate); + modalElement.querySelector("form").addEventListener("submit", doUpdate); minimumLengthElement.addEventListener("keyup", updateMaximumLengthMin); updateMaximumLengthMin(); 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); openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId); }; + const renderOccupancyTypeFields = (panelElement, occupancyTypeId, occupancyTypeFields) => { + if (occupancyTypeFields.length === 0) { + panelElement.insertAdjacentHTML("beforeend", '
"); + } + 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 = + '