From c1d00559e55c5940b11b6ee9c50c20a31d08f69a Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Tue, 24 Jan 2023 10:41:17 -0500 Subject: [PATCH] linting --- .../updateWorkOrderMilestone.js | 6 +- .../updateWorkOrderMilestone.ts | 6 +- .../lotOccupancyEditOccupants.js | 314 +++++------ .../lotOccupancyEditOccupants.ts | 503 +++++++++--------- 4 files changed, 415 insertions(+), 414 deletions(-) diff --git a/helpers/lotOccupancyDB/updateWorkOrderMilestone.js b/helpers/lotOccupancyDB/updateWorkOrderMilestone.js index 7d3aa2b7..1fc3e9ab 100644 --- a/helpers/lotOccupancyDB/updateWorkOrderMilestone.js +++ b/helpers/lotOccupancyDB/updateWorkOrderMilestone.js @@ -14,9 +14,9 @@ export async function updateWorkOrderMilestone(milestoneForm, requestSession) { where workOrderMilestoneId = ?`) .run(milestoneForm.workOrderMilestoneTypeId === '' ? undefined - : milestoneForm.workOrderMilestoneTypeId, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), milestoneForm.workOrderMilestoneTimeString - ? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString) - : 0, milestoneForm.workOrderMilestoneDescription, requestSession.user.userName, rightNow.getTime(), milestoneForm.workOrderMilestoneId); + : milestoneForm.workOrderMilestoneTypeId, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), (milestoneForm.workOrderMilestoneTimeString ?? '') === '' + ? 0 + : timeStringToInteger(milestoneForm.workOrderMilestoneTimeString), milestoneForm.workOrderMilestoneDescription, requestSession.user.userName, rightNow.getTime(), milestoneForm.workOrderMilestoneId); database.release(); return result.changes > 0; } diff --git a/helpers/lotOccupancyDB/updateWorkOrderMilestone.ts b/helpers/lotOccupancyDB/updateWorkOrderMilestone.ts index 7e1e0282..ad88fe6f 100644 --- a/helpers/lotOccupancyDB/updateWorkOrderMilestone.ts +++ b/helpers/lotOccupancyDB/updateWorkOrderMilestone.ts @@ -39,9 +39,9 @@ export async function updateWorkOrderMilestone( ? undefined : milestoneForm.workOrderMilestoneTypeId, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), - milestoneForm.workOrderMilestoneTimeString - ? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString) - : 0, + (milestoneForm.workOrderMilestoneTimeString ?? '') === '' + ? 0 + : timeStringToInteger(milestoneForm.workOrderMilestoneTimeString!), milestoneForm.workOrderMilestoneDescription, requestSession.user!.userName, diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.js b/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.js index 45c6fb5f..cef6005a 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.js +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.js @@ -1,7 +1,9 @@ "use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ +var _a; Object.defineProperty(exports, "__esModule", { value: true }); -let lotOccupancyOccupants; +let lotOccupancyOccupants = exports.lotOccupancyOccupants; +delete exports.lotOccupancyOccupants; function openEditLotOccupancyOccupant(clickEvent) { const lotOccupantIndex = Number.parseInt(clickEvent.currentTarget.closest('tr').dataset .lotOccupantIndex, 10); @@ -192,7 +194,11 @@ function renderLotOccupancyOccupants() { : cityssm.escapeHTML(lotOccupancyOccupant.occupantEmailAddress)) + '') + ('' + - '' + + '' + cityssm.escapeHTML((_k = lotOccupancyOccupant.occupantComment) !== null && _k !== void 0 ? _k : '') + '' + '') + @@ -229,159 +235,155 @@ if (isCreate) { }); } else { - lotOccupancyOccupants = exports.lotOccupancyOccupants; - delete exports.lotOccupancyOccupants; - document - .querySelector('#button--addOccupant') - .addEventListener('click', () => { - let addCloseModalFunction; - let addFormElement; - let searchFormElement; - let searchResultsElement; - function addOccupant(formOrObject) { - cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doAddLotOccupancyOccupant', formOrObject, (responseJSON) => { - var _a; - if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; - addCloseModalFunction(); - renderLotOccupancyOccupants(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Occupant}`, - message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', - contextualColorName: 'danger' - }); - } - }); - } - function addOccupantFromForm(submitEvent) { - submitEvent.preventDefault(); - addOccupant(addFormElement); - } - let pastOccupantSearchResults = []; - function addOccupantFromCopy(clickEvent) { - clickEvent.preventDefault(); - const panelBlockElement = clickEvent.currentTarget; - const occupant = pastOccupantSearchResults[Number.parseInt(panelBlockElement.dataset.index, 10)]; - const lotOccupantTypeId = panelBlockElement - .closest('.modal') - .querySelector('#lotOccupancyOccupantCopy--lotOccupantTypeId').value; - if (lotOccupantTypeId === '') { - bulmaJS.alert({ - title: `No ${los.escapedAliases.Occupant} Type Selected`, - message: `Select a type to apply to the newly added ${los.escapedAliases.occupant}.`, - contextualColorName: 'warning' - }); - } - else { - occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10); - occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10); - addOccupant(occupant); - } - } - function searchOccupants(event) { - event.preventDefault(); - if (searchFormElement.querySelector('#lotOccupancyOccupantCopy--searchFilter').value === '') { - searchResultsElement.innerHTML = - '
' + - '

Enter a partial name or address in the search field above.

' + - '
'; - return; - } - searchResultsElement.innerHTML = - los.getLoadingParagraphHTML('Searching...'); - cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doSearchPastOccupants', searchFormElement, (responseJSON) => { - var _a, _b, _c, _d, _e, _f, _g, _h; - pastOccupantSearchResults = responseJSON.occupants; - const panelElement = document.createElement('div'); - panelElement.className = 'panel'; - for (const [index, occupant] of pastOccupantSearchResults.entries()) { - const panelBlockElement = document.createElement('a'); - panelBlockElement.className = 'panel-block is-block'; - panelBlockElement.dataset.index = index.toString(); - panelBlockElement.innerHTML = - '' + - cityssm.escapeHTML((_a = occupant.occupantName) !== null && _a !== void 0 ? _a : '') + - '' + - '
' + - '
' + - ('
' + - cityssm.escapeHTML((_b = occupant.occupantAddress1) !== null && _b !== void 0 ? _b : '') + - '
' + - (((_c = occupant.occupantAddress2) !== null && _c !== void 0 ? _c : '') === '' - ? '' - : cityssm.escapeHTML(occupant.occupantAddress2) + - '
') + - cityssm.escapeHTML((_d = occupant.occupantCity) !== null && _d !== void 0 ? _d : '') + - ', ' + - cityssm.escapeHTML((_e = occupant.occupantProvince) !== null && _e !== void 0 ? _e : '') + - '
' + - cityssm.escapeHTML((_f = occupant.occupantPostalCode) !== null && _f !== void 0 ? _f : '') + - '
') + - ('
' + - (((_g = occupant.occupantPhoneNumber) !== null && _g !== void 0 ? _g : '') === '' - ? '' - : cityssm.escapeHTML(occupant.occupantPhoneNumber) + - '
') + - cityssm.escapeHTML((_h = occupant.occupantEmailAddress) !== null && _h !== void 0 ? _h : '') + - '
' + - '
') + - '
'; - panelBlockElement.addEventListener('click', addOccupantFromCopy); - panelElement.append(panelBlockElement); - } - searchResultsElement.innerHTML = ''; - searchResultsElement.append(panelElement); - }); - } - cityssm.openHtmlModal('lotOccupancy-addOccupant', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupancyId').value = lotOccupancyId; - const lotOccupantTypeSelectElement = modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupantTypeId'); - const lotOccupantTypeCopySelectElement = modalElement.querySelector('#lotOccupancyOccupantCopy--lotOccupantTypeId'); - for (const lotOccupantType of exports.lotOccupantTypes) { - const optionElement = document.createElement('option'); - optionElement.value = lotOccupantType.lotOccupantTypeId.toString(); - optionElement.textContent = lotOccupantType.lotOccupantType; - optionElement.dataset.occupantCommentTitle = - lotOccupantType.occupantCommentTitle; - lotOccupantTypeSelectElement.append(optionElement); - lotOccupantTypeCopySelectElement.append(optionElement.cloneNode(true)); - } - ; - modalElement.querySelector('#lotOccupancyOccupantAdd--occupantCity').value = exports.occupantCityDefault; - modalElement.querySelector('#lotOccupancyOccupantAdd--occupantProvince').value = exports.occupantProvinceDefault; - }, - onshown: (modalElement, closeModalFunction) => { - bulmaJS.toggleHtmlClipped(); - bulmaJS.init(modalElement); - const lotOccupantTypeIdElement = modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupantTypeId'); - lotOccupantTypeIdElement.focus(); - lotOccupantTypeIdElement.addEventListener('change', () => { - var _a; - let occupantCommentTitle = (_a = lotOccupantTypeIdElement.selectedOptions[0].dataset - .occupantCommentTitle) !== null && _a !== void 0 ? _a : ''; - if (occupantCommentTitle === '') { - occupantCommentTitle = 'Comment'; - } - modalElement.querySelector('#lotOccupancyOccupantAdd--occupantCommentTitle').textContent = occupantCommentTitle; - }); - addFormElement = modalElement.querySelector('#form--lotOccupancyOccupantAdd'); - addFormElement.addEventListener('submit', addOccupantFromForm); - searchResultsElement = modalElement.querySelector('#lotOccupancyOccupantCopy--searchResults'); - searchFormElement = modalElement.querySelector('#form--lotOccupancyOccupantCopy'); - searchFormElement.addEventListener('submit', (formEvent) => { - formEvent.preventDefault(); - }); - modalElement.querySelector('#lotOccupancyOccupantCopy--searchFilter').addEventListener('change', searchOccupants); - addCloseModalFunction = closeModalFunction; - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }); renderLotOccupancyOccupants(); } +(_a = document + .querySelector('#button--addOccupant')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', () => { + let addCloseModalFunction; + let addFormElement; + let searchFormElement; + let searchResultsElement; + function addOccupant(formOrObject) { + cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doAddLotOccupancyOccupant', formOrObject, (responseJSON) => { + var _a; + if (responseJSON.success) { + lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; + addCloseModalFunction(); + renderLotOccupancyOccupants(); + } + else { + bulmaJS.alert({ + title: `Error Adding ${los.escapedAliases.Occupant}`, + message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', + contextualColorName: 'danger' + }); + } + }); + } + function addOccupantFromForm(submitEvent) { + submitEvent.preventDefault(); + addOccupant(addFormElement); + } + let pastOccupantSearchResults = []; + function addOccupantFromCopy(clickEvent) { + clickEvent.preventDefault(); + const panelBlockElement = clickEvent.currentTarget; + const occupant = pastOccupantSearchResults[Number.parseInt(panelBlockElement.dataset.index, 10)]; + const lotOccupantTypeId = panelBlockElement + .closest('.modal') + .querySelector('#lotOccupancyOccupantCopy--lotOccupantTypeId').value; + if (lotOccupantTypeId === '') { + bulmaJS.alert({ + title: `No ${los.escapedAliases.Occupant} Type Selected`, + message: `Select a type to apply to the newly added ${los.escapedAliases.occupant}.`, + contextualColorName: 'warning' + }); + } + else { + occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10); + occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10); + addOccupant(occupant); + } + } + function searchOccupants(event) { + event.preventDefault(); + if (searchFormElement.querySelector('#lotOccupancyOccupantCopy--searchFilter').value === '') { + searchResultsElement.innerHTML = + '
' + + '

Enter a partial name or address in the search field above.

' + + '
'; + return; + } + searchResultsElement.innerHTML = + los.getLoadingParagraphHTML('Searching...'); + cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doSearchPastOccupants', searchFormElement, (responseJSON) => { + var _a, _b, _c, _d, _e, _f, _g, _h; + pastOccupantSearchResults = responseJSON.occupants; + const panelElement = document.createElement('div'); + panelElement.className = 'panel'; + for (const [index, occupant] of pastOccupantSearchResults.entries()) { + const panelBlockElement = document.createElement('a'); + panelBlockElement.className = 'panel-block is-block'; + panelBlockElement.dataset.index = index.toString(); + panelBlockElement.innerHTML = + '' + + cityssm.escapeHTML((_a = occupant.occupantName) !== null && _a !== void 0 ? _a : '') + + '' + + '
' + + '
' + + ('
' + + cityssm.escapeHTML((_b = occupant.occupantAddress1) !== null && _b !== void 0 ? _b : '') + + '
' + + (((_c = occupant.occupantAddress2) !== null && _c !== void 0 ? _c : '') === '' + ? '' + : cityssm.escapeHTML(occupant.occupantAddress2) + '
') + + cityssm.escapeHTML((_d = occupant.occupantCity) !== null && _d !== void 0 ? _d : '') + + ', ' + + cityssm.escapeHTML((_e = occupant.occupantProvince) !== null && _e !== void 0 ? _e : '') + + '
' + + cityssm.escapeHTML((_f = occupant.occupantPostalCode) !== null && _f !== void 0 ? _f : '') + + '
') + + ('
' + + (((_g = occupant.occupantPhoneNumber) !== null && _g !== void 0 ? _g : '') === '' + ? '' + : cityssm.escapeHTML(occupant.occupantPhoneNumber) + + '
') + + cityssm.escapeHTML((_h = occupant.occupantEmailAddress) !== null && _h !== void 0 ? _h : '') + + '
' + + '
') + + '
'; + panelBlockElement.addEventListener('click', addOccupantFromCopy); + panelElement.append(panelBlockElement); + } + searchResultsElement.innerHTML = ''; + searchResultsElement.append(panelElement); + }); + } + cityssm.openHtmlModal('lotOccupancy-addOccupant', { + onshow(modalElement) { + los.populateAliases(modalElement); + modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupancyId').value = lotOccupancyId; + const lotOccupantTypeSelectElement = modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupantTypeId'); + const lotOccupantTypeCopySelectElement = modalElement.querySelector('#lotOccupancyOccupantCopy--lotOccupantTypeId'); + for (const lotOccupantType of exports.lotOccupantTypes) { + const optionElement = document.createElement('option'); + optionElement.value = lotOccupantType.lotOccupantTypeId.toString(); + optionElement.textContent = lotOccupantType.lotOccupantType; + optionElement.dataset.occupantCommentTitle = + lotOccupantType.occupantCommentTitle; + lotOccupantTypeSelectElement.append(optionElement); + lotOccupantTypeCopySelectElement.append(optionElement.cloneNode(true)); + } + ; + modalElement.querySelector('#lotOccupancyOccupantAdd--occupantCity').value = exports.occupantCityDefault; + modalElement.querySelector('#lotOccupancyOccupantAdd--occupantProvince').value = exports.occupantProvinceDefault; + }, + onshown: (modalElement, closeModalFunction) => { + bulmaJS.toggleHtmlClipped(); + bulmaJS.init(modalElement); + const lotOccupantTypeIdElement = modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupantTypeId'); + lotOccupantTypeIdElement.focus(); + lotOccupantTypeIdElement.addEventListener('change', () => { + var _a; + let occupantCommentTitle = (_a = lotOccupantTypeIdElement.selectedOptions[0].dataset + .occupantCommentTitle) !== null && _a !== void 0 ? _a : ''; + if (occupantCommentTitle === '') { + occupantCommentTitle = 'Comment'; + } + modalElement.querySelector('#lotOccupancyOccupantAdd--occupantCommentTitle').textContent = occupantCommentTitle; + }); + addFormElement = modalElement.querySelector('#form--lotOccupancyOccupantAdd'); + addFormElement.addEventListener('submit', addOccupantFromForm); + searchResultsElement = modalElement.querySelector('#lotOccupancyOccupantCopy--searchResults'); + searchFormElement = modalElement.querySelector('#form--lotOccupancyOccupantCopy'); + searchFormElement.addEventListener('submit', (formEvent) => { + formEvent.preventDefault(); + }); + modalElement.querySelector('#lotOccupancyOccupantCopy--searchFilter').addEventListener('change', searchOccupants); + addCloseModalFunction = closeModalFunction; + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); + } + }); +}); diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.ts b/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.ts index c1109ae3..e63dc17c 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.ts +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEditOccupants.ts @@ -16,7 +16,9 @@ declare const lotOccupancyId: string declare const isCreate: boolean declare const formElement: HTMLFormElement -let lotOccupancyOccupants: recordTypes.LotOccupancyOccupant[] +let lotOccupancyOccupants: recordTypes.LotOccupancyOccupant[] = + exports.lotOccupancyOccupants +delete exports.lotOccupancyOccupants function openEditLotOccupancyOccupant(clickEvent: Event): void { const lotOccupantIndex = Number.parseInt( @@ -316,7 +318,13 @@ function renderLotOccupancyOccupants(): void { : cityssm.escapeHTML(lotOccupancyOccupant.occupantEmailAddress!)) + '') + ('' + - '' + + '' + cityssm.escapeHTML(lotOccupancyOccupant.occupantComment ?? '') + '' + '') + @@ -362,255 +370,246 @@ if (isCreate) { } }) } else { - lotOccupancyOccupants = exports.lotOccupancyOccupants - delete exports.lotOccupancyOccupants - - document - .querySelector('#button--addOccupant')! - .addEventListener('click', () => { - let addCloseModalFunction: () => void - - let addFormElement: HTMLFormElement - - let searchFormElement: HTMLFormElement - let searchResultsElement: HTMLElement - - function addOccupant( - formOrObject: HTMLFormElement | recordTypes.LotOccupancyOccupant - ): void { - cityssm.postJSON( - los.urlPrefix + '/lotOccupancies/doAddLotOccupancyOccupant', - formOrObject, - (responseJSON: { - success: boolean - errorMessage?: string - lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[] - }) => { - if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants! - addCloseModalFunction() - renderLotOccupancyOccupants() - } else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Occupant}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }) - } - } - ) - } - - function addOccupantFromForm(submitEvent: SubmitEvent): void { - submitEvent.preventDefault() - addOccupant(addFormElement) - } - - let pastOccupantSearchResults: recordTypes.LotOccupancyOccupant[] = [] - - function addOccupantFromCopy(clickEvent: MouseEvent): void { - clickEvent.preventDefault() - - const panelBlockElement = clickEvent.currentTarget as HTMLElement - - const occupant = - pastOccupantSearchResults[ - Number.parseInt(panelBlockElement.dataset.index!, 10) - ] - - const lotOccupantTypeId = ( - panelBlockElement - .closest('.modal')! - .querySelector( - '#lotOccupancyOccupantCopy--lotOccupantTypeId' - ) as HTMLSelectElement - ).value - - if (lotOccupantTypeId === '') { - bulmaJS.alert({ - title: `No ${los.escapedAliases.Occupant} Type Selected`, - message: `Select a type to apply to the newly added ${los.escapedAliases.occupant}.`, - contextualColorName: 'warning' - }) - } else { - occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10) - occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10) - addOccupant(occupant) - } - } - - function searchOccupants(event: Event): void { - event.preventDefault() - - if ( - ( - searchFormElement.querySelector( - '#lotOccupancyOccupantCopy--searchFilter' - ) as HTMLInputElement - ).value === '' - ) { - searchResultsElement.innerHTML = - '
' + - '

Enter a partial name or address in the search field above.

' + - '
' - - return - } - - searchResultsElement.innerHTML = - los.getLoadingParagraphHTML('Searching...') - - cityssm.postJSON( - los.urlPrefix + '/lotOccupancies/doSearchPastOccupants', - searchFormElement, - (responseJSON: { occupants: recordTypes.LotOccupancyOccupant[] }) => { - pastOccupantSearchResults = responseJSON.occupants - - const panelElement = document.createElement('div') - panelElement.className = 'panel' - - for (const [ - index, - occupant - ] of pastOccupantSearchResults.entries()) { - const panelBlockElement = document.createElement('a') - panelBlockElement.className = 'panel-block is-block' - panelBlockElement.dataset.index = index.toString() - - panelBlockElement.innerHTML = - '' + - cityssm.escapeHTML(occupant.occupantName ?? '') + - '' + - '
' + - '
' + - ('
' + - cityssm.escapeHTML(occupant.occupantAddress1 ?? '') + - '
' + - ((occupant.occupantAddress2 ?? '') === '' - ? '' - : cityssm.escapeHTML(occupant.occupantAddress2!) + - '
') + - cityssm.escapeHTML(occupant.occupantCity ?? '') + - ', ' + - cityssm.escapeHTML(occupant.occupantProvince ?? '') + - '
' + - cityssm.escapeHTML(occupant.occupantPostalCode ?? '') + - '
') + - ('
' + - ((occupant.occupantPhoneNumber ?? '') === '' - ? '' - : cityssm.escapeHTML(occupant.occupantPhoneNumber!) + - '
') + - cityssm.escapeHTML(occupant.occupantEmailAddress ?? '') + - '
' + - '
') + - '
' - - panelBlockElement.addEventListener('click', addOccupantFromCopy) - - panelElement.append(panelBlockElement) - } - - searchResultsElement.innerHTML = '' - searchResultsElement.append(panelElement) - } - ) - } - - cityssm.openHtmlModal('lotOccupancy-addOccupant', { - onshow(modalElement) { - los.populateAliases(modalElement) - ;( - modalElement.querySelector( - '#lotOccupancyOccupantAdd--lotOccupancyId' - ) as HTMLInputElement - ).value = lotOccupancyId - - const lotOccupantTypeSelectElement = modalElement.querySelector( - '#lotOccupancyOccupantAdd--lotOccupantTypeId' - ) as HTMLSelectElement - - const lotOccupantTypeCopySelectElement = modalElement.querySelector( - '#lotOccupancyOccupantCopy--lotOccupantTypeId' - ) as HTMLSelectElement - - for (const lotOccupantType of exports.lotOccupantTypes as recordTypes.LotOccupantType[]) { - const optionElement = document.createElement('option') - optionElement.value = lotOccupantType.lotOccupantTypeId.toString() - optionElement.textContent = lotOccupantType.lotOccupantType - optionElement.dataset.occupantCommentTitle = - lotOccupantType.occupantCommentTitle - - lotOccupantTypeSelectElement.append(optionElement) - - lotOccupantTypeCopySelectElement.append( - optionElement.cloneNode(true) - ) - } - - ;( - modalElement.querySelector( - '#lotOccupancyOccupantAdd--occupantCity' - ) as HTMLInputElement - ).value = exports.occupantCityDefault - ;( - modalElement.querySelector( - '#lotOccupancyOccupantAdd--occupantProvince' - ) as HTMLInputElement - ).value = exports.occupantProvinceDefault - }, - onshown: (modalElement, closeModalFunction) => { - bulmaJS.toggleHtmlClipped() - bulmaJS.init(modalElement) - - const lotOccupantTypeIdElement = modalElement.querySelector( - '#lotOccupancyOccupantAdd--lotOccupantTypeId' - ) as HTMLSelectElement - - lotOccupantTypeIdElement.focus() - - lotOccupantTypeIdElement.addEventListener('change', () => { - let occupantCommentTitle = - lotOccupantTypeIdElement.selectedOptions[0].dataset - .occupantCommentTitle ?? '' - - if (occupantCommentTitle === '') { - occupantCommentTitle = 'Comment' - } - - modalElement.querySelector( - '#lotOccupancyOccupantAdd--occupantCommentTitle' - )!.textContent = occupantCommentTitle - }) - - addFormElement = modalElement.querySelector( - '#form--lotOccupancyOccupantAdd' - ) as HTMLFormElement - addFormElement.addEventListener('submit', addOccupantFromForm) - - searchResultsElement = modalElement.querySelector( - '#lotOccupancyOccupantCopy--searchResults' - ) as HTMLElement - - searchFormElement = modalElement.querySelector( - '#form--lotOccupancyOccupantCopy' - ) as HTMLFormElement - searchFormElement.addEventListener('submit', (formEvent) => { - formEvent.preventDefault() - }) - ;( - modalElement.querySelector( - '#lotOccupancyOccupantCopy--searchFilter' - ) as HTMLInputElement - ).addEventListener('change', searchOccupants) - - addCloseModalFunction = closeModalFunction - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped() - } - }) - }) - renderLotOccupancyOccupants() } + +document + .querySelector('#button--addOccupant') + ?.addEventListener('click', () => { + let addCloseModalFunction: () => void + + let addFormElement: HTMLFormElement + + let searchFormElement: HTMLFormElement + let searchResultsElement: HTMLElement + + function addOccupant( + formOrObject: HTMLFormElement | recordTypes.LotOccupancyOccupant + ): void { + cityssm.postJSON( + los.urlPrefix + '/lotOccupancies/doAddLotOccupancyOccupant', + formOrObject, + (responseJSON: { + success: boolean + errorMessage?: string + lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[] + }) => { + if (responseJSON.success) { + lotOccupancyOccupants = responseJSON.lotOccupancyOccupants! + addCloseModalFunction() + renderLotOccupancyOccupants() + } else { + bulmaJS.alert({ + title: `Error Adding ${los.escapedAliases.Occupant}`, + message: responseJSON.errorMessage ?? '', + contextualColorName: 'danger' + }) + } + } + ) + } + + function addOccupantFromForm(submitEvent: SubmitEvent): void { + submitEvent.preventDefault() + addOccupant(addFormElement) + } + + let pastOccupantSearchResults: recordTypes.LotOccupancyOccupant[] = [] + + function addOccupantFromCopy(clickEvent: MouseEvent): void { + clickEvent.preventDefault() + + const panelBlockElement = clickEvent.currentTarget as HTMLElement + + const occupant = + pastOccupantSearchResults[ + Number.parseInt(panelBlockElement.dataset.index!, 10) + ] + + const lotOccupantTypeId = ( + panelBlockElement + .closest('.modal')! + .querySelector( + '#lotOccupancyOccupantCopy--lotOccupantTypeId' + ) as HTMLSelectElement + ).value + + if (lotOccupantTypeId === '') { + bulmaJS.alert({ + title: `No ${los.escapedAliases.Occupant} Type Selected`, + message: `Select a type to apply to the newly added ${los.escapedAliases.occupant}.`, + contextualColorName: 'warning' + }) + } else { + occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10) + occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10) + addOccupant(occupant) + } + } + + function searchOccupants(event: Event): void { + event.preventDefault() + + if ( + ( + searchFormElement.querySelector( + '#lotOccupancyOccupantCopy--searchFilter' + ) as HTMLInputElement + ).value === '' + ) { + searchResultsElement.innerHTML = + '
' + + '

Enter a partial name or address in the search field above.

' + + '
' + + return + } + + searchResultsElement.innerHTML = + los.getLoadingParagraphHTML('Searching...') + + cityssm.postJSON( + los.urlPrefix + '/lotOccupancies/doSearchPastOccupants', + searchFormElement, + (responseJSON: { occupants: recordTypes.LotOccupancyOccupant[] }) => { + pastOccupantSearchResults = responseJSON.occupants + + const panelElement = document.createElement('div') + panelElement.className = 'panel' + + for (const [index, occupant] of pastOccupantSearchResults.entries()) { + const panelBlockElement = document.createElement('a') + panelBlockElement.className = 'panel-block is-block' + panelBlockElement.dataset.index = index.toString() + + panelBlockElement.innerHTML = + '' + + cityssm.escapeHTML(occupant.occupantName ?? '') + + '' + + '
' + + '
' + + ('
' + + cityssm.escapeHTML(occupant.occupantAddress1 ?? '') + + '
' + + ((occupant.occupantAddress2 ?? '') === '' + ? '' + : cityssm.escapeHTML(occupant.occupantAddress2!) + '
') + + cityssm.escapeHTML(occupant.occupantCity ?? '') + + ', ' + + cityssm.escapeHTML(occupant.occupantProvince ?? '') + + '
' + + cityssm.escapeHTML(occupant.occupantPostalCode ?? '') + + '
') + + ('
' + + ((occupant.occupantPhoneNumber ?? '') === '' + ? '' + : cityssm.escapeHTML(occupant.occupantPhoneNumber!) + + '
') + + cityssm.escapeHTML(occupant.occupantEmailAddress ?? '') + + '
' + + '
') + + '
' + + panelBlockElement.addEventListener('click', addOccupantFromCopy) + + panelElement.append(panelBlockElement) + } + + searchResultsElement.innerHTML = '' + searchResultsElement.append(panelElement) + } + ) + } + + cityssm.openHtmlModal('lotOccupancy-addOccupant', { + onshow(modalElement) { + los.populateAliases(modalElement) + ;( + modalElement.querySelector( + '#lotOccupancyOccupantAdd--lotOccupancyId' + ) as HTMLInputElement + ).value = lotOccupancyId + + const lotOccupantTypeSelectElement = modalElement.querySelector( + '#lotOccupancyOccupantAdd--lotOccupantTypeId' + ) as HTMLSelectElement + + const lotOccupantTypeCopySelectElement = modalElement.querySelector( + '#lotOccupancyOccupantCopy--lotOccupantTypeId' + ) as HTMLSelectElement + + for (const lotOccupantType of exports.lotOccupantTypes as recordTypes.LotOccupantType[]) { + const optionElement = document.createElement('option') + optionElement.value = lotOccupantType.lotOccupantTypeId.toString() + optionElement.textContent = lotOccupantType.lotOccupantType + optionElement.dataset.occupantCommentTitle = + lotOccupantType.occupantCommentTitle + + lotOccupantTypeSelectElement.append(optionElement) + + lotOccupantTypeCopySelectElement.append(optionElement.cloneNode(true)) + } + + ;( + modalElement.querySelector( + '#lotOccupancyOccupantAdd--occupantCity' + ) as HTMLInputElement + ).value = exports.occupantCityDefault + ;( + modalElement.querySelector( + '#lotOccupancyOccupantAdd--occupantProvince' + ) as HTMLInputElement + ).value = exports.occupantProvinceDefault + }, + onshown: (modalElement, closeModalFunction) => { + bulmaJS.toggleHtmlClipped() + bulmaJS.init(modalElement) + + const lotOccupantTypeIdElement = modalElement.querySelector( + '#lotOccupancyOccupantAdd--lotOccupantTypeId' + ) as HTMLSelectElement + + lotOccupantTypeIdElement.focus() + + lotOccupantTypeIdElement.addEventListener('change', () => { + let occupantCommentTitle = + lotOccupantTypeIdElement.selectedOptions[0].dataset + .occupantCommentTitle ?? '' + + if (occupantCommentTitle === '') { + occupantCommentTitle = 'Comment' + } + + modalElement.querySelector( + '#lotOccupancyOccupantAdd--occupantCommentTitle' + )!.textContent = occupantCommentTitle + }) + + addFormElement = modalElement.querySelector( + '#form--lotOccupancyOccupantAdd' + ) as HTMLFormElement + addFormElement.addEventListener('submit', addOccupantFromForm) + + searchResultsElement = modalElement.querySelector( + '#lotOccupancyOccupantCopy--searchResults' + ) as HTMLElement + + searchFormElement = modalElement.querySelector( + '#form--lotOccupancyOccupantCopy' + ) as HTMLFormElement + searchFormElement.addEventListener('submit', (formEvent) => { + formEvent.preventDefault() + }) + ;( + modalElement.querySelector( + '#lotOccupancyOccupantCopy--searchFilter' + ) as HTMLInputElement + ).addEventListener('change', searchOccupants) + + addCloseModalFunction = closeModalFunction + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped() + } + }) + })