burial site type management

deepsource-autofix-76c6eb20
Dan Gowans 2025-02-28 14:59:28 -05:00
parent 414a45041c
commit acbb14a4d2
23 changed files with 384 additions and 362 deletions

View File

@ -9,7 +9,7 @@ recordIdColumns.set('Contracts', 'contractId');
recordIdColumns.set('ContractComments', 'contractCommentId'); recordIdColumns.set('ContractComments', 'contractCommentId');
recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId'); recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId');
recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId'); recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId');
recordIdColumns.set('BurialSiteTypeFields', 'burialSiteFieldTypeId'); recordIdColumns.set('BurialSiteTypeFields', 'burialSiteTypeFieldId');
recordIdColumns.set('Cemeteries', 'cemeteryId'); recordIdColumns.set('Cemeteries', 'cemeteryId');
recordIdColumns.set('ContractTypes', 'contractTypeId'); recordIdColumns.set('ContractTypes', 'contractTypeId');
recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId'); recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId');

View File

@ -30,7 +30,7 @@ recordIdColumns.set('Contracts', 'contractId')
recordIdColumns.set('ContractComments', 'contractCommentId') recordIdColumns.set('ContractComments', 'contractCommentId')
recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId') recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId')
recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId') recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId')
recordIdColumns.set('BurialSiteTypeFields', 'burialSiteFieldTypeId') recordIdColumns.set('BurialSiteTypeFields', 'burialSiteTypeFieldId')
recordIdColumns.set('Cemeteries', 'cemeteryId') recordIdColumns.set('Cemeteries', 'cemeteryId')
recordIdColumns.set('ContractTypes', 'contractTypeId') recordIdColumns.set('ContractTypes', 'contractTypeId')
recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId') recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId')

View File

@ -1,8 +1,8 @@
import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js';
export default async function handler(_request, response) { export default async function handler(_request, response) {
const lotTypes = await getBurialSiteTypes(); const burialSiteTypes = await getBurialSiteTypes();
response.render('admin-burialSiteTypes', { response.render('admin-burialSiteTypes', {
headTitle: `Burial Site Type Management`, headTitle: `Burial Site Type Management`,
lotTypes burialSiteTypes
}); });
} }

View File

@ -6,10 +6,10 @@ export default async function handler(
_request: Request, _request: Request,
response: Response response: Response
): Promise<void> { ): Promise<void> {
const lotTypes = await getBurialSiteTypes() const burialSiteTypes = await getBurialSiteTypes()
response.render('admin-burialSiteTypes', { response.render('admin-burialSiteTypes', {
headTitle: `Burial Site Type Management`, headTitle: `Burial Site Type Management`,
lotTypes burialSiteTypes
}) })
} }

View File

@ -1,5 +1,5 @@
import type { Request, Response } from 'express'; import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, { export default function handler(request: Request<unknown, unknown, {
lotType: string; burialSiteType: string;
orderNumber?: string | number; orderNumber?: string | number;
}>, response: Response): Promise<void>; }>, response: Response): Promise<void>;

View File

