Implement event creation frontend (EventCreateView)
Form with client-side validation, server error handling, aria-invalid/ aria-describedby for a11y, localStorage persistence via useEventStorage composable. Routes for /create and /events/:token. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
41
frontend/src/composables/useEventStorage.ts
Normal file
41
frontend/src/composables/useEventStorage.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
export interface StoredEvent {
|
||||
eventToken: string
|
||||
organizerToken?: string
|
||||
title: string
|
||||
dateTime: string
|
||||
expiryDate: string
|
||||
}
|
||||
|
||||
const STORAGE_KEY = 'fete:events'
|
||||
|
||||
function readEvents(): StoredEvent[] {
|
||||
try {
|
||||
const raw = localStorage.getItem(STORAGE_KEY)
|
||||
return raw ? (JSON.parse(raw) as StoredEvent[]) : []
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
function writeEvents(events: StoredEvent[]): void {
|
||||
localStorage.setItem(STORAGE_KEY, JSON.stringify(events))
|
||||
}
|
||||
|
||||
export function useEventStorage() {
|
||||
function saveCreatedEvent(event: StoredEvent): void {
|
||||
const events = readEvents().filter((e) => e.eventToken !== event.eventToken)
|
||||
events.push(event)
|
||||
writeEvents(events)
|
||||
}
|
||||
|
||||
function getStoredEvents(): StoredEvent[] {
|
||||
return readEvents()
|
||||
}
|
||||
|
||||
function getOrganizerToken(eventToken: string): string | undefined {
|
||||
const event = readEvents().find((e) => e.eventToken === eventToken)
|
||||
return event?.organizerToken
|
||||
}
|
||||
|
||||
return { saveCreatedEvent, getStoredEvents, getOrganizerToken }
|
||||
}
|
||||
Reference in New Issue
Block a user