diff --git a/handlers/admin-post/doMoveOccupancyTypeDown.js b/handlers/admin-post/doMoveOccupancyTypeDown.js index e5e89d6c..bcadf656 100644 --- a/handlers/admin-post/doMoveOccupancyTypeDown.js +++ b/handlers/admin-post/doMoveOccupancyTypeDown.js @@ -1,7 +1,9 @@ -import { moveOccupancyTypeDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js"; +import { moveOccupancyTypeDown, moveOccupancyTypeDownToBottom } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler = async (request, response) => { - const success = moveOccupancyTypeDown(request.body.occupancyTypeId); + const success = request.body.moveToBottom === "1" + ? moveOccupancyTypeDownToBottom(request.body.occupancyTypeId) + : moveOccupancyTypeDown(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ diff --git a/handlers/admin-post/doMoveOccupancyTypeDown.ts b/handlers/admin-post/doMoveOccupancyTypeDown.ts index 0a67f168..55ad442d 100644 --- a/handlers/admin-post/doMoveOccupancyTypeDown.ts +++ b/handlers/admin-post/doMoveOccupancyTypeDown.ts @@ -1,11 +1,17 @@ import type { RequestHandler } from "express"; -import { moveOccupancyTypeDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js"; +import { + moveOccupancyTypeDown, + moveOccupancyTypeDownToBottom +} from "../../helpers/lotOccupancyDB/moveOccupancyTypeDown.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler: RequestHandler = async (request, response) => { - const success = moveOccupancyTypeDown(request.body.occupancyTypeId); + const success = + request.body.moveToBottom === "1" + ? moveOccupancyTypeDownToBottom(request.body.occupancyTypeId) + : moveOccupancyTypeDown(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); diff --git a/handlers/admin-post/doMoveOccupancyTypeFieldDown.js b/handlers/admin-post/doMoveOccupancyTypeFieldDown.js index e89e6459..3b1c9431 100644 --- a/handlers/admin-post/doMoveOccupancyTypeFieldDown.js +++ b/handlers/admin-post/doMoveOccupancyTypeFieldDown.js @@ -1,7 +1,9 @@ -import { moveOccupancyTypeFieldDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js"; +import { moveOccupancyTypeFieldDown, moveOccupancyTypeFieldDownToBottom } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler = async (request, response) => { - const success = moveOccupancyTypeFieldDown(request.body.occupancyTypeFieldId); + const success = request.body.moveToBottom === "1" + ? moveOccupancyTypeFieldDownToBottom(request.body.occupancyTypeFieldId) + : moveOccupancyTypeFieldDown(request.body.occupancyTypeFieldId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ diff --git a/handlers/admin-post/doMoveOccupancyTypeFieldDown.ts b/handlers/admin-post/doMoveOccupancyTypeFieldDown.ts index bfc71130..8a21906a 100644 --- a/handlers/admin-post/doMoveOccupancyTypeFieldDown.ts +++ b/handlers/admin-post/doMoveOccupancyTypeFieldDown.ts @@ -1,11 +1,17 @@ import type { RequestHandler } from "express"; -import { moveOccupancyTypeFieldDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js"; +import { + moveOccupancyTypeFieldDown, + moveOccupancyTypeFieldDownToBottom +} from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler: RequestHandler = async (request, response) => { - const success = moveOccupancyTypeFieldDown(request.body.occupancyTypeFieldId); + const success = + request.body.moveToBottom === "1" + ? moveOccupancyTypeFieldDownToBottom(request.body.occupancyTypeFieldId) + : moveOccupancyTypeFieldDown(request.body.occupancyTypeFieldId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); diff --git a/handlers/admin-post/doMoveOccupancyTypeFieldUp.js b/handlers/admin-post/doMoveOccupancyTypeFieldUp.js index 5f9d0d5a..8313d8f8 100644 --- a/handlers/admin-post/doMoveOccupancyTypeFieldUp.js +++ b/handlers/admin-post/doMoveOccupancyTypeFieldUp.js @@ -1,7 +1,9 @@ -import { moveOccupancyTypeFieldUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js"; +import { moveOccupancyTypeFieldUp, moveOccupancyTypeFieldUpToTop } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler = async (request, response) => { - const success = moveOccupancyTypeFieldUp(request.body.occupancyTypeFieldId); + const success = request.body.moveToTop === "1" + ? moveOccupancyTypeFieldUpToTop(request.body.occupancyTypeFieldId) + : moveOccupancyTypeFieldUp(request.body.occupancyTypeFieldId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ diff --git a/handlers/admin-post/doMoveOccupancyTypeFieldUp.ts b/handlers/admin-post/doMoveOccupancyTypeFieldUp.ts index 2853d561..3b76aaa9 100644 --- a/handlers/admin-post/doMoveOccupancyTypeFieldUp.ts +++ b/handlers/admin-post/doMoveOccupancyTypeFieldUp.ts @@ -1,11 +1,17 @@ import type { RequestHandler } from "express"; -import { moveOccupancyTypeFieldUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js"; +import { + moveOccupancyTypeFieldUp, + moveOccupancyTypeFieldUpToTop +} from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler: RequestHandler = async (request, response) => { - const success = moveOccupancyTypeFieldUp(request.body.occupancyTypeFieldId); + const success = + request.body.moveToTop === "1" + ? moveOccupancyTypeFieldUpToTop(request.body.occupancyTypeFieldId) + : moveOccupancyTypeFieldUp(request.body.occupancyTypeFieldId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); diff --git a/handlers/admin-post/doMoveOccupancyTypeUp.js b/handlers/admin-post/doMoveOccupancyTypeUp.js index c8dce3da..3c22b683 100644 --- a/handlers/admin-post/doMoveOccupancyTypeUp.js +++ b/handlers/admin-post/doMoveOccupancyTypeUp.js @@ -1,7 +1,9 @@ -import { moveOccupancyTypeUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js"; +import { moveOccupancyTypeUp, moveOccupancyTypeUpToTop } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler = async (request, response) => { - const success = moveOccupancyTypeUp(request.body.occupancyTypeId); + const success = request.body.moveToTop === "1" + ? moveOccupancyTypeUpToTop(request.body.occupancyTypeId) + : moveOccupancyTypeUp(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); response.json({ diff --git a/handlers/admin-post/doMoveOccupancyTypeUp.ts b/handlers/admin-post/doMoveOccupancyTypeUp.ts index 2a399b62..9906b944 100644 --- a/handlers/admin-post/doMoveOccupancyTypeUp.ts +++ b/handlers/admin-post/doMoveOccupancyTypeUp.ts @@ -1,11 +1,17 @@ import type { RequestHandler } from "express"; -import { moveOccupancyTypeUp } from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js"; +import { + moveOccupancyTypeUp, + moveOccupancyTypeUpToTop +} from "../../helpers/lotOccupancyDB/moveOccupancyTypeUp.js"; import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js"; export const handler: RequestHandler = async (request, response) => { - const success = moveOccupancyTypeUp(request.body.occupancyTypeId); + const success = + request.body.moveToTop === "1" + ? moveOccupancyTypeUpToTop(request.body.occupancyTypeId) + : moveOccupancyTypeUp(request.body.occupancyTypeId); const occupancyTypes = getOccupancyTypes(); const allOccupancyTypeFields = getAllOccupancyTypeFields(); diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeDown.d.ts b/helpers/lotOccupancyDB/moveOccupancyTypeDown.d.ts index 0a25bf2e..18eb852c 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeDown.d.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeDown.d.ts @@ -1,2 +1,3 @@ export declare const moveOccupancyTypeDown: (occupancyTypeId: number | string) => boolean; +export declare const moveOccupancyTypeDownToBottom: (occupancyTypeId: number | string) => boolean; export default moveOccupancyTypeDown; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeDown.js b/helpers/lotOccupancyDB/moveOccupancyTypeDown.js index 2938eba5..78b048ea 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeDown.js +++ b/helpers/lotOccupancyDB/moveOccupancyTypeDown.js @@ -4,9 +4,7 @@ import { clearOccupancyTypesCache } from "../functions.cache.js"; export const moveOccupancyTypeDown = (occupancyTypeId) => { const database = sqlite(databasePath); const currentOrderNumber = database - .prepare("select orderNumber" + - " from OccupancyTypes" + - " where occupancyTypeId = ?") + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") .get(occupancyTypeId).orderNumber; database .prepare("update OccupancyTypes" + @@ -15,12 +13,35 @@ export const moveOccupancyTypeDown = (occupancyTypeId) => { " and orderNumber = ? + 1") .run(currentOrderNumber); const result = database - .prepare("update OccupancyTypes" + - " set orderNumber = ? + 1" + - " where occupancyTypeId = ?") + .prepare("update OccupancyTypes set orderNumber = ? + 1 where occupancyTypeId = ?") .run(currentOrderNumber, occupancyTypeId); database.close(); clearOccupancyTypesCache(); return result.changes > 0; }; +export const moveOccupancyTypeDownToBottom = (occupancyTypeId) => { + const database = sqlite(databasePath); + const currentOrderNumber = database + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") + .get(occupancyTypeId).orderNumber; + const maxOrderNumber = database + .prepare("select max(orderNumber) as maxOrderNumber" + + " from OccupancyTypes" + + " where recordDelete_timeMillis is null") + .get().maxOrderNumber; + if (currentOrderNumber !== maxOrderNumber) { + database + .prepare("update OccupancyTypes set orderNumber = ? + 1 where occupancyTypeId = ?") + .run(maxOrderNumber, occupancyTypeId); + database + .prepare("update OccupancyTypes" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber > ?") + .run(currentOrderNumber); + } + database.close(); + clearOccupancyTypesCache(); + return true; +}; export default moveOccupancyTypeDown; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeDown.ts b/helpers/lotOccupancyDB/moveOccupancyTypeDown.ts index c8643a96..636241c5 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeDown.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeDown.ts @@ -4,17 +4,11 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { clearOccupancyTypesCache } from "../functions.cache.js"; -export const moveOccupancyTypeDown = ( - occupancyTypeId: number | string -): boolean => { +export const moveOccupancyTypeDown = (occupancyTypeId: number | string): boolean => { const database = sqlite(databasePath); const currentOrderNumber: number = database - .prepare( - "select orderNumber" + - " from OccupancyTypes" + - " where occupancyTypeId = ?" - ) + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") .get(occupancyTypeId).orderNumber; database @@ -27,11 +21,7 @@ export const moveOccupancyTypeDown = ( .run(currentOrderNumber); const result = database - .prepare( - "update OccupancyTypes" + - " set orderNumber = ? + 1" + - " where occupancyTypeId = ?" - ) + .prepare("update OccupancyTypes set orderNumber = ? + 1 where occupancyTypeId = ?") .run(currentOrderNumber, occupancyTypeId); database.close(); @@ -41,4 +31,41 @@ export const moveOccupancyTypeDown = ( return result.changes > 0; }; +export const moveOccupancyTypeDownToBottom = (occupancyTypeId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentOrderNumber: number = database + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") + .get(occupancyTypeId).orderNumber; + + const maxOrderNumber: number = database + .prepare( + "select max(orderNumber) as maxOrderNumber" + + " from OccupancyTypes" + + " where recordDelete_timeMillis is null" + ) + .get().maxOrderNumber; + + if (currentOrderNumber !== maxOrderNumber) { + database + .prepare("update OccupancyTypes set orderNumber = ? + 1 where occupancyTypeId = ?") + .run(maxOrderNumber, occupancyTypeId); + + database + .prepare( + "update OccupancyTypes" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber > ?" + ) + .run(currentOrderNumber); + } + + database.close(); + + clearOccupancyTypesCache(); + + return true; +}; + export default moveOccupancyTypeDown; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.d.ts b/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.d.ts index 6905d678..06d0a66e 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.d.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.d.ts @@ -1,2 +1,3 @@ export declare const moveOccupancyTypeFieldDown: (occupancyTypeFieldId: number | string) => boolean; +export declare const moveOccupancyTypeFieldDownToBottom: (occupancyTypeFieldId: number | string) => boolean; export default moveOccupancyTypeFieldDown; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js b/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js index 1a02e4bc..68734145 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js +++ b/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js @@ -26,4 +26,42 @@ export const moveOccupancyTypeFieldDown = (occupancyTypeFieldId) => { clearOccupancyTypesCache(); return result.changes > 0; }; +export const moveOccupancyTypeFieldDownToBottom = (occupancyTypeFieldId) => { + const database = sqlite(databasePath); + const currentField = database + .prepare("select occupancyTypeId, orderNumber" + + " from OccupancyTypeFields" + + " where occupancyTypeFieldId = ?") + .get(occupancyTypeFieldId); + const occupancyTypeParameters = []; + if (currentField.occupancyTypeId) { + occupancyTypeParameters.push(currentField.occupancyTypeId); + } + const maxOrderNumber = database + .prepare("select max(orderNumber) as maxOrderNumber" + + " from OccupancyTypeFields" + + " where recordDelete_timeMillis is null" + + (currentField.occupancyTypeId + ? " and occupancyTypeId = ?" + : " and occupancyTypeId is null")) + .get(occupancyTypeParameters).maxOrderNumber; + if (currentField.orderNumber !== maxOrderNumber) { + database + .prepare("update OccupancyTypeFields set orderNumber = ? + 1 where occupancyTypeFieldId = ?") + .run(maxOrderNumber, occupancyTypeFieldId); + occupancyTypeParameters.push(currentField.orderNumber); + database + .prepare("update OccupancyTypeFields" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + (currentField.occupancyTypeId + ? " and occupancyTypeId = ?" + : " and occupancyTypeId is null") + + " and orderNumber > ?") + .run(occupancyTypeParameters); + } + database.close(); + clearOccupancyTypesCache(); + return true; +}; export default moveOccupancyTypeFieldDown; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.ts b/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.ts index 8c2be26a..63f33fc5 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.ts @@ -4,9 +4,7 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { clearOccupancyTypesCache } from "../functions.cache.js"; -export const moveOccupancyTypeFieldDown = ( - occupancyTypeFieldId: number | string -): boolean => { +export const moveOccupancyTypeFieldDown = (occupancyTypeFieldId: number | string): boolean => { const database = sqlite(databasePath); const currentField: { occupancyTypeId?: number; orderNumber: number } = database @@ -44,4 +42,63 @@ export const moveOccupancyTypeFieldDown = ( return result.changes > 0; }; +export const moveOccupancyTypeFieldDownToBottom = ( + occupancyTypeFieldId: number | string +): boolean => { + const database = sqlite(databasePath); + + const currentField: { occupancyTypeId?: number; orderNumber: number } = database + .prepare( + "select occupancyTypeId, orderNumber" + + " from OccupancyTypeFields" + + " where occupancyTypeFieldId = ?" + ) + .get(occupancyTypeFieldId); + + const occupancyTypeParameters = []; + + if (currentField.occupancyTypeId) { + occupancyTypeParameters.push(currentField.occupancyTypeId); + } + + const maxOrderNumber: number = database + .prepare( + "select max(orderNumber) as maxOrderNumber" + + " from OccupancyTypeFields" + + " where recordDelete_timeMillis is null" + + (currentField.occupancyTypeId + ? " and occupancyTypeId = ?" + : " and occupancyTypeId is null") + ) + .get(occupancyTypeParameters).maxOrderNumber; + + if (currentField.orderNumber !== maxOrderNumber) { + database + .prepare( + "update OccupancyTypeFields set orderNumber = ? + 1 where occupancyTypeFieldId = ?" + ) + .run(maxOrderNumber, occupancyTypeFieldId); + + occupancyTypeParameters.push(currentField.orderNumber); + + database + .prepare( + "update OccupancyTypeFields" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + (currentField.occupancyTypeId + ? " and occupancyTypeId = ?" + : " and occupancyTypeId is null") + + " and orderNumber > ?" + ) + .run(occupancyTypeParameters); + } + + database.close(); + + clearOccupancyTypesCache(); + + return true; +}; + export default moveOccupancyTypeFieldDown; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.d.ts b/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.d.ts index bdf7f5b8..21064c8f 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.d.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.d.ts @@ -1,2 +1,3 @@ export declare const moveOccupancyTypeFieldUp: (occupancyTypeFieldId: number | string) => boolean; +export declare const moveOccupancyTypeFieldUpToTop: (occupancyTypeFieldId: number | string) => boolean; export default moveOccupancyTypeFieldUp; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js b/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js index df02bab9..6100266c 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js +++ b/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.js @@ -30,4 +30,35 @@ export const moveOccupancyTypeFieldUp = (occupancyTypeFieldId) => { clearOccupancyTypesCache(); return result.changes > 0; }; +export const moveOccupancyTypeFieldUpToTop = (occupancyTypeFieldId) => { + const database = sqlite(databasePath); + const currentField = database + .prepare("select occupancyTypeId, orderNumber" + + " from OccupancyTypeFields" + + " where occupancyTypeFieldId = ?") + .get(occupancyTypeFieldId); + if (currentField.orderNumber > 0) { + database + .prepare("update OccupancyTypeFields set orderNumber = -1" + + " where occupancyTypeFieldId = ?") + .run(occupancyTypeFieldId); + const occupancyTypeParameters = []; + if (currentField.occupancyTypeId) { + occupancyTypeParameters.push(currentField.occupancyTypeId); + } + occupancyTypeParameters.push(currentField.orderNumber); + database + .prepare("update OccupancyTypeFields" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + (currentField.occupancyTypeId + ? " and occupancyTypeId = ?" + : " and occupancyTypeId is null") + + " and orderNumber < ?") + .run(occupancyTypeParameters); + } + database.close(); + clearOccupancyTypesCache(); + return true; +}; export default moveOccupancyTypeFieldUp; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.ts b/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.ts index a51f9c70..f9ca7270 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeFieldUp.ts @@ -47,4 +47,51 @@ export const moveOccupancyTypeFieldUp = (occupancyTypeFieldId: number | string): return result.changes > 0; }; +export const moveOccupancyTypeFieldUpToTop = (occupancyTypeFieldId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentField: { occupancyTypeId?: number; orderNumber: number } = database + .prepare( + "select occupancyTypeId, orderNumber" + + " from OccupancyTypeFields" + + " where occupancyTypeFieldId = ?" + ) + .get(occupancyTypeFieldId); + + if (currentField.orderNumber > 0) { + database + .prepare( + "update OccupancyTypeFields set orderNumber = -1" + + " where occupancyTypeFieldId = ?" + ) + .run(occupancyTypeFieldId); + + const occupancyTypeParameters = []; + + if (currentField.occupancyTypeId) { + occupancyTypeParameters.push(currentField.occupancyTypeId); + } + + occupancyTypeParameters.push(currentField.orderNumber); + + database + .prepare( + "update OccupancyTypeFields" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + (currentField.occupancyTypeId + ? " and occupancyTypeId = ?" + : " and occupancyTypeId is null") + + " and orderNumber < ?" + ) + .run(occupancyTypeParameters); + } + + database.close(); + + clearOccupancyTypesCache(); + + return true; +}; + export default moveOccupancyTypeFieldUp; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeUp.d.ts b/helpers/lotOccupancyDB/moveOccupancyTypeUp.d.ts index 5b9be02c..95f5df1c 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeUp.d.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeUp.d.ts @@ -1,2 +1,3 @@ export declare const moveOccupancyTypeUp: (occupancyTypeId: number | string) => boolean; +export declare const moveOccupancyTypeUpToTop: (occupancyTypeId: number | string) => boolean; export default moveOccupancyTypeUp; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeUp.js b/helpers/lotOccupancyDB/moveOccupancyTypeUp.js index 4b5ace9b..7f928b99 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeUp.js +++ b/helpers/lotOccupancyDB/moveOccupancyTypeUp.js @@ -4,9 +4,7 @@ import { clearOccupancyTypesCache } from "../functions.cache.js"; export const moveOccupancyTypeUp = (occupancyTypeId) => { const database = sqlite(databasePath); const currentOrderNumber = database - .prepare("select orderNumber" + - " from OccupancyTypes" + - " where occupancyTypeId = ?") + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") .get(occupancyTypeId).orderNumber; if (currentOrderNumber <= 0) { database.close(); @@ -19,12 +17,30 @@ export const moveOccupancyTypeUp = (occupancyTypeId) => { " and orderNumber = ? - 1") .run(currentOrderNumber); const result = database - .prepare("update OccupancyTypes" + - " set orderNumber = ? - 1" + - " where occupancyTypeId = ?") + .prepare("update OccupancyTypes set orderNumber = ? - 1 where occupancyTypeId = ?") .run(currentOrderNumber, occupancyTypeId); database.close(); clearOccupancyTypesCache(); return result.changes > 0; }; +export const moveOccupancyTypeUpToTop = (occupancyTypeId) => { + const database = sqlite(databasePath); + const currentOrderNumber = database + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") + .get(occupancyTypeId).orderNumber; + if (currentOrderNumber > 0) { + database + .prepare("update OccupancyTypes set orderNumber = -1 where occupancyTypeId = ?") + .run(occupancyTypeId); + database + .prepare("update OccupancyTypes" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber < ?") + .run(currentOrderNumber); + } + database.close(); + clearOccupancyTypesCache(); + return true; +}; export default moveOccupancyTypeUp; diff --git a/helpers/lotOccupancyDB/moveOccupancyTypeUp.ts b/helpers/lotOccupancyDB/moveOccupancyTypeUp.ts index e07d06db..b76dea24 100644 --- a/helpers/lotOccupancyDB/moveOccupancyTypeUp.ts +++ b/helpers/lotOccupancyDB/moveOccupancyTypeUp.ts @@ -4,17 +4,11 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { clearOccupancyTypesCache } from "../functions.cache.js"; -export const moveOccupancyTypeUp = ( - occupancyTypeId: number | string -): boolean => { +export const moveOccupancyTypeUp = (occupancyTypeId: number | string): boolean => { const database = sqlite(databasePath); const currentOrderNumber: number = database - .prepare( - "select orderNumber" + - " from OccupancyTypes" + - " where occupancyTypeId = ?" - ) + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") .get(occupancyTypeId).orderNumber; if (currentOrderNumber <= 0) { @@ -32,11 +26,7 @@ export const moveOccupancyTypeUp = ( .run(currentOrderNumber); const result = database - .prepare( - "update OccupancyTypes" + - " set orderNumber = ? - 1" + - " where occupancyTypeId = ?" - ) + .prepare("update OccupancyTypes set orderNumber = ? - 1 where occupancyTypeId = ?") .run(currentOrderNumber, occupancyTypeId); database.close(); @@ -46,4 +36,33 @@ export const moveOccupancyTypeUp = ( return result.changes > 0; }; +export const moveOccupancyTypeUpToTop = (occupancyTypeId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentOrderNumber: number = database + .prepare("select orderNumber from OccupancyTypes where occupancyTypeId = ?") + .get(occupancyTypeId).orderNumber; + + if (currentOrderNumber > 0) { + database + .prepare("update OccupancyTypes set orderNumber = -1 where occupancyTypeId = ?") + .run(occupancyTypeId); + + database + .prepare( + "update OccupancyTypes" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber < ?" + ) + .run(currentOrderNumber); + } + + database.close(); + + clearOccupancyTypesCache(); + + return true; +}; + export default moveOccupancyTypeUp; diff --git a/public-typescript/adminOccupancyTypes.js b/public-typescript/adminOccupancyTypes.js index b3d3a485..93e292f3 100644 --- a/public-typescript/adminOccupancyTypes.js +++ b/public-typescript/adminOccupancyTypes.js @@ -128,14 +128,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); clickEvent.preventDefault(); const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeUp", { - occupancyTypeId + occupancyTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); }; const moveOccupancyTypeDown = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeDown", { - occupancyTypeId + occupancyTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); }; const openEditOccupancyTypeField = (occupancyTypeId, occupancyTypeFieldId) => { @@ -243,14 +245,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); clickEvent.preventDefault(); const occupancyTypeFieldId = clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId; cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", { - occupancyTypeFieldId + occupancyTypeFieldId, + moveToTop: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); }; const moveOccupancyTypeFieldDown = (clickEvent) => { clickEvent.preventDefault(); const occupancyTypeFieldId = clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId; cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", { - occupancyTypeFieldId + occupancyTypeFieldId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler); }; const renderOccupancyTypeFields = (panelElement, occupancyTypeId, occupancyTypeFields) => { diff --git a/public-typescript/adminOccupancyTypes.ts b/public-typescript/adminOccupancyTypes.ts index c06e12d0..3ca12119 100644 --- a/public-typescript/adminOccupancyTypes.ts +++ b/public-typescript/adminOccupancyTypes.ts @@ -245,7 +245,7 @@ declare const bulmaJS: BulmaJS; }); }; - const moveOccupancyTypeUp = (clickEvent: Event) => { + const moveOccupancyTypeUp = (clickEvent: MouseEvent) => { clickEvent.preventDefault(); const occupancyTypeId = ( @@ -257,13 +257,14 @@ declare const bulmaJS: BulmaJS; cityssm.postJSON( urlPrefix + "/admin/doMoveOccupancyTypeUp", { - occupancyTypeId + occupancyTypeId, + moveToTop: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler ); }; - const moveOccupancyTypeDown = (clickEvent: Event) => { + const moveOccupancyTypeDown = (clickEvent: MouseEvent) => { clickEvent.preventDefault(); const occupancyTypeId = ( @@ -275,7 +276,8 @@ declare const bulmaJS: BulmaJS; cityssm.postJSON( urlPrefix + "/admin/doMoveOccupancyTypeDown", { - occupancyTypeId + occupancyTypeId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler ); @@ -465,7 +467,7 @@ declare const bulmaJS: BulmaJS; openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId); }; - const moveOccupancyTypeFieldUp = (clickEvent: Event) => { + const moveOccupancyTypeFieldUp = (clickEvent: MouseEvent) => { clickEvent.preventDefault(); const occupancyTypeFieldId = ( @@ -477,13 +479,14 @@ declare const bulmaJS: BulmaJS; cityssm.postJSON( urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", { - occupancyTypeFieldId + occupancyTypeFieldId, + moveToTop: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler ); }; - const moveOccupancyTypeFieldDown = (clickEvent: Event) => { + const moveOccupancyTypeFieldDown = (clickEvent: MouseEvent) => { clickEvent.preventDefault(); const occupancyTypeFieldId = ( @@ -495,7 +498,8 @@ declare const bulmaJS: BulmaJS; cityssm.postJSON( urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", { - occupancyTypeFieldId + occupancyTypeFieldId, + moveToBottom: clickEvent.shiftKey ? "1" : "0" }, occupancyTypeResponseHandler ); diff --git a/public/javascripts/adminOccupancyTypes.min.js b/public/javascripts/adminOccupancyTypes.min.js index fecc5746..5c3ae7ab 100644 --- a/public/javascripts/adminOccupancyTypes.min.js +++ b/public/javascripts/adminOccupancyTypes.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,c=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#container--occupancyTypes");let a=exports.occupancyTypes;delete exports.occupancyTypes;let s=exports.allOccupancyTypeFields;delete exports.allOccupancyTypeFields;const n=new Set,l=e=>{const c=e.currentTarget,t=c.closest(".container--occupancyType"),a=Number.parseInt(t.dataset.occupancyTypeId,10);n.has(a)?n.delete(a):n.add(a),c.innerHTML=n.has(a)?'':'';const s=t.querySelectorAll(".panel-block");for(const e of s)e.classList.toggle("is-hidden")},o=e=>{e.success?(a=e.occupancyTypes,s=e.allOccupancyTypeFields,f()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupancy+" Type",message:e.errorMessage,contextualColorName:"danger"})},i=e=>{const t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);bulmaJS.confirm({title:"Delete "+exports.aliases.occupancy+" Type",message:"Are you sure you want to delete this "+exports.aliases.occupancy.toLowerCase()+" type?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.occupancy+" Type",callbackFunction:()=>{cityssm.postJSON(c+"/admin/doDeleteOccupancyType",{occupancyTypeId:t},o)}}})},d=t=>{const s=Number.parseInt(t.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10),n=a.find(e=>s===e.occupancyTypeId);let l;const i=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doUpdateOccupancyType",e.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyType",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeEdit--occupancyTypeId").value=s.toString(),c.querySelector("#occupancyTypeEdit--occupancyType").value=n.occupancyType},onshown:(e,c)=>{l=c,e.querySelector("#occupancyTypeEdit--occupancyType").focus(),e.querySelector("form").addEventListener("submit",i),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},p=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);let s;const l=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doAddOccupancyTypeField",e.currentTarget,e=>{n.add(a),o(e),e.success&&(s(),r(a,e.occupancyTypeFieldId))})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField",{onshow:c=>{e.populateAliases(c),a&&(c.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value=a.toString())},onshown:(e,c)=>{s=c,e.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus(),e.querySelector("form").addEventListener("submit",l),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},u=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeUp",{occupancyTypeId:t},o)},y=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeDown",{occupancyTypeId:t},o)},r=(t,n)=>{let l;t&&(l=a.find(e=>e.occupancyTypeId===t));const i=(l?l.occupancyTypeFields:s).find(e=>e.occupancyTypeFieldId===n);let d,p,u,y,r;const v=()=>{p.min=d.value},T=()=>{""===y.value?(d.disabled=!1,p.disabled=!1,u.disabled=!1):(d.disabled=!0,p.disabled=!0,u.disabled=!0)},m=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doUpdateOccupancyTypeField",e.currentTarget,e=>{o(e),e.success&&r()})},b=()=>{bulmaJS.confirm({title:"Delete Field",message:"Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.",contextualColorName:"warning",okButton:{text:"Yes, Delete Field",callbackFunction:()=>{cityssm.postJSON(c+"/admin/doDeleteOccupancyTypeField",{occupancyTypeFieldId:n},e=>{o(e),e.success&&r()})}}})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyTypeField",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldId").value=i.occupancyTypeFieldId.toString(),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value=i.occupancyTypeField,c.querySelector("#occupancyTypeFieldEdit--isRequired").value=i.isRequired?"1":"0",(d=c.querySelector("#occupancyTypeFieldEdit--minimumLength")).value=i.minimumLength.toString(),(p=c.querySelector("#occupancyTypeFieldEdit--maximumLength")).value=i.maximumLength.toString(),(u=c.querySelector("#occupancyTypeFieldEdit--pattern")).value=i.pattern,(y=c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues")).value=i.occupancyTypeFieldValues,T()},onshown:(e,c)=>{r=c,bulmaJS.init(e),bulmaJS.toggleHtmlClipped(),cityssm.enableNavBlocker(),e.querySelector("form").addEventListener("submit",m),d.addEventListener("keyup",v),v(),y.addEventListener("keyup",T),e.querySelector("#button--deleteOccupancyTypeField").addEventListener("click",b)},onremoved:()=>{bulmaJS.toggleHtmlClipped(),cityssm.disableNavBlocker()}})},v=e=>{e.preventDefault();const c=Number.parseInt(e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId,10),t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);r(t,c)},T=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeFieldUp",{occupancyTypeFieldId:t},o)},m=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeFieldDown",{occupancyTypeFieldId:t},o)},b=(e,c,t)=>{if(0===t.length)e.insertAdjacentHTML("beforeend",'

There are no additional fields.

');else for(const a of t){const t=document.createElement("div");t.className="panel-block is-block container--occupancyTypeField",c&&!n.has(c)&&t.classList.add("is-hidden"),t.dataset.occupancyTypeFieldId=a.occupancyTypeFieldId.toString(),t.innerHTML='
',t.querySelector(".button--editOccupancyTypeField").addEventListener("click",v),t.querySelector(".button--moveOccupancyTypeFieldUp").addEventListener("click",T),t.querySelector(".button--moveOccupancyTypeFieldDown").addEventListener("click",m),e.append(t)}},f=()=>{if(t.innerHTML='

(All Occupancy Types)

',b(t.querySelector("#container--allOccupancyTypeFields"),void 0,s),t.querySelector(".button--addOccupancyTypeField").addEventListener("click",p),0!==a.length)for(const e of a){const c=document.createElement("div");c.className="panel container--occupancyType",c.dataset.occupancyTypeId=e.occupancyTypeId.toString(),c.innerHTML='

'+cityssm.escapeHTML(e.occupancyType)+'

',b(c,e.occupancyTypeId,e.occupancyTypeFields),c.querySelector(".button--toggleOccupancyTypeFields").addEventListener("click",l),c.querySelector(".button--deleteOccupancyType").addEventListener("click",i),c.querySelector(".button--editOccupancyType").addEventListener("click",d),c.querySelector(".button--addOccupancyTypeField").addEventListener("click",p),c.querySelector(".button--moveOccupancyTypeUp").addEventListener("click",u),c.querySelector(".button--moveOccupancyTypeDown").addEventListener("click",y),t.append(c)}else t.insertAdjacentHTML("afterbegin",'
There are no active '+exports.aliases.occupancy.toLowerCase()+" types.

")};document.querySelector("#button--addOccupancyType").addEventListener("click",()=>{let t;const s=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doAddOccupancyType",e.currentTarget,e=>{e.success?(t(),a=e.occupancyTypes,f()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy+" Type",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyType",{onshow:c=>{e.populateAliases(c)},onshown:(e,c)=>{t=c,e.querySelector("#occupancyTypeAdd--occupancyType").focus(),e.querySelector("form").addEventListener("submit",s),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),f()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,c=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#container--occupancyTypes");let a=exports.occupancyTypes;delete exports.occupancyTypes;let s=exports.allOccupancyTypeFields;delete exports.allOccupancyTypeFields;const n=new Set,l=e=>{const c=e.currentTarget,t=c.closest(".container--occupancyType"),a=Number.parseInt(t.dataset.occupancyTypeId,10);n.has(a)?n.delete(a):n.add(a),c.innerHTML=n.has(a)?'':'';const s=t.querySelectorAll(".panel-block");for(const e of s)e.classList.toggle("is-hidden")},o=e=>{e.success?(a=e.occupancyTypes,s=e.allOccupancyTypeFields,f()):bulmaJS.alert({title:"Error Updating "+exports.aliases.occupancy+" Type",message:e.errorMessage,contextualColorName:"danger"})},i=e=>{const t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);bulmaJS.confirm({title:"Delete "+exports.aliases.occupancy+" Type",message:"Are you sure you want to delete this "+exports.aliases.occupancy.toLowerCase()+" type?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.occupancy+" Type",callbackFunction:()=>{cityssm.postJSON(c+"/admin/doDeleteOccupancyType",{occupancyTypeId:t},o)}}})},d=t=>{const s=Number.parseInt(t.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10),n=a.find(e=>s===e.occupancyTypeId);let l;const i=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doUpdateOccupancyType",e.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyType",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeEdit--occupancyTypeId").value=s.toString(),c.querySelector("#occupancyTypeEdit--occupancyType").value=n.occupancyType},onshown:(e,c)=>{l=c,e.querySelector("#occupancyTypeEdit--occupancyType").focus(),e.querySelector("form").addEventListener("submit",i),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},p=t=>{const a=Number.parseInt(t.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);let s;const l=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doAddOccupancyTypeField",e.currentTarget,e=>{n.add(a),o(e),e.success&&(s(),r(a,e.occupancyTypeFieldId))})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField",{onshow:c=>{e.populateAliases(c),a&&(c.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value=a.toString())},onshown:(e,c)=>{s=c,e.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus(),e.querySelector("form").addEventListener("submit",l),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},u=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeUp",{occupancyTypeId:t,moveToTop:e.shiftKey?"1":"0"},o)},y=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeDown",{occupancyTypeId:t,moveToBottom:e.shiftKey?"1":"0"},o)},r=(t,n)=>{let l;t&&(l=a.find(e=>e.occupancyTypeId===t));const i=(l?l.occupancyTypeFields:s).find(e=>e.occupancyTypeFieldId===n);let d,p,u,y,r;const T=()=>{p.min=d.value},m=()=>{""===y.value?(d.disabled=!1,p.disabled=!1,u.disabled=!1):(d.disabled=!0,p.disabled=!0,u.disabled=!0)},v=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doUpdateOccupancyTypeField",e.currentTarget,e=>{o(e),e.success&&r()})},b=()=>{bulmaJS.confirm({title:"Delete Field",message:"Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.",contextualColorName:"warning",okButton:{text:"Yes, Delete Field",callbackFunction:()=>{cityssm.postJSON(c+"/admin/doDeleteOccupancyTypeField",{occupancyTypeFieldId:n},e=>{o(e),e.success&&r()})}}})};cityssm.openHtmlModal("adminOccupancyTypes-editOccupancyTypeField",{onshow:c=>{e.populateAliases(c),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldId").value=i.occupancyTypeFieldId.toString(),c.querySelector("#occupancyTypeFieldEdit--occupancyTypeField").value=i.occupancyTypeField,c.querySelector("#occupancyTypeFieldEdit--isRequired").value=i.isRequired?"1":"0",(d=c.querySelector("#occupancyTypeFieldEdit--minimumLength")).value=i.minimumLength.toString(),(p=c.querySelector("#occupancyTypeFieldEdit--maximumLength")).value=i.maximumLength.toString(),(u=c.querySelector("#occupancyTypeFieldEdit--pattern")).value=i.pattern,(y=c.querySelector("#occupancyTypeFieldEdit--occupancyTypeFieldValues")).value=i.occupancyTypeFieldValues,m()},onshown:(e,c)=>{r=c,bulmaJS.init(e),bulmaJS.toggleHtmlClipped(),cityssm.enableNavBlocker(),e.querySelector("form").addEventListener("submit",v),d.addEventListener("keyup",T),T(),y.addEventListener("keyup",m),e.querySelector("#button--deleteOccupancyTypeField").addEventListener("click",b)},onremoved:()=>{bulmaJS.toggleHtmlClipped(),cityssm.disableNavBlocker()}})},T=e=>{e.preventDefault();const c=Number.parseInt(e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId,10),t=Number.parseInt(e.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId,10);r(t,c)},m=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeFieldUp",{occupancyTypeFieldId:t,moveToTop:e.shiftKey?"1":"0"},o)},v=e=>{e.preventDefault();const t=e.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;cityssm.postJSON(c+"/admin/doMoveOccupancyTypeFieldDown",{occupancyTypeFieldId:t,moveToBottom:e.shiftKey?"1":"0"},o)},b=(e,c,t)=>{if(0===t.length)e.insertAdjacentHTML("beforeend",'

There are no additional fields.

');else for(const a of t){const t=document.createElement("div");t.className="panel-block is-block container--occupancyTypeField",c&&!n.has(c)&&t.classList.add("is-hidden"),t.dataset.occupancyTypeFieldId=a.occupancyTypeFieldId.toString(),t.innerHTML='
',t.querySelector(".button--editOccupancyTypeField").addEventListener("click",T),t.querySelector(".button--moveOccupancyTypeFieldUp").addEventListener("click",m),t.querySelector(".button--moveOccupancyTypeFieldDown").addEventListener("click",v),e.append(t)}},f=()=>{if(t.innerHTML='

(All Occupancy Types)

',b(t.querySelector("#container--allOccupancyTypeFields"),void 0,s),t.querySelector(".button--addOccupancyTypeField").addEventListener("click",p),0!==a.length)for(const e of a){const c=document.createElement("div");c.className="panel container--occupancyType",c.dataset.occupancyTypeId=e.occupancyTypeId.toString(),c.innerHTML='

'+cityssm.escapeHTML(e.occupancyType)+'

',b(c,e.occupancyTypeId,e.occupancyTypeFields),c.querySelector(".button--toggleOccupancyTypeFields").addEventListener("click",l),c.querySelector(".button--deleteOccupancyType").addEventListener("click",i),c.querySelector(".button--editOccupancyType").addEventListener("click",d),c.querySelector(".button--addOccupancyTypeField").addEventListener("click",p),c.querySelector(".button--moveOccupancyTypeUp").addEventListener("click",u),c.querySelector(".button--moveOccupancyTypeDown").addEventListener("click",y),t.append(c)}else t.insertAdjacentHTML("afterbegin",'
There are no active '+exports.aliases.occupancy.toLowerCase()+" types.

")};document.querySelector("#button--addOccupancyType").addEventListener("click",()=>{let t;const s=e=>{e.preventDefault(),cityssm.postJSON(c+"/admin/doAddOccupancyType",e.currentTarget,e=>{e.success?(t(),a=e.occupancyTypes,f()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy+" Type",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyType",{onshow:c=>{e.populateAliases(c)},onshown:(e,c)=>{t=c,e.querySelector("#occupancyTypeAdd--occupancyType").focus(),e.querySelector("form").addEventListener("submit",s),bulmaJS.toggleHtmlClipped()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}),f()})(); \ No newline at end of file