Harden admin events and document deployment
This commit is contained in:
18
src/App.vue
18
src/App.vue
@@ -130,6 +130,7 @@ let facilityBackgroundTimer
|
||||
let adminToastTimer
|
||||
let parallaxFrame = 0
|
||||
let adminEvents = null
|
||||
let adminEventsReconnectTimer = 0
|
||||
|
||||
const currentMember = computed(() =>
|
||||
members.value.find((member) => member.membershipId === currentMemberId.value) || null,
|
||||
@@ -765,6 +766,9 @@ const clearSignature = () => {
|
||||
}
|
||||
|
||||
const deleteMember = async (membershipId) => {
|
||||
const member = members.value.find((item) => item.membershipId === membershipId)
|
||||
const label = member?.fullName || membershipId
|
||||
if (!window.confirm(`Delete ${label}? This removes the member, payments, and issued cards from the admin store.`)) return
|
||||
if (isAdminAuthenticated.value) {
|
||||
try {
|
||||
await fetchJson('/api/membership', {
|
||||
@@ -790,12 +794,16 @@ const refreshAdminState = async () => {
|
||||
}
|
||||
|
||||
const disconnectAdminEvents = () => {
|
||||
window.clearTimeout(adminEventsReconnectTimer)
|
||||
adminEventsReconnectTimer = 0
|
||||
if (!adminEvents) return
|
||||
adminEvents.close()
|
||||
adminEvents = null
|
||||
}
|
||||
|
||||
const connectAdminEvents = () => {
|
||||
window.clearTimeout(adminEventsReconnectTimer)
|
||||
adminEventsReconnectTimer = 0
|
||||
if (!isAdminAuthenticated.value || adminEvents || typeof EventSource === 'undefined') return
|
||||
adminEvents = new EventSource(`/api/admin/events?pubkey=${encodeURIComponent(adminUser.value)}`)
|
||||
adminEvents.addEventListener('payment-paid', async (event) => {
|
||||
@@ -810,7 +818,15 @@ const connectAdminEvents = () => {
|
||||
adminActionMessage.value = 'New member request received.'
|
||||
await refreshAdminState()
|
||||
})
|
||||
adminEvents.onerror = () => {}
|
||||
adminEvents.onerror = () => {
|
||||
if (adminEvents) {
|
||||
adminEvents.close()
|
||||
adminEvents = null
|
||||
}
|
||||
if (isAdminAuthenticated.value && !adminEventsReconnectTimer) {
|
||||
adminEventsReconnectTimer = window.setTimeout(connectAdminEvents, 3000)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const updateMemberStatus = async (membershipId, status) => {
|
||||
|
||||
Reference in New Issue
Block a user