@ -1,7 +1,7 @@
import addRecord from '../../database/addRecord.js'; import addRecord from '../../database/addRecord.js';
import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js';
export default async function handler(request, response) { export default async function handler(request, response) {
const burialSiteTypeId = await addRecord('BurialSiteTypes', request.body.lotType, request.body.orderNumber ?? -1, request.session.user); const burialSiteTypeId = await addRecord('BurialSiteTypes', request.body.burialSiteType, request.body.orderNumber ?? -1, request.session.user);
const burialSiteTypes = await getBurialSiteTypes(); const burialSiteTypes = await getBurialSiteTypes();
response.json({ response.json({
success: true, success: true,

View File

@ -7,13 +7,13 @@ export default async function handler(
request: Request< request: Request<
unknown, unknown,
unknown, unknown,
{ lotType: string; orderNumber?: string | number } { burialSiteType: string; orderNumber?: string | number }
>, >,
response: Response response: Response
): Promise<void> { ): Promise<void> {
const burialSiteTypeId = await addRecord( const burialSiteTypeId = await addRecord(
'BurialSiteTypes', 'BurialSiteTypes',
request.body.lotType, request.body.burialSiteType,
request.body.orderNumber ?? -1, request.body.orderNumber ?? -1,
request.session.user as User request.session.user as User
) )

View File

@ -1,4 +1,4 @@
import type { Request, Response } from 'express'; import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, { export default function handler(request: Request<unknown, unknown, {
lotTypeFieldId: string; burialSiteTypeFieldId: string;
}>, response: Response): Promise<void>; }>, response: Response): Promise<void>;

View File

@ -1,7 +1,7 @@
import { deleteRecord } from '../../database/deleteRecord.js'; import { deleteRecord } from '../../database/deleteRecord.js';
import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js';
export default async function handler(request, response) { export default async function handler(request, response) {
const success = await deleteRecord('BurialSiteTypeFields', request.body.lotTypeFieldId, request.session.user); const success = await deleteRecord('BurialSiteTypeFields', request.body.burialSiteTypeFieldId, request.session.user);
const burialSiteTypes = await getBurialSiteTypes(); const burialSiteTypes = await getBurialSiteTypes();
response.json({ response.json({
success, success,

View File

@ -4,12 +4,12 @@ import { deleteRecord } from '../../database/deleteRecord.js'
import { getBurialSiteTypes } from '../../helpers/functions.cache.js' import { getBurialSiteTypes } from '../../helpers/functions.cache.js'
export default async function handler( export default async function handler(
request: Request<unknown, unknown, { lotTypeFieldId: string }>, request: Request<unknown, unknown, { burialSiteTypeFieldId: string }>,
response: Response response: Response
): Promise<void> { ): Promise<void> {
const success = await deleteRecord( const success = await deleteRecord(
'BurialSiteTypeFields', 'BurialSiteTypeFields',
request.body.lotTypeFieldId as string, request.body.burialSiteTypeFieldId as string,
request.session.user as User request.session.user as User
) )

View File

@ -1,5 +1,5 @@
import type { Request, Response } from 'express'; import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, { export default function handler(request: Request<unknown, unknown, {
lotTypeFieldId: string; burialSiteTypeFieldId: string;
moveToEnd: '0' | '1'; moveToEnd: '0' | '1';
}>, response: Response): Promise<void>; }>, response: Response): Promise<void>;

View File

@ -2,8 +2,8 @@ import { moveBurialSiteTypeFieldDown, moveBurialSiteTypeFieldDownToBottom } from
import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js';
export default async function handler(request, response) { export default async function handler(request, response) {
const success = request.body.moveToEnd === '1' const success = request.body.moveToEnd === '1'
? await moveBurialSiteTypeFieldDownToBottom(request.body.lotTypeFieldId) ? await moveBurialSiteTypeFieldDownToBottom(request.body.burialSiteTypeFieldId)
: await moveBurialSiteTypeFieldDown(request.body.lotTypeFieldId); : await moveBurialSiteTypeFieldDown(request.body.burialSiteTypeFieldId);
const burialSiteTypes = await getBurialSiteTypes(); const burialSiteTypes = await getBurialSiteTypes();
response.json({ response.json({
success, success,

View File

@ -10,14 +10,14 @@ export default async function handler(
request: Request< request: Request<
unknown, unknown,
unknown, unknown,
{ lotTypeFieldId: string; moveToEnd: '0' | '1' } { burialSiteTypeFieldId: string; moveToEnd: '0' | '1' }
>, >,
response: Response response: Response
): Promise<void> { ): Promise<void> {
const success = const success =
request.body.moveToEnd === '1' request.body.moveToEnd === '1'
? await moveBurialSiteTypeFieldDownToBottom(request.body.lotTypeFieldId) ? await moveBurialSiteTypeFieldDownToBottom(request.body.burialSiteTypeFieldId)
: await moveBurialSiteTypeFieldDown(request.body.lotTypeFieldId) : await moveBurialSiteTypeFieldDown(request.body.burialSiteTypeFieldId)
const burialSiteTypes = await getBurialSiteTypes() const burialSiteTypes = await getBurialSiteTypes()

View File

@ -1,5 +1,5 @@
import type { Request, Response } from 'express'; import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, { export default function handler(request: Request<unknown, unknown, {
lotTypeFieldId: string; burialSiteTypeFieldId: string;
moveToEnd: '0' | '1'; moveToEnd: '0' | '1';
}>, response: Response): Promise<void>; }>, response: Response): Promise<void>;

View File

@ -2,8 +2,8 @@ import { moveBurialSiteTypeFieldUp, moveBurialSiteTypeFieldUpToTop } from '../..
import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js';
export default async function handler(request, response) { export default async function handler(request, response) {
const success = request.body.moveToEnd === '1' const success = request.body.moveToEnd === '1'
? await moveBurialSiteTypeFieldUpToTop(request.body.lotTypeFieldId) ? await moveBurialSiteTypeFieldUpToTop(request.body.burialSiteTypeFieldId)
: await moveBurialSiteTypeFieldUp(request.body.lotTypeFieldId); : await moveBurialSiteTypeFieldUp(request.body.burialSiteTypeFieldId);
const burialSiteTypes = await getBurialSiteTypes(); const burialSiteTypes = await getBurialSiteTypes();
response.json({ response.json({
success, success,

View File

@ -10,14 +10,14 @@ export default async function handler(
request: Request< request: Request<
unknown, unknown,
unknown, unknown,
{ lotTypeFieldId: string; moveToEnd: '0' | '1' } { burialSiteTypeFieldId: string; moveToEnd: '0' | '1' }
>, >,
response: Response response: Response
): Promise<void> { ): Promise<void> {
const success = const success =
request.body.moveToEnd === '1' request.body.moveToEnd === '1'
? await moveBurialSiteTypeFieldUpToTop(request.body.lotTypeFieldId) ? await moveBurialSiteTypeFieldUpToTop(request.body.burialSiteTypeFieldId)
: await moveBurialSiteTypeFieldUp(request.body.lotTypeFieldId) : await moveBurialSiteTypeFieldUp(request.body.burialSiteTypeFieldId)
const burialSiteTypes = await getBurialSiteTypes() const burialSiteTypes = await getBurialSiteTypes()

View File

@ -2,9 +2,7 @@
<div class="modal-background"></div> <div class="modal-background"></div>
<div class="modal-card has-width-900"> <div class="modal-card has-width-900">
<header class="modal-card-head"> <header class="modal-card-head">
<h3 class="modal-card-title"> <h3 class="modal-card-title">Add Burial Site Type</h3>
Add <span class="alias" data-alias="Lot"></span> Type
</h3>
<button <button
class="delete is-close-modal-button" class="delete is-close-modal-button"
aria-label="close" aria-label="close"
@ -12,16 +10,16 @@
></button> ></button>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
<form id="form--lotTypeAdd"> <form id="form--burialSiteTypeAdd">
<div class="field"> <div class="field">
<label class="label" for="lotTypeAdd--lotType" <label class="label" for="burialSiteTypeAdd--burialSiteType"
><span class="alias" data-alias="Lot"></span> Type</label >Burial Site Type</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeAdd--lotType" id="burialSiteTypeAdd--burialSiteType"
name="lotType" name="burialSiteType"
type="text" type="text"
maxlength="100" maxlength="100"
required required
@ -31,9 +29,13 @@
</form> </form>
</section> </section>
<footer class="modal-card-foot justify-right"> <footer class="modal-card-foot justify-right">
<button class="button is-success" type="submit" form="form--lotTypeAdd"> <button
class="button is-success"
type="submit"
form="form--burialSiteTypeAdd"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span> <span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add <span class="alias" data-alias="Lot"></span> Type</span> <span>Add Burial Site Type</span>
</button> </button>
<button class="button is-close-modal-button" type="button">Cancel</button> <button class="button is-close-modal-button" type="button">Cancel</button>
</footer> </footer>

View File

@ -12,22 +12,22 @@
></button> ></button>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
<form id="form--lotTypeFieldAdd"> <form id="form--burialSiteTypeFieldAdd">
<input <input
class="input" class="input"
id="lotTypeFieldAdd--burialSiteTypeId" id="burialSiteTypeFieldAdd--burialSiteTypeId"
name="burialSiteTypeId" name="burialSiteTypeId"
type="hidden" type="hidden"
/> />
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldAdd--lotTypeField" <label class="label" for="burialSiteTypeFieldAdd--burialSiteTypeField"
>New Field Name</label >New Field Name</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeFieldAdd--lotTypeField" id="burialSiteTypeFieldAdd--burialSiteTypeField"
name="lotTypeField" name="burialSiteTypeField"
type="text" type="text"
maxlength="100" maxlength="100"
required required
@ -40,7 +40,7 @@
<button <button
class="button is-success" class="button is-success"
type="submit" type="submit"
form="form--lotTypeFieldAdd" form="form--burialSiteTypeFieldAdd"
> >
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span> <span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Field</span> <span>Add Field</span>

View File

@ -3,7 +3,7 @@
<div class="modal-card has-width-900"> <div class="modal-card has-width-900">
<header class="modal-card-head"> <header class="modal-card-head">
<h3 class="modal-card-title"> <h3 class="modal-card-title">
Update <span class="alias" data-alias="Lot"></span> Type Update Burial Site Type
</h3> </h3>
<button <button
class="delete is-close-modal-button" class="delete is-close-modal-button"
@ -12,22 +12,22 @@
></button> ></button>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
<form id="form--lotTypeEdit"> <form id="form--burialSiteTypeEdit">
<input <input
class="input" class="input"
id="lotTypeEdit--burialSiteTypeId" id="burialSiteTypeEdit--burialSiteTypeId"
name="burialSiteTypeId" name="burialSiteTypeId"
type="hidden" type="hidden"
/> />
<div class="field"> <div class="field">
<label class="label" for="lotTypeEdit--lotType" <label class="label" for="burialSiteTypeEdit--burialSiteType"
><span class="alias" data-alias="Lot"></span> Type</label >Burial Site Type</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeEdit--lotType" id="burialSiteTypeEdit--burialSiteType"
name="lotType" name="burialSiteType"
type="text" type="text"
maxlength="100" maxlength="100"
required required
@ -37,9 +37,9 @@
</form> </form>
</section> </section>
<footer class="modal-card-foot justify-right"> <footer class="modal-card-foot justify-right">
<button class="button is-success" type="submit" form="form--lotTypeEdit"> <button class="button is-success" type="submit" form="form--burialSiteTypeEdit">
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span> <span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Update <span class="alias" data-alias="Lot"></span> Type</span> <span>Update Burial Site Type</span>
</button> </button>
<button class="button is-close-modal-button" type="button">Cancel</button> <button class="button is-close-modal-button" type="button">Cancel</button>
</footer> </footer>

View File

@ -3,7 +3,7 @@
<div class="modal-card has-width-900"> <div class="modal-card has-width-900">
<header class="modal-card-head"> <header class="modal-card-head">
<h3 class="modal-card-title"> <h3 class="modal-card-title">
Update <span class="alias" data-alias="Lot"></span> Type Field Update Burial Site Type Field
</h3> </h3>
<button <button
class="delete is-close-modal-button" class="delete is-close-modal-button"
@ -12,24 +12,24 @@
></button> ></button>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
<form id="form--lotTypeFieldEdit"> <form id="form--burialSiteTypeFieldEdit">
<input <input
class="input" class="input"
id="lotTypeFieldEdit--lotTypeFieldId" id="burialSiteTypeFieldEdit--burialSiteTypeFieldId"
name="lotTypeFieldId" name="burialSiteTypeFieldId"
type="hidden" type="hidden"
/> />
<div class="columns"> <div class="columns">
<div class="column is-8"> <div class="column is-8">
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--lotTypeField" <label class="label" for="burialSiteTypeFieldEdit--burialSiteTypeField"
>Field Name</label >Field Name</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeFieldEdit--lotTypeField" id="burialSiteTypeFieldEdit--burialSiteTypeField"
name="lotTypeField" name="burialSiteTypeField"
type="text" type="text"
maxlength="100" maxlength="100"
required required
@ -39,12 +39,12 @@
</div> </div>
<div class="column"> <div class="column">
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--isRequired" <label class="label" for="burialSiteTypeFieldEdit--isRequired"
>Required</label >Required</label
> >
<div class="control"> <div class="control">
<div class="select is-fullwidth"> <div class="select is-fullwidth">
<select id="lotTypeFieldEdit--isRequired" name="isRequired"> <select id="burialSiteTypeFieldEdit--isRequired" name="isRequired">
<option value="0">Not Required</option> <option value="0">Not Required</option>
<option value="1">Required</option> <option value="1">Required</option>
</select> </select>
@ -57,13 +57,13 @@
<div class="columns"> <div class="columns">
<div class="column is-5"> <div class="column is-5">
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--fieldType" <label class="label" for="burialSiteTypeFieldEdit--fieldType"
>Field Type</label >Field Type</label
> >
<div class="control"> <div class="control">
<div class="select is-fullwidth"> <div class="select is-fullwidth">
<select <select
id="lotTypeFieldEdit--fieldType" id="burialSiteTypeFieldEdit--fieldType"
name="fieldType" name="fieldType"
> >
<option value="text">Text Field</option> <option value="text">Text Field</option>
@ -76,13 +76,13 @@
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--minLength" <label class="label" for="burialSiteTypeFieldEdit--minLength"
>Minimum Length</label >Minimum Length</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeFieldEdit--minLength" id="burialSiteTypeFieldEdit--minLength"
name="minLength" name="minLength"
type="number" type="number"
min="0" min="0"
@ -95,13 +95,13 @@
</div> </div>
<div class="column"> <div class="column">
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--maxLength" <label class="label" for="burialSiteTypeFieldEdit--maxLength"
>Maximum Length</label >Maximum Length</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeFieldEdit--maxLength" id="burialSiteTypeFieldEdit--maxLength"
name="maxLength" name="maxLength"
type="number" type="number"
min="0" min="0"
@ -114,13 +114,13 @@
</div> </div>
</div> </div>
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--pattern" <label class="label" for="burialSiteTypeFieldEdit--pattern"
>Regular Expression</label >Regular Expression</label
> >
<div class="control"> <div class="control">
<input <input
class="input" class="input"
id="lotTypeFieldEdit--pattern" id="burialSiteTypeFieldEdit--pattern"
name="pattern" name="pattern"
type="text" type="text"
maxlength="100" maxlength="100"
@ -130,14 +130,14 @@
</div> </div>
<div class="column"> <div class="column">
<div class="field"> <div class="field">
<label class="label" for="lotTypeFieldEdit--lotTypeFieldValues" <label class="label" for="burialSiteTypeFieldEdit--fieldValues"
>Field Values</label >Field Values</label
> >
<div class="control"> <div class="control">
<textarea <textarea
class="textarea" class="textarea"
id="lotTypeFieldEdit--lotTypeFieldValues" id="burialSiteTypeFieldEdit--fieldValues"
name="lotTypeFieldValues" name="fieldValues"
></textarea> ></textarea>
</div> </div>
<p class="help is-info"> <p class="help is-info">
@ -153,7 +153,7 @@
<button <button
class="button is-success" class="button is-success"
type="submit" type="submit"
form="form--lotTypeFieldEdit" form="form--burialSiteTypeFieldEdit"
> >
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span> <span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Update Field</span> <span>Update Field</span>
@ -169,7 +169,7 @@
</div> </div>
<div class="dropdown-menu"> <div class="dropdown-menu">
<div class="dropdown-content"> <div class="dropdown-content">
<a class="dropdown-item" id="button--deleteLotTypeField" href="#"> <a class="dropdown-item" id="button--deleteBurialSiteTypeField" href="#">
<span class="icon is-small" <span class="icon is-small"
><i class="fas fa-trash has-text-danger" aria-hidden="true"></i ><i class="fas fa-trash has-text-danger" aria-hidden="true"></i
></span> ></span>

View File

@ -1,84 +1,86 @@
"use strict"; "use strict";
// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
/* eslint-disable max-lines */
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
(() => { (() => {
const los = exports.los; const los = exports.los;
const containerElement = document.querySelector('#container--lotTypes'); const containerElement = document.querySelector('#container--burialSiteTypes');
let lotTypes = exports.lotTypes; let burialSiteTypes = exports.burialSiteTypes;
delete exports.lotTypes; delete exports.burialSiteTypes;
const expandedLotTypes = new Set(); const expandedBurialSiteTypes = new Set();
function toggleBurialSiteTypeFields(clickEvent) { function toggleBurialSiteTypeFields(clickEvent) {
const toggleButtonElement = clickEvent.currentTarget; const toggleButtonElement = clickEvent.currentTarget;
const lotTypeElement = toggleButtonElement.closest('.container--lotType'); const burialSiteTypeElement = toggleButtonElement.closest('.container--burialSiteType');
const burialSiteTypeId = Number.parseInt(lotTypeElement.dataset.burialSiteTypeId ?? '', 10); const burialSiteTypeId = Number.parseInt(burialSiteTypeElement.dataset.burialSiteTypeId ?? '', 10);
if (expandedLotTypes.has(burialSiteTypeId)) { if (expandedBurialSiteTypes.has(burialSiteTypeId)) {
expandedLotTypes.delete(burialSiteTypeId); expandedBurialSiteTypes.delete(burialSiteTypeId);
} }
else { else {
expandedLotTypes.add(burialSiteTypeId); expandedBurialSiteTypes.add(burialSiteTypeId);
} }
// eslint-disable-next-line no-unsanitized/property // eslint-disable-next-line no-unsanitized/property
toggleButtonElement.innerHTML = expandedLotTypes.has(burialSiteTypeId) toggleButtonElement.innerHTML = expandedBurialSiteTypes.has(burialSiteTypeId)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>' ? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'; : '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>';
const panelBlockElements = lotTypeElement.querySelectorAll('.panel-block'); const panelBlockElements = burialSiteTypeElement.querySelectorAll('.panel-block');
for (const panelBlockElement of panelBlockElements) { for (const panelBlockElement of panelBlockElements) {
panelBlockElement.classList.toggle('is-hidden'); panelBlockElement.classList.toggle('is-hidden');
} }
} }
function lotTypeResponseHandler(rawResponseJSON) { function burialSiteTypeResponseHandler(rawResponseJSON) {
const responseJSON = rawResponseJSON; const responseJSON = rawResponseJSON;
if (responseJSON.success) { if (responseJSON.success) {
lotTypes = responseJSON.lotTypes; burialSiteTypes = responseJSON.burialSiteTypes;
renderLotTypes(); renderBurialSiteTypes();
} }
else { else {
bulmaJS.alert({ bulmaJS.alert({
title: `Error Updating ${los.escapedAliases.Lot} Type`, title: `Error Updating Burial Site Type`,
message: responseJSON.errorMessage ?? '', message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger' contextualColorName: 'danger'
}); });
} }
} }
function deleteLotType(clickEvent) { function deleteBurialSiteType(clickEvent) {
const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--burialSiteType').dataset.burialSiteTypeId ?? '', 10);
function doDelete() { function doDelete() {
cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteBurialSiteType`, { cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteBurialSiteType`, {
burialSiteTypeId burialSiteTypeId
}, lotTypeResponseHandler); }, burialSiteTypeResponseHandler);
} }
bulmaJS.confirm({ bulmaJS.confirm({
title: `Delete ${los.escapedAliases.Lot} Type`, title: `Delete Burial Site Type`,
message: `Are you sure you want to delete this ${los.escapedAliases.lot} type?`, message: `Are you sure you want to delete this burial site type?`,
contextualColorName: 'warning', contextualColorName: 'warning',
okButton: { okButton: {
text: `Yes, Delete ${los.escapedAliases.Lot} Type`, text: `Yes, Delete Burial Site Type`,
callbackFunction: doDelete callbackFunction: doDelete
} }
}); });
} }
function openEditLotType(clickEvent) { function openEditBurialSiteType(clickEvent) {
const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--burialSiteType').dataset.burialSiteTypeId ?? '', 10);
const lotType = lotTypes.find((currentLotType) => burialSiteTypeId === currentLotType.burialSiteTypeId); const burialSiteType = burialSiteTypes.find((currentType) => burialSiteTypeId === currentType.burialSiteTypeId);
let editCloseModalFunction; let editCloseModalFunction;
function doEdit(submitEvent) { function doEdit(submitEvent) {
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateBurialSiteType`, submitEvent.currentTarget, (rawResponseJSON) => { cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateBurialSiteType`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON; const responseJSON = rawResponseJSON;
lotTypeResponseHandler(responseJSON); burialSiteTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction(); editCloseModalFunction();
} }
}); });
} }
cityssm.openHtmlModal('adminLotTypes-editLotType', { cityssm.openHtmlModal('adminBurialSiteTypes-edit', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement); los.populateAliases(modalElement);
modalElement.querySelector('#lotTypeEdit--burialSiteTypeId').value = burialSiteTypeId.toString(); modalElement.querySelector('#burialSiteTypeEdit--burialSiteTypeId').value = burialSiteTypeId.toString();
modalElement.querySelector('#lotTypeEdit--lotType').value = lotType.lotType; modalElement.querySelector('#burialSiteTypeEdit--burialSiteType').value = burialSiteType.burialSiteType;
}, },
onshown(modalElement, closeModalFunction) { onshown(modalElement, closeModalFunction) {
editCloseModalFunction = closeModalFunction; editCloseModalFunction = closeModalFunction;
modalElement.querySelector('#lotTypeEdit--lotType').focus(); modalElement.querySelector('#burialSiteTypeEdit--burialSiteType').focus();
modalElement.querySelector('form')?.addEventListener('submit', doEdit); modalElement.querySelector('form')?.addEventListener('submit', doEdit);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
@ -87,32 +89,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
}); });
} }
function openAddLotTypeField(clickEvent) { function openAddBurialSiteTypeField(clickEvent) {
const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--burialSiteType').dataset.burialSiteTypeId ?? '', 10);
let addCloseModalFunction; let addCloseModalFunction;
function doAdd(submitEvent) { function doAdd(submitEvent) {
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doAddBurialSiteTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { cityssm.postJSON(`${los.urlPrefix}/admin/doAddBurialSiteTypeField`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON; const responseJSON = rawResponseJSON;
expandedLotTypes.add(burialSiteTypeId); expandedBurialSiteTypes.add(burialSiteTypeId);
lotTypeResponseHandler(responseJSON); burialSiteTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
addCloseModalFunction(); addCloseModalFunction();
openEditLotTypeField(burialSiteTypeId, responseJSON.lotTypeFieldId); openEditBurialSiteTypeField(burialSiteTypeId, responseJSON.burialSiteTypeFieldId);
} }
}); });
} }
cityssm.openHtmlModal('adminLotTypes-addBurialSiteTypeField', { cityssm.openHtmlModal('adminBurialSiteTypes-addField', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement); los.populateAliases(modalElement);
if (burialSiteTypeId) { if (burialSiteTypeId) {
; ;
modalElement.querySelector('#lotTypeFieldAdd--burialSiteTypeId').value = burialSiteTypeId.toString(); modalElement.querySelector('#burialSiteTypeFieldAdd--burialSiteTypeId').value = burialSiteTypeId.toString();
} }
}, },
onshown(modalElement, closeModalFunction) { onshown(modalElement, closeModalFunction) {
addCloseModalFunction = closeModalFunction; addCloseModalFunction = closeModalFunction;
modalElement.querySelector('#lotTypeFieldAdd--lotTypeField').focus(); modalElement.querySelector('#burialSiteTypeFieldAdd--burialSiteTypeField').focus();
modalElement.querySelector('form')?.addEventListener('submit', doAdd); modalElement.querySelector('form')?.addEventListener('submit', doAdd);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
@ -121,24 +123,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
}); });
} }
function moveLotType(clickEvent) { function moveBurialSiteType(clickEvent) {
const buttonElement = clickEvent.currentTarget; const buttonElement = clickEvent.currentTarget;
const burialSiteTypeId = buttonElement.closest('.container--lotType').dataset.burialSiteTypeId; const burialSiteTypeId = buttonElement.closest('.container--burialSiteType').dataset.burialSiteTypeId;
cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up'
? 'doMoveBurialSiteTypeUp' ? 'doMoveBurialSiteTypeUp'
: 'doMoveBurialSiteTypeDown'}`, { : // eslint-disable-next-line no-secrets/no-secrets
'doMoveBurialSiteTypeDown'}`, {
burialSiteTypeId, burialSiteTypeId,
moveToEnd: clickEvent.shiftKey ? '1' : '0' moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, lotTypeResponseHandler); }, burialSiteTypeResponseHandler);
} }
function openEditLotTypeField(burialSiteTypeId, lotTypeFieldId) { function openEditBurialSiteTypeField(burialSiteTypeId, burialSiteTypeFieldId) {
const lotType = lotTypes.find((currentLotType) => currentLotType.burialSiteTypeId === burialSiteTypeId); const burialSiteType = burialSiteTypes.find((currentType) => currentType.burialSiteTypeId === burialSiteTypeId);
const lotTypeField = (lotType.BurialSiteTypeFields ?? []).find((currentLotTypeField) => currentLotTypeField.lotTypeFieldId === lotTypeFieldId); const burialSiteTypeField = (burialSiteType.burialSiteTypeFields ?? []).find((currentField) => currentField.burialSiteTypeFieldId === burialSiteTypeFieldId);
let fieldTypeElement; let fieldTypeElement;
let minLengthInputElement; let minLengthInputElement;
let maxLengthInputElement; let maxLengthInputElement;
let patternElement; let patternElement;
let lotTypeFieldValuesElement; let fieldValuesElement;
let editCloseModalFunction; let editCloseModalFunction;
function updateMaximumLengthMin() { function updateMaximumLengthMin() {
maxLengthInputElement.min = minLengthInputElement.value; maxLengthInputElement.min = minLengthInputElement.value;
@ -149,21 +152,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
minLengthInputElement.disabled = true; minLengthInputElement.disabled = true;
maxLengthInputElement.disabled = true; maxLengthInputElement.disabled = true;
patternElement.disabled = true; patternElement.disabled = true;
lotTypeFieldValuesElement.disabled = true; fieldValuesElement.disabled = true;
break; break;
} }
case 'select': { case 'select': {
minLengthInputElement.disabled = true; minLengthInputElement.disabled = true;
maxLengthInputElement.disabled = true; maxLengthInputElement.disabled = true;
patternElement.disabled = true; patternElement.disabled = true;
lotTypeFieldValuesElement.disabled = false; fieldValuesElement.disabled = false;
break; break;
} }
default: { default: {
minLengthInputElement.disabled = false; minLengthInputElement.disabled = false;
maxLengthInputElement.disabled = false; maxLengthInputElement.disabled = false;
patternElement.disabled = false; patternElement.disabled = false;
lotTypeFieldValuesElement.disabled = true; fieldValuesElement.disabled = true;
break; break;
} }
} }
@ -172,7 +175,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateBurialSiteTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateBurialSiteTypeField`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON; const responseJSON = rawResponseJSON;
lotTypeResponseHandler(responseJSON); burialSiteTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction(); editCloseModalFunction();
} }
@ -180,10 +183,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
function doDelete() { function doDelete() {
cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteBurialSiteTypeField`, { cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteBurialSiteTypeField`, {
lotTypeFieldId burialSiteTypeFieldId
}, (rawResponseJSON) => { }, (rawResponseJSON) => {
const responseJSON = rawResponseJSON; const responseJSON = rawResponseJSON;
lotTypeResponseHandler(responseJSON); burialSiteTypeResponseHandler(responseJSON);
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction(); editCloseModalFunction();
} }
@ -200,24 +203,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
}); });
} }
cityssm.openHtmlModal('adminLotTypes-editLotTypeField', { cityssm.openHtmlModal('adminBurialSiteTypes-editField', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement); los.populateAliases(modalElement);
modalElement.querySelector('#lotTypeFieldEdit--lotTypeFieldId').value = lotTypeField.lotTypeFieldId.toString(); modalElement.querySelector('#burialSiteTypeFieldEdit--burialSiteTypeFieldId').value = burialSiteTypeField.burialSiteTypeFieldId.toString();
modalElement.querySelector('#lotTypeFieldEdit--lotTypeField').value = lotTypeField.lotTypeField ?? ''; modalElement.querySelector('#burialSiteTypeFieldEdit--burialSiteTypeField').value = burialSiteTypeField.burialSiteTypeField ?? '';
modalElement.querySelector('#lotTypeFieldEdit--isRequired').value = lotTypeField.isRequired ? '1' : '0'; modalElement.querySelector('#burialSiteTypeFieldEdit--isRequired').value = burialSiteTypeField.isRequired ?? false ? '1' : '0';
fieldTypeElement = modalElement.querySelector('#lotTypeFieldEdit--fieldType'); fieldTypeElement = modalElement.querySelector('#burialSiteTypeFieldEdit--fieldType');
fieldTypeElement.value = lotTypeField.fieldType; fieldTypeElement.value = burialSiteTypeField.fieldType;
minLengthInputElement = modalElement.querySelector('#lotTypeFieldEdit--minLength'); minLengthInputElement = modalElement.querySelector('#burialSiteTypeFieldEdit--minLength');
minLengthInputElement.value = minLengthInputElement.value =
lotTypeField.minLength?.toString() ?? ''; burialSiteTypeField.minLength?.toString() ?? '';
maxLengthInputElement = modalElement.querySelector('#lotTypeFieldEdit--maxLength'); maxLengthInputElement = modalElement.querySelector('#burialSiteTypeFieldEdit--maxLength');
maxLengthInputElement.value = maxLengthInputElement.value =
lotTypeField.maxLength?.toString() ?? ''; burialSiteTypeField.maxLength?.toString() ?? '';
patternElement = modalElement.querySelector('#lotTypeFieldEdit--pattern'); patternElement = modalElement.querySelector('#burialSiteTypeFieldEdit--pattern');
patternElement.value = lotTypeField.pattern ?? ''; patternElement.value = burialSiteTypeField.pattern ?? '';
lotTypeFieldValuesElement = modalElement.querySelector('#lotTypeFieldEdit--lotTypeFieldValues'); fieldValuesElement = modalElement.querySelector('#burialSiteTypeFieldEdit--fieldValues');
lotTypeFieldValuesElement.value = lotTypeField.lotTypeFieldValues ?? ''; fieldValuesElement.value = burialSiteTypeField.fieldValues ?? '';
toggleInputFields(); toggleInputFields();
}, },
onshown(modalElement, closeModalFunction) { onshown(modalElement, closeModalFunction) {
@ -230,7 +233,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
updateMaximumLengthMin(); updateMaximumLengthMin();
fieldTypeElement.addEventListener('change', toggleInputFields); fieldTypeElement.addEventListener('change', toggleInputFields);
modalElement modalElement
.querySelector('#button--deleteLotTypeField') .querySelector('#button--deleteBurialSiteTypeField')
?.addEventListener('click', confirmDoDelete); ?.addEventListener('click', confirmDoDelete);
}, },
onremoved() { onremoved() {
@ -239,103 +242,106 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
}); });
} }
function openEditLotTypeFieldByClick(clickEvent) { function openEditBurialSiteTypeFieldByClick(clickEvent) {
clickEvent.preventDefault(); clickEvent.preventDefault();
const lotTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotTypeField').dataset.lotTypeFieldId ?? '', 10); const burialSiteTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--burialSiteTypeField').dataset.burialSiteTypeFieldId ?? '', 10);
const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--burialSiteType').dataset.burialSiteTypeId ?? '', 10);
openEditLotTypeField(burialSiteTypeId, lotTypeFieldId); openEditBurialSiteTypeField(burialSiteTypeId, burialSiteTypeFieldId);
} }
function moveLotTypeField(clickEvent) { function moveBurialSiteTypeField(clickEvent) {
const buttonElement = clickEvent.currentTarget; const buttonElement = clickEvent.currentTarget;
const lotTypeFieldId = buttonElement.closest('.container--lotTypeField').dataset.lotTypeFieldId; const burialSiteTypeFieldId = buttonElement.closest('.container--burialSiteTypeField').dataset.burialSiteTypeFieldId;
cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up'
? 'doMoveBurialSiteTypeFieldUp' ? 'doMoveBurialSiteTypeFieldUp'
: 'doMoveBurialSiteTypeFieldDown'}`, { : // eslint-disable-next-line no-secrets/no-secrets
lotTypeFieldId, 'doMoveBurialSiteTypeFieldDown'}`, {
burialSiteTypeFieldId,
moveToEnd: clickEvent.shiftKey ? '1' : '0' moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, lotTypeResponseHandler); }, burialSiteTypeResponseHandler);
} }
function renderBurialSiteTypeFields(panelElement, burialSiteTypeId, BurialSiteTypeFields) { function renderBurialSiteTypeFields(panelElement, burialSiteTypeId, burialSiteTypeFields) {
if (BurialSiteTypeFields.length === 0) { if (burialSiteTypeFields.length === 0) {
// eslint-disable-next-line no-unsanitized/method // eslint-disable-next-line no-unsanitized/method
panelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block panelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block
${expandedLotTypes.has(burialSiteTypeId) ? '' : ' is-hidden'}"> ${expandedBurialSiteTypes.has(burialSiteTypeId) ? '' : ' is-hidden'}">
<div class="message is-info"><p class="message-body">There are no additional fields.</p></div> <div class="message is-info"><p class="message-body">There are no additional fields.</p></div>
</div>`); </div>`);
} }
else { else {
for (const lotTypeField of BurialSiteTypeFields) { for (const burialSiteTypeField of burialSiteTypeFields) {
const panelBlockElement = document.createElement('div'); const panelBlockElement = document.createElement('div');
panelBlockElement.className = panelBlockElement.className =
'panel-block is-block container--lotTypeField'; 'panel-block is-block container--burialSiteTypeField';
if (!expandedLotTypes.has(burialSiteTypeId)) { if (!expandedBurialSiteTypes.has(burialSiteTypeId)) {
panelBlockElement.classList.add('is-hidden'); panelBlockElement.classList.add('is-hidden');
} }
panelBlockElement.dataset.lotTypeFieldId = panelBlockElement.dataset.burialSiteTypeFieldId =
lotTypeField.lotTypeFieldId.toString(); burialSiteTypeField.burialSiteTypeFieldId.toString();
// eslint-disable-next-line no-unsanitized/property // eslint-disable-next-line no-unsanitized/property
panelBlockElement.innerHTML = `<div class="level is-mobile"> panelBlockElement.innerHTML = `<div class="level is-mobile">
<div class="level-left"> <div class="level-left">
<div class="level-item"> <div class="level-item">
<a class="has-text-weight-bold button--editLotTypeField" href="#"> <a class="has-text-weight-bold button--editBurialSiteTypeField" href="#">
${cityssm.escapeHTML(lotTypeField.lotTypeField ?? '')} ${cityssm.escapeHTML(burialSiteTypeField.burialSiteTypeField ?? '')}
</a> </a>
</div> </div>
</div> </div>
<div class="level-right"> <div class="level-right">
<div class="level-item"> <div class="level-item">
${los.getMoveUpDownButtonFieldHTML('button--moveLotTypeFieldUp', 'button--moveLotTypeFieldDown')} ${los.getMoveUpDownButtonFieldHTML('button--moveBurialSiteTypeFieldUp',
// eslint-disable-next-line no-secrets/no-secrets
'button--moveBurialSiteTypeFieldDown')}
</div> </div>
</div> </div>
</div>`; </div>`;
panelBlockElement panelBlockElement
.querySelector('.button--editLotTypeField') .querySelector('.button--editBurialSiteTypeField')
?.addEventListener('click', openEditLotTypeFieldByClick); ?.addEventListener('click', openEditBurialSiteTypeFieldByClick);
panelBlockElement.querySelector('.button--moveLotTypeFieldUp').addEventListener('click', moveLotTypeField); panelBlockElement.querySelector('.button--moveBurialSiteTypeFieldUp').addEventListener('click', moveBurialSiteTypeField);
panelBlockElement.querySelector('.button--moveLotTypeFieldDown').addEventListener('click', moveLotTypeField); panelBlockElement.querySelector('.button--moveBurialSiteTypeFieldDown').addEventListener('click', moveBurialSiteTypeField);
panelElement.append(panelBlockElement); panelElement.append(panelBlockElement);
} }
} }
} }
function renderLotTypes() { function renderBurialSiteTypes() {
containerElement.innerHTML = ''; containerElement.innerHTML = '';
if (lotTypes.length === 0) { if (burialSiteTypes.length === 0) {
// eslint-disable-next-line no-unsanitized/method containerElement.insertAdjacentHTML('afterbegin', `<div class="message is-warning">
containerElement.insertAdjacentHTML('afterbegin', `<div class="message is-warning> <p class="message-body">There are no active burial site types.</p>
<p class="message-body">There are no active ${los.escapedAliases.lot} types.</p>
</div>`); </div>`);
return; return;
} }
for (const lotType of lotTypes) { for (const burialSiteType of burialSiteTypes) {
const lotTypeContainer = document.createElement('div'); const burialSiteTypeContainer = document.createElement('div');
lotTypeContainer.className = 'panel container--lotType'; burialSiteTypeContainer.className = 'panel container--burialSiteType';
lotTypeContainer.dataset.burialSiteTypeId = lotType.burialSiteTypeId.toString(); burialSiteTypeContainer.dataset.burialSiteTypeId =
burialSiteType.burialSiteTypeId.toString();
// eslint-disable-next-line no-unsanitized/property // eslint-disable-next-line no-unsanitized/property
lotTypeContainer.innerHTML = `<div class="panel-heading"> burialSiteTypeContainer.innerHTML = `<div class="panel-heading">
<div class="level is-mobile"> <div class="level is-mobile">
<div class="level-left"> <div class="level-left">
<div class="level-item"> <div class="level-item">
<button class="button is-small button--toggleBurialSiteTypeFields" data-tooltip="Toggle Fields" type="button" aria-label="Toggle Fields"> <button class="button is-small button--toggleBurialSiteTypeFields" data-tooltip="Toggle Fields" type="button" aria-label="Toggle Fields">
${expandedLotTypes.has(lotType.burialSiteTypeId) ${expandedBurialSiteTypes.has(burialSiteType.burialSiteTypeId)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>' ? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'} : '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'}
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
<h2 class="title is-4">${cityssm.escapeHTML(lotType.lotType)}</h2> <h2 class="title is-4">${cityssm.escapeHTML(burialSiteType.burialSiteType)}</h2>
</div> </div>
</div> </div>
<div class="level-right"> <div class="level-right">
<div class="level-item"> <div class="level-item">
<button class="button is-danger is-small button--deleteLotType" type="button"> <button class="button is-danger is-small button--deleteBurialSiteType" type="button">
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span> <span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
<span>Delete</span> <span>Delete</span>
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
<button class="button is-primary is-small button--editLotType" type="button"> <button class="button is-primary is-small button--editBurialSiteType" type="button">
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span> <span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
<span>Edit ${los.escapedAliases.Lot} Type</span> <span>Edit Burial Site Type</span>
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
@ -345,27 +351,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
${los.getMoveUpDownButtonFieldHTML('button--moveLotTypeUp', 'button--moveLotTypeDown')} ${los.getMoveUpDownButtonFieldHTML('button--moveBurialSiteTypeUp', 'button--moveBurialSiteTypeDown')}
</div> </div>
</div> </div>
</div> </div>
</div>`; </div>`;
renderBurialSiteTypeFields(lotTypeContainer, lotType.burialSiteTypeId, lotType.BurialSiteTypeFields ?? []); renderBurialSiteTypeFields(burialSiteTypeContainer, burialSiteType.burialSiteTypeId, burialSiteType.burialSiteTypeFields ?? []);
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--toggleBurialSiteTypeFields') .querySelector('.button--toggleBurialSiteTypeFields')
?.addEventListener('click', toggleBurialSiteTypeFields); ?.addEventListener('click', toggleBurialSiteTypeFields);
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--deleteLotType') .querySelector('.button--deleteBurialSiteType')
?.addEventListener('click', deleteLotType); ?.addEventListener('click', deleteBurialSiteType);
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--editLotType') .querySelector('.button--editBurialSiteType')
?.addEventListener('click', openEditLotType); ?.addEventListener('click', openEditBurialSiteType);
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--addBurialSiteTypeField') .querySelector('.button--addBurialSiteTypeField')
?.addEventListener('click', openAddLotTypeField); ?.addEventListener('click', openAddBurialSiteTypeField);
lotTypeContainer.querySelector('.button--moveLotTypeUp').addEventListener('click', moveLotType); burialSiteTypeContainer.querySelector('.button--moveBurialSiteTypeUp').addEventListener('click', moveBurialSiteType);
lotTypeContainer.querySelector('.button--moveLotTypeDown').addEventListener('click', moveLotType); burialSiteTypeContainer.querySelector('.button--moveBurialSiteTypeDown').addEventListener('click', moveBurialSiteType);
containerElement.append(lotTypeContainer); containerElement.append(burialSiteTypeContainer);
} }
} }
document document
@ -374,29 +380,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
let addCloseModalFunction; let addCloseModalFunction;
function doAdd(submitEvent) { function doAdd(submitEvent) {
submitEvent.preventDefault(); submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doAddLotType`, submitEvent.currentTarget, (rawResponseJSON) => { cityssm.postJSON(`${los.urlPrefix}/admin/doAddBurialSiteType`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON; const responseJSON = rawResponseJSON;
if (responseJSON.success) { if (responseJSON.success) {
addCloseModalFunction(); addCloseModalFunction();
lotTypes = responseJSON.lotTypes; burialSiteTypes = responseJSON.burialSiteTypes;
renderLotTypes(); renderBurialSiteTypes();
} }
else { else {
bulmaJS.alert({ bulmaJS.alert({
title: `Error Adding ${los.escapedAliases.Lot} Type`, title: `Error Adding Burial Site Type`,
message: responseJSON.errorMessage ?? '', message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger' contextualColorName: 'danger'
}); });
} }
}); });
} }
cityssm.openHtmlModal('adminLotTypes-addBurialSiteType', { cityssm.openHtmlModal('adminBurialSiteTypes-add', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement); los.populateAliases(modalElement);
}, },
onshown(modalElement, closeModalFunction) { onshown(modalElement, closeModalFunction) {
addCloseModalFunction = closeModalFunction; addCloseModalFunction = closeModalFunction;
modalElement.querySelector('#lotTypeAdd--lotType').focus(); modalElement.querySelector('#burialSiteTypeAdd--burialSiteType').focus();
modalElement.querySelector('form')?.addEventListener('submit', doAdd); modalElement.querySelector('form')?.addEventListener('submit', doAdd);
bulmaJS.toggleHtmlClipped(); bulmaJS.toggleHtmlClipped();
}, },
@ -405,5 +411,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
}); });
}); });
renderLotTypes(); renderBurialSiteTypes();
})(); })();

