"use strict"; // eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair /* eslint-disable max-lines */ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const sunrise = exports.sunrise; const contractTypesContainerElement = document.querySelector('#container--contractTypes'); const contractTypePrintsContainerElement = document.querySelector('#container--contractTypePrints'); let contractTypes = exports.contractTypes; delete exports.contractTypes; let allContractTypeFields = exports.allContractTypeFields; delete exports.allContractTypeFields; const expandedContractTypes = new Set(); function toggleContractTypeFields(clickEvent) { const toggleButtonElement = clickEvent.currentTarget; const contractTypeElement = toggleButtonElement.closest('.container--contractType'); const contractTypeId = Number.parseInt(contractTypeElement.dataset.contractTypeId ?? '', 10); if (expandedContractTypes.has(contractTypeId)) { expandedContractTypes.delete(contractTypeId); } else { expandedContractTypes.add(contractTypeId); } // eslint-disable-next-line no-unsanitized/property toggleButtonElement.innerHTML = expandedContractTypes.has(contractTypeId) ? '' : ''; const panelBlockElements = contractTypeElement.querySelectorAll('.panel-block'); for (const panelBlockElement of panelBlockElements) { panelBlockElement.classList.toggle('is-hidden'); } } function contractTypeResponseHandler(rawResponseJSON) { const responseJSON = rawResponseJSON; if (responseJSON.success) { contractTypes = responseJSON.contractTypes; allContractTypeFields = responseJSON.allContractTypeFields; renderContractTypes(); } else { bulmaJS.alert({ title: "Error Updating Contract Type", message: responseJSON.errorMessage ?? '', contextualColorName: 'danger' }); } } function deleteContractType(clickEvent) { const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10); function doDelete() { cityssm.postJSON(`${sunrise.urlPrefix}/admin/doDeleteContractType`, { contractTypeId }, contractTypeResponseHandler); } bulmaJS.confirm({ title: "Delete Contract Type", message: "Are you sure you want to delete this contract type?", contextualColorName: 'warning', okButton: { text: "Yes, Delete Contract Type", callbackFunction: doDelete } }); } function openEditContractType(clickEvent) { const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10); const contractType = contractTypes.find((currentContractType) => contractTypeId === currentContractType.contractTypeId); let editCloseModalFunction; function doEdit(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(`${sunrise.urlPrefix}/admin/doUpdateContractType`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON; contractTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); } }); } cityssm.openHtmlModal('adminContractTypes-edit', { onshow(modalElement) { sunrise.populateAliases(modalElement); modalElement.querySelector('#contractTypeEdit--contractTypeId').value = contractTypeId.toString(); modalElement.querySelector('#contractTypeEdit--contractType').value = contractType.contractType; if (contractType.isPreneed) { ; modalElement.querySelector('#contractTypeEdit--isPreneed').checked = true; } }, onshown(modalElement, closeModalFunction) { editCloseModalFunction = closeModalFunction; modalElement.querySelector('#contractTypeEdit--contractType').focus(); modalElement.querySelector('form')?.addEventListener('submit', doEdit); bulmaJS.toggleHtmlClipped(); }, onremoved() { bulmaJS.toggleHtmlClipped(); } }); } function openAddContractTypeField(clickEvent) { const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10); let addCloseModalFunction; function doAdd(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(`${sunrise.urlPrefix}/admin/doAddContractTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON; expandedContractTypes.add(contractTypeId); contractTypeResponseHandler(responseJSON); if (responseJSON.success) { addCloseModalFunction(); openEditContractTypeField(contractTypeId, responseJSON.contractTypeFieldId ?? 0); } }); } cityssm.openHtmlModal('adminContractTypes-addField', { onshow(modalElement) { sunrise.populateAliases(modalElement); if (contractTypeId) { ; modalElement.querySelector('#contractTypeFieldAdd--contractTypeId').value = contractTypeId.toString(); } }, onshown(modalElement, closeModalFunction) { addCloseModalFunction = closeModalFunction; modalElement.querySelector('#contractTypeFieldAdd--contractTypeField').focus(); modalElement.querySelector('form')?.addEventListener('submit', doAdd); bulmaJS.toggleHtmlClipped(); }, onremoved() { bulmaJS.toggleHtmlClipped(); } }); } function moveContractType(clickEvent) { const buttonElement = clickEvent.currentTarget; const contractTypeId = clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId; cityssm.postJSON(`${sunrise.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' ? 'doMoveContractTypeUp' : 'doMoveContractTypeDown'}`, { contractTypeId, moveToEnd: clickEvent.shiftKey ? '1' : '0' }, contractTypeResponseHandler); } function openEditContractTypeField(contractTypeId, contractTypeFieldId) { let contractType; if (contractTypeId) { contractType = contractTypes.find((currentContractType) => currentContractType.contractTypeId === contractTypeId); } const contractTypeField = (contractType ? contractType.contractTypeFields ?? [] : allContractTypeFields).find((currentContractTypeField) => currentContractTypeField.contractTypeFieldId === contractTypeFieldId); let fieldTypeElement; let minLengthInputElement; let maxLengthInputElement; let patternElement; let fieldValuesElement; let editCloseModalFunction; function updateMaximumLengthMin() { maxLengthInputElement.min = minLengthInputElement.value; } function toggleInputFields() { switch (fieldTypeElement.value) { case 'date': { minLengthInputElement.disabled = true; maxLengthInputElement.disabled = true; patternElement.disabled = true; fieldValuesElement.disabled = true; break; } case 'select': { minLengthInputElement.disabled = true; maxLengthInputElement.disabled = true; patternElement.disabled = true; fieldValuesElement.disabled = false; break; } default: { minLengthInputElement.disabled = false; maxLengthInputElement.disabled = false; patternElement.disabled = false; fieldValuesElement.disabled = true; break; } } } function doUpdate(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(`${sunrise.urlPrefix}/admin/doUpdateContractTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON; contractTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); } }); } function doDelete() { cityssm.postJSON(`${sunrise.urlPrefix}/admin/doDeleteContractTypeField`, { contractTypeFieldId }, (rawResponseJSON) => { const responseJSON = rawResponseJSON; contractTypeResponseHandler(responseJSON); if (responseJSON.success) { editCloseModalFunction(); } }); } function confirmDoDelete() { 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: doDelete } }); } cityssm.openHtmlModal('adminContractTypes-editField', { onshow(modalElement) { sunrise.populateAliases(modalElement); modalElement.querySelector('#contractTypeFieldEdit--contractTypeFieldId').value = contractTypeField.contractTypeFieldId.toString(); modalElement.querySelector('#contractTypeFieldEdit--contractTypeField').value = contractTypeField.contractTypeField ?? ''; modalElement.querySelector('#contractTypeFieldEdit--isRequired').value = contractTypeField.isRequired ?? false ? '1' : '0'; fieldTypeElement = modalElement.querySelector('#contractTypeFieldEdit--fieldType'); fieldTypeElement.value = contractTypeField.fieldType; minLengthInputElement = modalElement.querySelector('#contractTypeFieldEdit--minLength'); minLengthInputElement.value = contractTypeField.minLength?.toString() ?? ''; maxLengthInputElement = modalElement.querySelector('#contractTypeFieldEdit--maxLength'); maxLengthInputElement.value = contractTypeField.maxLength?.toString() ?? ''; patternElement = modalElement.querySelector('#contractTypeFieldEdit--pattern'); patternElement.value = contractTypeField.pattern ?? ''; fieldValuesElement = modalElement.querySelector('#contractTypeFieldEdit--fieldValues'); fieldValuesElement.value = contractTypeField.fieldValues ?? ''; toggleInputFields(); }, onshown(modalElement, closeModalFunction) { editCloseModalFunction = closeModalFunction; bulmaJS.init(modalElement); bulmaJS.toggleHtmlClipped(); cityssm.enableNavBlocker(); modalElement.querySelector('form')?.addEventListener('submit', doUpdate); minLengthInputElement.addEventListener('keyup', updateMaximumLengthMin); updateMaximumLengthMin(); fieldTypeElement.addEventListener('change', toggleInputFields); modalElement .querySelector('#button--deleteContractTypeField') ?.addEventListener('click', confirmDoDelete); }, onremoved() { bulmaJS.toggleHtmlClipped(); cityssm.disableNavBlocker(); } }); } function openEditContractTypeFieldByClick(clickEvent) { clickEvent.preventDefault(); const contractTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractTypeField').dataset.contractTypeFieldId ?? '', 10); const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10); openEditContractTypeField(contractTypeId, contractTypeFieldId); } function moveContractTypeField(clickEvent) { const buttonElement = clickEvent.currentTarget; const contractTypeFieldId = clickEvent.currentTarget.closest('.container--contractTypeField').dataset.contractTypeFieldId; cityssm.postJSON(`${sunrise.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' ? // eslint-disable-next-line no-secrets/no-secrets 'doMoveContractTypeFieldUp' : // eslint-disable-next-line no-secrets/no-secrets 'doMoveContractTypeFieldDown'}`, { contractTypeFieldId, moveToEnd: clickEvent.shiftKey ? '1' : '0' }, contractTypeResponseHandler); } function renderContractTypeFields(panelElement, contractTypeId, contractTypeFields) { if (contractTypeFields.length === 0) { // eslint-disable-next-line no-unsanitized/method panelElement.insertAdjacentHTML('beforeend', `

