sunrise-cms/public-typescript/mapEdit.ts

100 lines
2.9 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */
import type * as globalTypes from '../types/globalTypes'
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
;(() => {
const los = exports.los as globalTypes.LOS
const mapId = (document.querySelector('#map--mapId') as HTMLInputElement)
.value
const isCreate = mapId === ''
const mapForm = document.querySelector('#form--map') as HTMLFormElement
function updateMap(formEvent: SubmitEvent) {
formEvent.preventDefault()
cityssm.postJSON(
los.urlPrefix + '/maps/' + (isCreate ? 'doCreateMap' : 'doUpdateMap'),
mapForm,
(responseJSON: {
success: boolean
mapId?: number
errorMessage?: string
}) => {
if (responseJSON.success) {
cityssm.disableNavBlocker()
if (isCreate) {
window.location.href =
los.urlPrefix + '/maps/' + responseJSON.mapId + '/edit'
} else {
bulmaJS.alert({
message: exports.aliases.map + ' Updated Successfully',
contextualColorName: 'success'
})
}
} else {
bulmaJS.alert({
title: 'Error Updating ' + exports.aliases.map,
message: responseJSON.errorMessage || '',
contextualColorName: 'danger'
})
}
}
)
}
mapForm.addEventListener('submit', updateMap)
const inputElements = mapForm.querySelectorAll('input, select') as NodeListOf<
HTMLInputElement | HTMLSelectElement
>
for (const inputElement of inputElements) {
inputElement.addEventListener('change', cityssm.enableNavBlocker)
}
document
.querySelector('#button--deleteMap')
?.addEventListener('click', (clickEvent) => {
clickEvent.preventDefault()
function doDelete() {
cityssm.postJSON(
los.urlPrefix + '/maps/doDeleteMap',
{
mapId
},
(responseJSON: { success: boolean; errorMessage?: string }) => {
if (responseJSON.success) {
window.location.href = los.getMapURL()
} else {
bulmaJS.alert({
title: 'Error Deleting ' + exports.aliases.map,
message: responseJSON.errorMessage || '',
contextualColorName: 'danger'
})
}
}
)
}
bulmaJS.confirm({
title: 'Delete ' + exports.aliases.map,
message: `Are you sure you want to delete this ${exports.aliases.map.toLowerCase()} and all related ${exports.aliases.lots.toLowerCase()}?`,
contextualColorName: 'warning',
okButton: {
text: `Yes, Delete ${exports.aliases.map}`,
callbackFunction: doDelete
}
})
})
})()