/* eslint-disable @typescript-eslint/indent */ /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import type * as globalTypes from '../../types/globalTypes' import type * as recordTypes from '../../types/recordTypes' import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types' import type { BulmaJS } from '@cityssm/bulma-js/types' declare const cityssm: cityssmGlobal declare const bulmaJS: BulmaJS declare const los: globalTypes.LOS declare const refreshFontAwesomeIcon: (changeEvent: Event) => void let lotOccupantTypes: recordTypes.LotOccupantType[] = exports.lotOccupantTypes delete exports.lotOccupantTypes type ResponseJSON = | { success: true lotOccupantTypes: recordTypes.LotOccupantType[] } | { success: false errorMessage: string } function updateLotOccupantType(submitEvent: SubmitEvent): void { submitEvent.preventDefault() cityssm.postJSON( los.urlPrefix + '/admin/doUpdateLotOccupantType', submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON if (responseJSON.success) { lotOccupantTypes = responseJSON.lotOccupantTypes! bulmaJS.alert({ message: `${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type Updated Successfully`, contextualColorName: 'success' }) } else { bulmaJS.alert({ title: `Error Updating ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, message: responseJSON.errorMessage ?? '', contextualColorName: 'danger' }) } } ) } function deleteLotOccupantType(clickEvent: Event): void { const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest( 'tr' )! const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId function doDelete(): void { cityssm.postJSON( los.urlPrefix + '/admin/doDeleteLotOccupantType', { lotOccupantTypeId }, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON if (responseJSON.success) { lotOccupantTypes = responseJSON.lotOccupantTypes! if (lotOccupantTypes.length === 0) { renderLotOccupantTypes() } else { tableRowElement.remove() } bulmaJS.alert({ message: `${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type Deleted Successfully`, contextualColorName: 'success' }) } else { bulmaJS.alert({ title: `Error Deleting ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, message: responseJSON.errorMessage ?? '', contextualColorName: 'danger' }) } } ) } bulmaJS.confirm({ title: `Delete ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, message: `Are you sure you want to delete this ${los.escapedAliases.lot} ${los.escapedAliases.occupant} type?
Note that no ${los.escapedAliases.lot} ${los.escapedAliases.occupants} will be removed.`, messageIsHtml: true, contextualColorName: 'warning', okButton: { text: `Yes, Delete ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, callbackFunction: doDelete } }) } function moveLotOccupantType(clickEvent: MouseEvent): void { const buttonElement = clickEvent.currentTarget as HTMLButtonElement const tableRowElement = buttonElement.closest('tr')! const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId cityssm.postJSON( los.urlPrefix + '/admin/' + (buttonElement.dataset.direction === 'up' ? 'doMoveLotOccupantTypeUp' : 'doMoveLotOccupantTypeDown'), { lotOccupantTypeId, moveToEnd: clickEvent.shiftKey ? '1' : '0' }, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON if (responseJSON.success) { lotOccupantTypes = responseJSON.lotOccupantTypes! renderLotOccupantTypes() } else { bulmaJS.alert({ title: `Error Moving ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, message: responseJSON.errorMessage ?? '', contextualColorName: 'danger' }) } } ) } function renderLotOccupantTypes(): void { const containerElement = document.querySelector( '#container--lotOccupantTypes' ) as HTMLTableSectionElement if (lotOccupantTypes.length === 0) { containerElement.innerHTML = `

There are no active ${los.escapedAliases.lot} ${los.escapedAliases.occupant} types.

` return } containerElement.innerHTML = '' for (const lotOccupantType of lotOccupantTypes) { const tableRowElement = document.createElement('tr') tableRowElement.dataset.lotOccupantTypeId = lotOccupantType.lotOccupantTypeId.toString() const formId = 'form--lotOccupantType-' + lotOccupantType.lotOccupantTypeId.toString() tableRowElement.innerHTML = '' + ('
' + '
' + '' + '
' + '
') + '' + '' + ('
' + '
fa-
' + '
' + '' + '
' + '
' + '
' + '
') + '' + '' + ('
' + '
' + '' + '
' + '
') + '' + ('' + ('
') + '' + '' + '
' + '') + '' + '
' + '
' + los.getMoveUpDownButtonFieldHTML( 'button--moveLotOccupantTypeUp', 'button--moveLotOccupantTypeDown', false ) + '
' + '
' + '' + '
' + '
' + '' const fontAwesomeInputElement = tableRowElement.querySelector( "input[name='fontAwesomeIconClass']" )! fontAwesomeInputElement.addEventListener('keyup', refreshFontAwesomeIcon) fontAwesomeInputElement.addEventListener('change', refreshFontAwesomeIcon) tableRowElement .querySelector('form')! .addEventListener('submit', updateLotOccupantType) ;( tableRowElement.querySelector( '.button--moveLotOccupantTypeUp' ) as HTMLButtonElement ).addEventListener('click', moveLotOccupantType) ;( tableRowElement.querySelector( '.button--moveLotOccupantTypeDown' ) as HTMLButtonElement ).addEventListener('click', moveLotOccupantType) tableRowElement .querySelector('.button--deleteLotOccupantType')! .addEventListener('click', deleteLotOccupantType) containerElement.append(tableRowElement) } } ;( document.querySelector('#form--addLotOccupantType') as HTMLFormElement ).addEventListener('submit', (submitEvent: SubmitEvent) => { submitEvent.preventDefault() const formElement = submitEvent.currentTarget as HTMLFormElement cityssm.postJSON( los.urlPrefix + '/admin/doAddLotOccupantType', formElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON if (responseJSON.success) { lotOccupantTypes = responseJSON.lotOccupantTypes! renderLotOccupantTypes() formElement.reset() formElement.querySelector('input')!.focus() } else { bulmaJS.alert({ title: `Error Adding ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, message: responseJSON.errorMessage ?? '', contextualColorName: 'danger' }) } } ) }) renderLotOccupantTypes()