There are no additional fields.

`); } else { for (const contractTypeField of contractTypeFields) { const panelBlockElement = document.createElement('div'); panelBlockElement.className = 'panel-block is-block container--contractTypeField'; if (contractTypeId && !expandedContractTypes.has(contractTypeId)) { panelBlockElement.classList.add('is-hidden'); } panelBlockElement.dataset.contractTypeFieldId = contractTypeField.contractTypeFieldId.toString(); // eslint-disable-next-line no-unsanitized/property panelBlockElement.innerHTML = `
${sunrise.getMoveUpDownButtonFieldHTML('button--moveContractTypeFieldUp', 'button--moveContractTypeFieldDown')}
`; panelBlockElement .querySelector('.button--editContractTypeField') ?.addEventListener('click', openEditContractTypeFieldByClick); panelBlockElement.querySelector('.button--moveContractTypeFieldUp').addEventListener('click', moveContractTypeField); panelBlockElement.querySelector('.button--moveContractTypeFieldDown').addEventListener('click', moveContractTypeField); panelElement.append(panelBlockElement); } } } function openAddContractTypePrint(clickEvent) { const contractTypeId = clickEvent.currentTarget.closest('.container--contractTypePrintList').dataset.contractTypeId ?? ''; let closeAddModalFunction; function doAdd(formEvent) { formEvent.preventDefault(); cityssm.postJSON(`${sunrise.urlPrefix}/admin/doAddContractTypePrint`, formEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON; if (responseJSON.success) { closeAddModalFunction(); } contractTypeResponseHandler(responseJSON); }); } cityssm.openHtmlModal('adminContractTypes-addPrint', { onshow(modalElement) { sunrise.populateAliases(modalElement); modalElement.querySelector('#contractTypePrintAdd--contractTypeId').value = contractTypeId; const printSelectElement = modalElement.querySelector('#contractTypePrintAdd--printEJS'); for (const [printEJS, printTitle] of Object.entries(exports.contractTypePrintTitles)) { const optionElement = document.createElement('option'); optionElement.value = printEJS; optionElement.textContent = printTitle; printSelectElement.append(optionElement); } }, onshown(modalElement, closeModalFunction) { closeAddModalFunction = closeModalFunction; modalElement.querySelector('form')?.addEventListener('submit', doAdd); } }); } function moveContractTypePrint(clickEvent) { const buttonElement = clickEvent.currentTarget; const printEJS = buttonElement.closest('.container--contractTypePrint').dataset.printEJS; const contractTypeId = buttonElement.closest('.container--contractTypePrintList').dataset.contractTypeId; cityssm.postJSON(`${sunrise.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' ? 'doMoveContractTypePrintUp' : 'doMoveContractTypePrintDown'}`, { contractTypeId, printEJS, moveToEnd: clickEvent.shiftKey ? '1' : '0' }, contractTypeResponseHandler); } function deleteContractTypePrint(clickEvent) { clickEvent.preventDefault(); const printEJS = clickEvent.currentTarget.closest('.container--contractTypePrint').dataset.printEJS; const contractTypeId = clickEvent.currentTarget.closest('.container--contractTypePrintList').dataset.contractTypeId; function doDelete() { cityssm.postJSON(`${sunrise.urlPrefix}/admin/doDeleteContractTypePrint`, { contractTypeId, printEJS }, contractTypeResponseHandler); } bulmaJS.confirm({ title: 'Delete Print', message: 'Are you sure you want to remove this print option?', contextualColorName: 'warning', okButton: { text: 'Yes, Remove Print', callbackFunction: doDelete } }); } function renderContractTypePrints(panelElement, contractTypeId, contractTypePrints) { if (contractTypePrints.length === 0) { panelElement.insertAdjacentHTML('beforeend', `

There are no prints associated with this record.

`); } else { for (const printEJS of contractTypePrints) { const panelBlockElement = document.createElement('div'); panelBlockElement.className = 'panel-block is-block container--contractTypePrint'; panelBlockElement.dataset.printEJS = printEJS; const printTitle = printEJS === '*' ? '(All Available Prints)' : exports.contractTypePrintTitles[printEJS]; let printIconClass = 'fa-star'; if (printEJS.startsWith('pdf/')) { printIconClass = 'fa-file-pdf'; } else if (printEJS.startsWith('screen/')) { printIconClass = 'fa-file'; } // eslint-disable-next-line no-unsanitized/property panelBlockElement.innerHTML = `
${cityssm.escapeHTML(printTitle || printEJS)}
${sunrise.getMoveUpDownButtonFieldHTML('button--moveContractTypePrintUp', 'button--moveContractTypePrintDown')}
`; panelBlockElement.querySelector('.button--moveContractTypePrintUp').addEventListener('click', moveContractTypePrint); panelBlockElement.querySelector('.button--moveContractTypePrintDown').addEventListener('click', moveContractTypePrint); panelBlockElement .querySelector('.button--deleteContractTypePrint') ?.addEventListener('click', deleteContractTypePrint); panelElement.append(panelBlockElement); } } } function renderContractTypes() { contractTypesContainerElement.innerHTML = `

(All Contract Types)

`; contractTypePrintsContainerElement.innerHTML = ''; renderContractTypeFields(contractTypesContainerElement.querySelector('#container--allContractTypeFields'), undefined, allContractTypeFields); contractTypesContainerElement .querySelector('.button--addContractTypeField') ?.addEventListener('click', openAddContractTypeField); if (contractTypes.length === 0) { contractTypesContainerElement.insertAdjacentHTML('afterbegin', `
There are no active contract types.

`); contractTypePrintsContainerElement.insertAdjacentHTML('afterbegin', `
There are no active contract types.

`); return; } for (const contractType of contractTypes) { /* * Types and Fields */ const contractTypeContainer = document.createElement('div'); contractTypeContainer.className = 'panel container--contractType'; contractTypeContainer.dataset.contractTypeId = contractType.contractTypeId.toString(); // eslint-disable-next-line no-unsanitized/property contractTypeContainer.innerHTML = `

${cityssm.escapeHTML(contractType.contractType)}

${contractType.isPreneed ? `
Preneed
` : ''}
${sunrise.getMoveUpDownButtonFieldHTML('button--moveContractTypeUp', 'button--moveContractTypeDown')}
`; renderContractTypeFields(contractTypeContainer, contractType.contractTypeId, contractType.contractTypeFields ?? []); contractTypeContainer .querySelector('.button--toggleContractTypeFields') ?.addEventListener('click', toggleContractTypeFields); contractTypeContainer .querySelector('.button--deleteContractType') ?.addEventListener('click', deleteContractType); contractTypeContainer .querySelector('.button--editContractType') ?.addEventListener('click', openEditContractType); contractTypeContainer .querySelector('.button--addContractTypeField') ?.addEventListener('click', openAddContractTypeField); contractTypeContainer.querySelector('.button--moveContractTypeUp').addEventListener('click', moveContractType); contractTypeContainer.querySelector('.button--moveContractTypeDown').addEventListener('click', moveContractType); contractTypesContainerElement.append(contractTypeContainer); /* * Prints */ const contractTypePrintContainer = document.createElement('div'); contractTypePrintContainer.className = 'panel container--contractTypePrintList'; contractTypePrintContainer.dataset.contractTypeId = contractType.contractTypeId.toString(); contractTypePrintContainer.innerHTML = `

${cityssm.escapeHTML(contractType.contractType)}

`; renderContractTypePrints(contractTypePrintContainer, contractType.contractTypeId, contractType.contractTypePrints ?? []); contractTypePrintContainer .querySelector('.button--addContractTypePrint') ?.addEventListener('click', openAddContractTypePrint); contractTypePrintsContainerElement.append(contractTypePrintContainer); } } document .querySelector('#button--addContractType') ?.addEventListener('click', () => { let addCloseModalFunction; function doAdd(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(`${sunrise.urlPrefix}/admin/doAddContractType`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON; if (responseJSON.success) { addCloseModalFunction(); contractTypes = responseJSON.contractTypes; renderContractTypes(); } else { bulmaJS.alert({ title: "Error Adding Contract Type", message: responseJSON.errorMessage ?? '', contextualColorName: 'danger' }); } }); } cityssm.openHtmlModal('adminContractTypes-add', { onshow(modalElement) { sunrise.populateAliases(modalElement); }, onshown(modalElement, closeModalFunction) { addCloseModalFunction = closeModalFunction; modalElement.querySelector('#contractTypeAdd--contractType').focus(); modalElement.querySelector('form')?.addEventListener('submit', doAdd); bulmaJS.toggleHtmlClipped(); }, onremoved() { bulmaJS.toggleHtmlClipped(); } }); }); renderContractTypes(); })();