View File

@ -1,8 +1,15 @@
// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
/* eslint-disable max-lines */
import type { BulmaJS } from '@cityssm/bulma-js/types.js' import type { BulmaJS } from '@cityssm/bulma-js/types.js'
import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { LOS } from '../../types/globalTypes.js' import type {
import type { LotType, LotTypeField } from '../../types/recordTypes.js' BurialSiteType,
BurialSiteTypeField
} from '../../types/recordTypes.js'
import type { LOS } from './types.js'
declare const cityssm: cityssmGlobal declare const cityssm: cityssmGlobal
declare const bulmaJS: BulmaJS declare const bulmaJS: BulmaJS
@ -12,8 +19,8 @@ declare const exports: Record<string, unknown>
type ResponseJSON = type ResponseJSON =
| { | {
success: true success: true
lotTypes: LotType[] burialSiteTypes: BurialSiteType[]
lotTypeFieldId?: number burialSiteTypeFieldId?: number
} }
| { | {
success: false success: false
@ -23,38 +30,40 @@ type ResponseJSON =
const los = exports.los as LOS const los = exports.los as LOS
const containerElement = document.querySelector( const containerElement = document.querySelector(
'#container--lotTypes' '#container--burialSiteTypes'
) as HTMLElement ) as HTMLElement
let lotTypes = exports.lotTypes as LotType[] let burialSiteTypes = exports.burialSiteTypes as BurialSiteType[]
delete exports.lotTypes delete exports.burialSiteTypes
const expandedLotTypes = new Set<number>() const expandedBurialSiteTypes = new Set<number>()
function toggleBurialSiteTypeFields(clickEvent: Event): void { function toggleBurialSiteTypeFields(clickEvent: Event): void {
const toggleButtonElement = clickEvent.currentTarget as HTMLButtonElement const toggleButtonElement = clickEvent.currentTarget as HTMLButtonElement
const lotTypeElement = toggleButtonElement.closest( const burialSiteTypeElement = toggleButtonElement.closest(
'.container--lotType' '.container--burialSiteType'
) as HTMLElement ) as HTMLElement
const burialSiteTypeId = Number.parseInt( const burialSiteTypeId = Number.parseInt(
lotTypeElement.dataset.burialSiteTypeId ?? '', burialSiteTypeElement.dataset.burialSiteTypeId ?? '',
10 10
) )
if (expandedLotTypes.has(burialSiteTypeId)) { if (expandedBurialSiteTypes.has(burialSiteTypeId)) {
expandedLotTypes.delete(burialSiteTypeId) expandedBurialSiteTypes.delete(burialSiteTypeId)
} else { } else {
expandedLotTypes.add(burialSiteTypeId) expandedBurialSiteTypes.add(burialSiteTypeId)
} }
// eslint-disable-next-line no-unsanitized/property // eslint-disable-next-line no-unsanitized/property
toggleButtonElement.innerHTML = expandedLotTypes.has(burialSiteTypeId) toggleButtonElement.innerHTML = expandedBurialSiteTypes.has(
burialSiteTypeId
)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>' ? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>' : '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'
const panelBlockElements = lotTypeElement.querySelectorAll( const panelBlockElements = burialSiteTypeElement.querySelectorAll(
'.panel-block' '.panel-block'
) as NodeListOf<HTMLElement> ) as NodeListOf<HTMLElement>
@ -63,25 +72,25 @@ type ResponseJSON =
} }
} }
function lotTypeResponseHandler(rawResponseJSON: unknown): void { function burialSiteTypeResponseHandler(rawResponseJSON: unknown): void {
const responseJSON = rawResponseJSON as ResponseJSON const responseJSON = rawResponseJSON as ResponseJSON
if (responseJSON.success) { if (responseJSON.success) {
lotTypes = responseJSON.lotTypes burialSiteTypes = responseJSON.burialSiteTypes
renderLotTypes() renderBurialSiteTypes()
} else { } else {
bulmaJS.alert({ bulmaJS.alert({
title: `Error Updating ${los.escapedAliases.Lot} Type`, title: `Error Updating Burial Site Type`,
message: responseJSON.errorMessage ?? '', message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger' contextualColorName: 'danger'
}) })
} }
} }
function deleteLotType(clickEvent: Event): void { function deleteBurialSiteType(clickEvent: Event): void {
const burialSiteTypeId = Number.parseInt( const burialSiteTypeId = Number.parseInt(
( (
(clickEvent.currentTarget as HTMLElement).closest( (clickEvent.currentTarget as HTMLElement).closest(
'.container--lotType' '.container--burialSiteType'
) as HTMLElement ) as HTMLElement
).dataset.burialSiteTypeId ?? '', ).dataset.burialSiteTypeId ?? '',
10 10
@ -93,34 +102,34 @@ type ResponseJSON =
{ {
burialSiteTypeId burialSiteTypeId
}, },
lotTypeResponseHandler burialSiteTypeResponseHandler
) )
} }
bulmaJS.confirm({ bulmaJS.confirm({
title: `Delete ${los.escapedAliases.Lot} Type`, title: `Delete Burial Site Type`,
message: `Are you sure you want to delete this ${los.escapedAliases.lot} type?`, message: `Are you sure you want to delete this burial site type?`,
contextualColorName: 'warning', contextualColorName: 'warning',
okButton: { okButton: {
text: `Yes, Delete ${los.escapedAliases.Lot} Type`, text: `Yes, Delete Burial Site Type`,
callbackFunction: doDelete callbackFunction: doDelete
} }
}) })
} }
function openEditLotType(clickEvent: Event): void { function openEditBurialSiteType(clickEvent: Event): void {
const burialSiteTypeId = Number.parseInt( const burialSiteTypeId = Number.parseInt(
( (
(clickEvent.currentTarget as HTMLElement).closest( (clickEvent.currentTarget as HTMLElement).closest(
'.container--lotType' '.container--burialSiteType'
) as HTMLElement ) as HTMLElement
).dataset.burialSiteTypeId ?? '', ).dataset.burialSiteTypeId ?? '',
10 10
) )
const lotType = lotTypes.find( const burialSiteType = burialSiteTypes.find(
(currentLotType) => burialSiteTypeId === currentLotType.burialSiteTypeId (currentType) => burialSiteTypeId === currentType.burialSiteTypeId
) as LotType ) as BurialSiteType
let editCloseModalFunction: () => void let editCloseModalFunction: () => void
@ -133,7 +142,7 @@ type ResponseJSON =
(rawResponseJSON) => { (rawResponseJSON) => {
const responseJSON = rawResponseJSON as ResponseJSON const responseJSON = rawResponseJSON as ResponseJSON
lotTypeResponseHandler(responseJSON) burialSiteTypeResponseHandler(responseJSON)
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction() editCloseModalFunction()
} }
@ -141,25 +150,25 @@ type ResponseJSON =
) )
} }
cityssm.openHtmlModal('adminLotTypes-editLotType', { cityssm.openHtmlModal('adminBurialSiteTypes-edit', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement) los.populateAliases(modalElement)
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeEdit--burialSiteTypeId' '#burialSiteTypeEdit--burialSiteTypeId'
) as HTMLInputElement ) as HTMLInputElement
).value = burialSiteTypeId.toString() ).value = burialSiteTypeId.toString()
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeEdit--lotType' '#burialSiteTypeEdit--burialSiteType'
) as HTMLInputElement ) as HTMLInputElement
).value = lotType.lotType ).value = burialSiteType.burialSiteType
}, },
onshown(modalElement, closeModalFunction) { onshown(modalElement, closeModalFunction) {
editCloseModalFunction = closeModalFunction editCloseModalFunction = closeModalFunction
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeEdit--lotType' '#burialSiteTypeEdit--burialSiteType'
) as HTMLInputElement ) as HTMLInputElement
).focus() ).focus()
@ -173,11 +182,11 @@ type ResponseJSON =
}) })
} }
function openAddLotTypeField(clickEvent: Event): void { function openAddBurialSiteTypeField(clickEvent: Event): void {
const burialSiteTypeId = Number.parseInt( const burialSiteTypeId = Number.parseInt(
( (
(clickEvent.currentTarget as HTMLElement).closest( (clickEvent.currentTarget as HTMLElement).closest(
'.container--lotType' '.container--burialSiteType'
) as HTMLElement ) as HTMLElement
).dataset.burialSiteTypeId ?? '', ).dataset.burialSiteTypeId ?? '',
10 10
@ -194,28 +203,28 @@ type ResponseJSON =
(rawResponseJSON) => { (rawResponseJSON) => {
const responseJSON = rawResponseJSON as ResponseJSON const responseJSON = rawResponseJSON as ResponseJSON
expandedLotTypes.add(burialSiteTypeId) expandedBurialSiteTypes.add(burialSiteTypeId)
lotTypeResponseHandler(responseJSON) burialSiteTypeResponseHandler(responseJSON)
if (responseJSON.success) { if (responseJSON.success) {
addCloseModalFunction() addCloseModalFunction()
openEditLotTypeField( openEditBurialSiteTypeField(
burialSiteTypeId, burialSiteTypeId,
responseJSON.lotTypeFieldId as number responseJSON.burialSiteTypeFieldId as number
) )
} }
} }
) )
} }
cityssm.openHtmlModal('adminLotTypes-addBurialSiteTypeField', { cityssm.openHtmlModal('adminBurialSiteTypes-addField', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement) los.populateAliases(modalElement)
if (burialSiteTypeId) { if (burialSiteTypeId) {
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeFieldAdd--burialSiteTypeId' '#burialSiteTypeFieldAdd--burialSiteTypeId'
) as HTMLInputElement ) as HTMLInputElement
).value = burialSiteTypeId.toString() ).value = burialSiteTypeId.toString()
} }
@ -224,7 +233,7 @@ type ResponseJSON =
addCloseModalFunction = closeModalFunction addCloseModalFunction = closeModalFunction
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeFieldAdd--lotTypeField' '#burialSiteTypeFieldAdd--burialSiteTypeField'
) as HTMLInputElement ) as HTMLInputElement
).focus() ).focus()
@ -238,45 +247,48 @@ type ResponseJSON =
}) })
} }
function moveLotType(clickEvent: MouseEvent): void { function moveBurialSiteType(clickEvent: MouseEvent): void {
const buttonElement = clickEvent.currentTarget as HTMLButtonElement const buttonElement = clickEvent.currentTarget as HTMLButtonElement
const burialSiteTypeId = ( const burialSiteTypeId = (
buttonElement.closest('.container--lotType') as HTMLElement buttonElement.closest('.container--burialSiteType') as HTMLElement
).dataset.burialSiteTypeId ).dataset.burialSiteTypeId
cityssm.postJSON( cityssm.postJSON(
`${los.urlPrefix}/admin/${ `${los.urlPrefix}/admin/${
buttonElement.dataset.direction === 'up' buttonElement.dataset.direction === 'up'
? 'doMoveBurialSiteTypeUp' ? 'doMoveBurialSiteTypeUp'
: 'doMoveBurialSiteTypeDown' : // eslint-disable-next-line no-secrets/no-secrets
'doMoveBurialSiteTypeDown'
}`, }`,
{ {
burialSiteTypeId, burialSiteTypeId,
moveToEnd: clickEvent.shiftKey ? '1' : '0' moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, },
lotTypeResponseHandler burialSiteTypeResponseHandler
) )
} }
function openEditLotTypeField( function openEditBurialSiteTypeField(
burialSiteTypeId: number, burialSiteTypeId: number,
lotTypeFieldId: number burialSiteTypeFieldId: number
): void { ): void {
const lotType = lotTypes.find( const burialSiteType = burialSiteTypes.find(
(currentLotType) => currentLotType.burialSiteTypeId === burialSiteTypeId (currentType) => currentType.burialSiteTypeId === burialSiteTypeId
) as LotType ) as BurialSiteType
const lotTypeField = (lotType.BurialSiteTypeFields ?? []).find( const burialSiteTypeField = (
(currentLotTypeField) => burialSiteType.burialSiteTypeFields ?? []
currentLotTypeField.lotTypeFieldId === lotTypeFieldId ).find(
) as LotTypeField (currentField) =>
currentField.burialSiteTypeFieldId === burialSiteTypeFieldId
) as BurialSiteTypeField
let fieldTypeElement: HTMLSelectElement let fieldTypeElement: HTMLSelectElement
let minLengthInputElement: HTMLInputElement let minLengthInputElement: HTMLInputElement
let maxLengthInputElement: HTMLInputElement let maxLengthInputElement: HTMLInputElement
let patternElement: HTMLInputElement let patternElement: HTMLInputElement
let lotTypeFieldValuesElement: HTMLTextAreaElement let fieldValuesElement: HTMLTextAreaElement
let editCloseModalFunction: () => void let editCloseModalFunction: () => void
@ -290,21 +302,21 @@ type ResponseJSON =
minLengthInputElement.disabled = true minLengthInputElement.disabled = true
maxLengthInputElement.disabled = true maxLengthInputElement.disabled = true
patternElement.disabled = true patternElement.disabled = true
lotTypeFieldValuesElement.disabled = true fieldValuesElement.disabled = true
break break
} }
case 'select': { case 'select': {
minLengthInputElement.disabled = true minLengthInputElement.disabled = true
maxLengthInputElement.disabled = true maxLengthInputElement.disabled = true
patternElement.disabled = true patternElement.disabled = true
lotTypeFieldValuesElement.disabled = false fieldValuesElement.disabled = false
break break
} }
default: { default: {
minLengthInputElement.disabled = false minLengthInputElement.disabled = false
maxLengthInputElement.disabled = false maxLengthInputElement.disabled = false
patternElement.disabled = false patternElement.disabled = false
lotTypeFieldValuesElement.disabled = true fieldValuesElement.disabled = true
break break
} }
} }
@ -319,7 +331,7 @@ type ResponseJSON =
(rawResponseJSON) => { (rawResponseJSON) => {
const responseJSON = rawResponseJSON as ResponseJSON const responseJSON = rawResponseJSON as ResponseJSON
lotTypeResponseHandler(responseJSON) burialSiteTypeResponseHandler(responseJSON)
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction() editCloseModalFunction()
} }
@ -331,12 +343,12 @@ type ResponseJSON =
cityssm.postJSON( cityssm.postJSON(
`${los.urlPrefix}/admin/doDeleteBurialSiteTypeField`, `${los.urlPrefix}/admin/doDeleteBurialSiteTypeField`,
{ {
lotTypeFieldId burialSiteTypeFieldId
}, },
(rawResponseJSON) => { (rawResponseJSON) => {
const responseJSON = rawResponseJSON as ResponseJSON const responseJSON = rawResponseJSON as ResponseJSON
lotTypeResponseHandler(responseJSON) burialSiteTypeResponseHandler(responseJSON)
if (responseJSON.success) { if (responseJSON.success) {
editCloseModalFunction() editCloseModalFunction()
} }
@ -357,56 +369,56 @@ type ResponseJSON =
}) })
} }
cityssm.openHtmlModal('adminLotTypes-editLotTypeField', { cityssm.openHtmlModal('adminBurialSiteTypes-editField', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement) los.populateAliases(modalElement)
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeFieldEdit--lotTypeFieldId' '#burialSiteTypeFieldEdit--burialSiteTypeFieldId'
) as HTMLInputElement ) as HTMLInputElement
).value = lotTypeField.lotTypeFieldId.toString() ).value = burialSiteTypeField.burialSiteTypeFieldId.toString()
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeFieldEdit--lotTypeField' '#burialSiteTypeFieldEdit--burialSiteTypeField'
) as HTMLInputElement ) as HTMLInputElement
).value = lotTypeField.lotTypeField ?? '' ).value = burialSiteTypeField.burialSiteTypeField ?? ''
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeFieldEdit--isRequired' '#burialSiteTypeFieldEdit--isRequired'
) as HTMLSelectElement ) as HTMLSelectElement
).value = lotTypeField.isRequired ? '1' : '0' ).value = burialSiteTypeField.isRequired ?? false ? '1' : '0'
fieldTypeElement = modalElement.querySelector( fieldTypeElement = modalElement.querySelector(
'#lotTypeFieldEdit--fieldType' '#burialSiteTypeFieldEdit--fieldType'
) as HTMLSelectElement ) as HTMLSelectElement
fieldTypeElement.value = lotTypeField.fieldType fieldTypeElement.value = burialSiteTypeField.fieldType
minLengthInputElement = modalElement.querySelector( minLengthInputElement = modalElement.querySelector(
'#lotTypeFieldEdit--minLength' '#burialSiteTypeFieldEdit--minLength'
) as HTMLInputElement ) as HTMLInputElement
minLengthInputElement.value = minLengthInputElement.value =
lotTypeField.minLength?.toString() ?? '' burialSiteTypeField.minLength?.toString() ?? ''
maxLengthInputElement = modalElement.querySelector( maxLengthInputElement = modalElement.querySelector(
'#lotTypeFieldEdit--maxLength' '#burialSiteTypeFieldEdit--maxLength'
) as HTMLInputElement ) as HTMLInputElement
maxLengthInputElement.value = maxLengthInputElement.value =
lotTypeField.maxLength?.toString() ?? '' burialSiteTypeField.maxLength?.toString() ?? ''
patternElement = modalElement.querySelector( patternElement = modalElement.querySelector(
'#lotTypeFieldEdit--pattern' '#burialSiteTypeFieldEdit--pattern'
) as HTMLInputElement ) as HTMLInputElement
patternElement.value = lotTypeField.pattern ?? '' patternElement.value = burialSiteTypeField.pattern ?? ''
lotTypeFieldValuesElement = modalElement.querySelector( fieldValuesElement = modalElement.querySelector(
'#lotTypeFieldEdit--lotTypeFieldValues' '#burialSiteTypeFieldEdit--fieldValues'
) as HTMLTextAreaElement ) as HTMLTextAreaElement
lotTypeFieldValuesElement.value = lotTypeField.lotTypeFieldValues ?? '' fieldValuesElement.value = burialSiteTypeField.fieldValues ?? ''
toggleInputFields() toggleInputFields()
}, },
@ -425,7 +437,7 @@ type ResponseJSON =
fieldTypeElement.addEventListener('change', toggleInputFields) fieldTypeElement.addEventListener('change', toggleInputFields)
modalElement modalElement
.querySelector('#button--deleteLotTypeField') .querySelector('#button--deleteBurialSiteTypeField')
?.addEventListener('click', confirmDoDelete) ?.addEventListener('click', confirmDoDelete)
}, },
onremoved() { onremoved() {
@ -435,166 +447,168 @@ type ResponseJSON =
}) })
} }
function openEditLotTypeFieldByClick(clickEvent: Event): void { function openEditBurialSiteTypeFieldByClick(clickEvent: Event): void {
clickEvent.preventDefault() clickEvent.preventDefault()
const lotTypeFieldId = Number.parseInt( const burialSiteTypeFieldId = Number.parseInt(
( (
(clickEvent.currentTarget as HTMLElement).closest( (clickEvent.currentTarget as HTMLElement).closest(
'.container--lotTypeField' '.container--burialSiteTypeField'
) as HTMLElement ) as HTMLElement
).dataset.lotTypeFieldId ?? '', ).dataset.burialSiteTypeFieldId ?? '',
10 10
) )
const burialSiteTypeId = Number.parseInt( const burialSiteTypeId = Number.parseInt(
( (
(clickEvent.currentTarget as HTMLElement).closest( (clickEvent.currentTarget as HTMLElement).closest(
'.container--lotType' '.container--burialSiteType'
) as HTMLElement ) as HTMLElement
).dataset.burialSiteTypeId ?? '', ).dataset.burialSiteTypeId ?? '',
10 10
) )
openEditLotTypeField(burialSiteTypeId, lotTypeFieldId) openEditBurialSiteTypeField(burialSiteTypeId, burialSiteTypeFieldId)
} }
function moveLotTypeField(clickEvent: MouseEvent): void { function moveBurialSiteTypeField(clickEvent: MouseEvent): void {
const buttonElement = clickEvent.currentTarget as HTMLButtonElement const buttonElement = clickEvent.currentTarget as HTMLButtonElement
const lotTypeFieldId = ( const burialSiteTypeFieldId = (
buttonElement.closest('.container--lotTypeField') as HTMLElement buttonElement.closest('.container--burialSiteTypeField') as HTMLElement
).dataset.lotTypeFieldId ).dataset.burialSiteTypeFieldId
cityssm.postJSON( cityssm.postJSON(
`${los.urlPrefix}/admin/${ `${los.urlPrefix}/admin/${
buttonElement.dataset.direction === 'up' buttonElement.dataset.direction === 'up'
? 'doMoveBurialSiteTypeFieldUp' ? 'doMoveBurialSiteTypeFieldUp'
: 'doMoveBurialSiteTypeFieldDown' : // eslint-disable-next-line no-secrets/no-secrets
'doMoveBurialSiteTypeFieldDown'
}`, }`,
{ {
lotTypeFieldId, burialSiteTypeFieldId,
moveToEnd: clickEvent.shiftKey ? '1' : '0' moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, },
lotTypeResponseHandler burialSiteTypeResponseHandler
) )
} }
function renderBurialSiteTypeFields( function renderBurialSiteTypeFields(
panelElement: HTMLElement, panelElement: HTMLElement,
burialSiteTypeId: number, burialSiteTypeId: number,
BurialSiteTypeFields: LotTypeField[] burialSiteTypeFields: BurialSiteTypeField[]
): void { ): void {
if (BurialSiteTypeFields.length === 0) { if (burialSiteTypeFields.length === 0) {
// eslint-disable-next-line no-unsanitized/method // eslint-disable-next-line no-unsanitized/method
panelElement.insertAdjacentHTML( panelElement.insertAdjacentHTML(
'beforeend', 'beforeend',
`<div class="panel-block is-block `<div class="panel-block is-block
${expandedLotTypes.has(burialSiteTypeId) ? '' : ' is-hidden'}"> ${expandedBurialSiteTypes.has(burialSiteTypeId) ? '' : ' is-hidden'}">
<div class="message is-info"><p class="message-body">There are no additional fields.</p></div> <div class="message is-info"><p class="message-body">There are no additional fields.</p></div>
</div>` </div>`
) )
} else { } else {
for (const lotTypeField of BurialSiteTypeFields) { for (const burialSiteTypeField of burialSiteTypeFields) {
const panelBlockElement = document.createElement('div') const panelBlockElement = document.createElement('div')
panelBlockElement.className = panelBlockElement.className =
'panel-block is-block container--lotTypeField' 'panel-block is-block container--burialSiteTypeField'
if (!expandedLotTypes.has(burialSiteTypeId)) { if (!expandedBurialSiteTypes.has(burialSiteTypeId)) {
panelBlockElement.classList.add('is-hidden') panelBlockElement.classList.add('is-hidden')
} }
panelBlockElement.dataset.lotTypeFieldId = panelBlockElement.dataset.burialSiteTypeFieldId =
lotTypeField.lotTypeFieldId.toString() burialSiteTypeField.burialSiteTypeFieldId.toString()
// eslint-disable-next-line no-unsanitized/property // eslint-disable-next-line no-unsanitized/property
panelBlockElement.innerHTML = `<div class="level is-mobile"> panelBlockElement.innerHTML = `<div class="level is-mobile">
<div class="level-left"> <div class="level-left">
<div class="level-item"> <div class="level-item">
<a class="has-text-weight-bold button--editLotTypeField" href="#"> <a class="has-text-weight-bold button--editBurialSiteTypeField" href="#">
${cityssm.escapeHTML(lotTypeField.lotTypeField ?? '')} ${cityssm.escapeHTML(burialSiteTypeField.burialSiteTypeField ?? '')}
</a> </a>
</div> </div>
</div> </div>
<div class="level-right"> <div class="level-right">
<div class="level-item"> <div class="level-item">
${los.getMoveUpDownButtonFieldHTML( ${los.getMoveUpDownButtonFieldHTML(
'button--moveLotTypeFieldUp', 'button--moveBurialSiteTypeFieldUp',
'button--moveLotTypeFieldDown' // eslint-disable-next-line no-secrets/no-secrets
'button--moveBurialSiteTypeFieldDown'
)} )}
</div> </div>
</div> </div>
</div>` </div>`
panelBlockElement panelBlockElement
.querySelector('.button--editLotTypeField') .querySelector('.button--editBurialSiteTypeField')
?.addEventListener('click', openEditLotTypeFieldByClick) ?.addEventListener('click', openEditBurialSiteTypeFieldByClick)
;( ;(
panelBlockElement.querySelector( panelBlockElement.querySelector(
'.button--moveLotTypeFieldUp' '.button--moveBurialSiteTypeFieldUp'
) as HTMLButtonElement ) as HTMLButtonElement
).addEventListener('click', moveLotTypeField) ).addEventListener('click', moveBurialSiteTypeField)
;( ;(
panelBlockElement.querySelector( panelBlockElement.querySelector(
'.button--moveLotTypeFieldDown' '.button--moveBurialSiteTypeFieldDown'
) as HTMLButtonElement ) as HTMLButtonElement
).addEventListener('click', moveLotTypeField) ).addEventListener('click', moveBurialSiteTypeField)
panelElement.append(panelBlockElement) panelElement.append(panelBlockElement)
} }
} }
} }
function renderLotTypes(): void { function renderBurialSiteTypes(): void {
containerElement.innerHTML = '' containerElement.innerHTML = ''
if (lotTypes.length === 0) { if (burialSiteTypes.length === 0) {
// eslint-disable-next-line no-unsanitized/method
containerElement.insertAdjacentHTML( containerElement.insertAdjacentHTML(
'afterbegin', 'afterbegin',
`<div class="message is-warning> `<div class="message is-warning">
<p class="message-body">There are no active ${los.escapedAliases.lot} types.</p> <p class="message-body">There are no active burial site types.</p>
</div>` </div>`
) )
return return
} }
for (const lotType of lotTypes) { for (const burialSiteType of burialSiteTypes) {
const lotTypeContainer = document.createElement('div') const burialSiteTypeContainer = document.createElement('div')
lotTypeContainer.className = 'panel container--lotType' burialSiteTypeContainer.className = 'panel container--burialSiteType'
lotTypeContainer.dataset.burialSiteTypeId = lotType.burialSiteTypeId.toString() burialSiteTypeContainer.dataset.burialSiteTypeId =
burialSiteType.burialSiteTypeId.toString()
// eslint-disable-next-line no-unsanitized/property // eslint-disable-next-line no-unsanitized/property
lotTypeContainer.innerHTML = `<div class="panel-heading"> burialSiteTypeContainer.innerHTML = `<div class="panel-heading">
<div class="level is-mobile"> <div class="level is-mobile">
<div class="level-left"> <div class="level-left">
<div class="level-item"> <div class="level-item">
<button class="button is-small button--toggleBurialSiteTypeFields" data-tooltip="Toggle Fields" type="button" aria-label="Toggle Fields"> <button class="button is-small button--toggleBurialSiteTypeFields" data-tooltip="Toggle Fields" type="button" aria-label="Toggle Fields">
${ ${
expandedLotTypes.has(lotType.burialSiteTypeId) expandedBurialSiteTypes.has(burialSiteType.burialSiteTypeId)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>' ? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>' : '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'
} }
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
<h2 class="title is-4">${cityssm.escapeHTML(lotType.lotType)}</h2> <h2 class="title is-4">${cityssm.escapeHTML(burialSiteType.burialSiteType)}</h2>
</div> </div>
</div> </div>
<div class="level-right"> <div class="level-right">
<div class="level-item"> <div class="level-item">
<button class="button is-danger is-small button--deleteLotType" type="button"> <button class="button is-danger is-small button--deleteBurialSiteType" type="button">
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span> <span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
<span>Delete</span> <span>Delete</span>
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
<button class="button is-primary is-small button--editLotType" type="button"> <button class="button is-primary is-small button--editBurialSiteType" type="button">
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span> <span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
<span>Edit ${los.escapedAliases.Lot} Type</span> <span>Edit Burial Site Type</span>
</button> </button>
</div> </div>
<div class="level-item"> <div class="level-item">
@ -605,8 +619,8 @@ type ResponseJSON =
</div> </div>
<div class="level-item"> <div class="level-item">
${los.getMoveUpDownButtonFieldHTML( ${los.getMoveUpDownButtonFieldHTML(
'button--moveLotTypeUp', 'button--moveBurialSiteTypeUp',
'button--moveLotTypeDown' 'button--moveBurialSiteTypeDown'
)} )}
</div> </div>
</div> </div>
@ -614,38 +628,38 @@ type ResponseJSON =
</div>` </div>`
renderBurialSiteTypeFields( renderBurialSiteTypeFields(
lotTypeContainer, burialSiteTypeContainer,
lotType.burialSiteTypeId, burialSiteType.burialSiteTypeId,
lotType.BurialSiteTypeFields ?? [] burialSiteType.burialSiteTypeFields ?? []
) )
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--toggleBurialSiteTypeFields') .querySelector('.button--toggleBurialSiteTypeFields')
?.addEventListener('click', toggleBurialSiteTypeFields) ?.addEventListener('click', toggleBurialSiteTypeFields)
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--deleteLotType') .querySelector('.button--deleteBurialSiteType')
?.addEventListener('click', deleteLotType) ?.addEventListener('click', deleteBurialSiteType)
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--editLotType') .querySelector('.button--editBurialSiteType')
?.addEventListener('click', openEditLotType) ?.addEventListener('click', openEditBurialSiteType)
lotTypeContainer burialSiteTypeContainer
.querySelector('.button--addBurialSiteTypeField') .querySelector('.button--addBurialSiteTypeField')
?.addEventListener('click', openAddLotTypeField) ?.addEventListener('click', openAddBurialSiteTypeField)
;( ;(
lotTypeContainer.querySelector( burialSiteTypeContainer.querySelector(
'.button--moveLotTypeUp' '.button--moveBurialSiteTypeUp'
) as HTMLButtonElement ) as HTMLButtonElement
).addEventListener('click', moveLotType) ).addEventListener('click', moveBurialSiteType)
;( ;(
lotTypeContainer.querySelector( burialSiteTypeContainer.querySelector(
'.button--moveLotTypeDown' '.button--moveBurialSiteTypeDown'
) as HTMLButtonElement ) as HTMLButtonElement
).addEventListener('click', moveLotType) ).addEventListener('click', moveBurialSiteType)
containerElement.append(lotTypeContainer) containerElement.append(burialSiteTypeContainer)
} }
} }
@ -658,18 +672,18 @@ type ResponseJSON =
submitEvent.preventDefault() submitEvent.preventDefault()
cityssm.postJSON( cityssm.postJSON(
`${los.urlPrefix}/admin/doAddLotType`, `${los.urlPrefix}/admin/doAddBurialSiteType`,
submitEvent.currentTarget, submitEvent.currentTarget,
(rawResponseJSON) => { (rawResponseJSON) => {
const responseJSON = rawResponseJSON as ResponseJSON const responseJSON = rawResponseJSON as ResponseJSON
if (responseJSON.success) { if (responseJSON.success) {
addCloseModalFunction() addCloseModalFunction()
lotTypes = responseJSON.lotTypes burialSiteTypes = responseJSON.burialSiteTypes
renderLotTypes() renderBurialSiteTypes()
} else { } else {
bulmaJS.alert({ bulmaJS.alert({
title: `Error Adding ${los.escapedAliases.Lot} Type`, title: `Error Adding Burial Site Type`,
message: responseJSON.errorMessage ?? '', message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger' contextualColorName: 'danger'
}) })
@ -678,7 +692,7 @@ type ResponseJSON =
) )
} }
cityssm.openHtmlModal('adminLotTypes-addBurialSiteType', { cityssm.openHtmlModal('adminBurialSiteTypes-add', {
onshow(modalElement) { onshow(modalElement) {
los.populateAliases(modalElement) los.populateAliases(modalElement)
}, },
@ -686,7 +700,7 @@ type ResponseJSON =
addCloseModalFunction = closeModalFunction addCloseModalFunction = closeModalFunction
;( ;(
modalElement.querySelector( modalElement.querySelector(
'#lotTypeAdd--lotType' '#burialSiteTypeAdd--burialSiteType'
) as HTMLInputElement ) as HTMLInputElement
).focus() ).focus()
@ -700,5 +714,5 @@ type ResponseJSON =
}) })
}) })
renderLotTypes() renderBurialSiteTypes()
})() })()

View File

@ -29,23 +29,23 @@
</h1> </h1>
</div> </div>
<div class="column has-text-right is-narrow"> <div class="column has-text-right is-narrow">
<button class="button is-success" id="button--addLotType" type="button" accesskey="n"> <button class="button is-success" id="button--addBurialSiteType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span> <span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Burial Site Type</span> <span>Add Burial Site Type</span>
</button> </button>
</div> </div>
</div> </div>
<div id="container--lotTypes"></div> <div id="container--burialSiteTypes"></div>
</div> </div>
</div> </div>
<%- include('_footerA'); -%> <%- include('_footerA'); -%>
<script> <script>
exports.lotTypes = <%- JSON.stringify(lotTypes) %>; exports.burialSiteTypes = <%- JSON.stringify(burialSiteTypes) %>;
</script> </script>
<script src="<%= urlPrefix %>/javascripts/adminLotTypes.js"></script> <script src="<%= urlPrefix %>/javascripts/burialSiteTypes.admin.js"></script>
<%- include('_footerB'); -%> <%- include('_footerB'); -%>