sunrise-cms/public-typescript/mapEdit.ts

121 lines
3.4 KiB
TypeScript

// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
/* eslint-disable unicorn/prefer-module */
import type { BulmaJS } from '@cityssm/bulma-js/types.js'
import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { LOS } from '../types/globalTypes.js'
declare const cityssm: cityssmGlobal
declare const bulmaJS: BulmaJS
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const mapId = (document.querySelector('#map--mapId') as HTMLInputElement)
.value
const isCreate = mapId === ''
const mapForm = document.querySelector('#form--map') as HTMLFormElement
function setUnsavedChanges(): void {
los.setUnsavedChanges()
document
.querySelector("button[type='submit'][form='form--map']")
?.classList.remove('is-light')
}
function clearUnsavedChanges(): void {
los.clearUnsavedChanges()
document
.querySelector("button[type='submit'][form='form--map']")
?.classList.add('is-light')
}
function updateMap(formEvent: SubmitEvent): void {
formEvent.preventDefault()
cityssm.postJSON(
`${los.urlPrefix}/maps/${isCreate ? 'doCreateMap' : 'doUpdateMap'}`,
mapForm,
(rawResponseJSON) => {
const responseJSON = rawResponseJSON as {
success: boolean
mapId?: number
errorMessage?: string
}
if (responseJSON.success) {
clearUnsavedChanges()
if (isCreate) {
window.location.href = los.getMapURL(responseJSON.mapId, true)
} else {
bulmaJS.alert({
message: `${los.escapedAliases.Map} Updated Successfully`,
contextualColorName: 'success'
})
}
} else {
bulmaJS.alert({
title: `Error Updating ${los.escapedAliases.Map}`,
message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger'
})
}
}
)
}
mapForm.addEventListener('submit', updateMap)
const inputElements: NodeListOf<HTMLInputElement | HTMLSelectElement> =
mapForm.querySelectorAll('input, select')
for (const inputElement of inputElements) {
inputElement.addEventListener('change', setUnsavedChanges)
}
document
.querySelector('#button--deleteMap')
?.addEventListener('click', (clickEvent) => {
clickEvent.preventDefault()
function doDelete(): void {
cityssm.postJSON(
`${los.urlPrefix}/maps/doDeleteMap`,
{
mapId
},
(rawResponseJSON) => {
const responseJSON = rawResponseJSON as {
success: boolean
errorMessage?: string
}
if (responseJSON.success) {
window.location.href = los.getMapURL()
} else {
bulmaJS.alert({
title: `Error Deleting ${los.escapedAliases.Map}`,
message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger'
})
}
}
)
}
bulmaJS.confirm({
title: `Delete ${los.escapedAliases.Map}`,
message: `Are you sure you want to delete this ${los.escapedAliases.map} and all related ${los.escapedAliases.lots}?`,
contextualColorName: 'warning',
okButton: {
text: `Yes, Delete ${los.escapedAliases.Map}`,
callbackFunction: doDelete
}
})
})
})()