diff --git a/src/modules/activities/components/CreateEventDialog.vue b/src/modules/activities/components/CreateEventDialog.vue index 5f3a605..3eb5b2a 100644 --- a/src/modules/activities/components/CreateEventDialog.vue +++ b/src/modules/activities/components/CreateEventDialog.vue @@ -62,9 +62,7 @@ const formSchema = toTypedSchema(z.object({ name: z.string().min(1, "Title is required").max(200, "Title too long"), info: z.string().max(2000, "Description too long").optional().default(''), event_start_date: z.string().min(1, "Start date is required"), - event_start_time: z.string().optional().default(''), event_end_date: z.string().optional().default(''), - event_end_time: z.string().optional().default(''), location: z.string().max(500).optional().default(''), banner: z.string().optional().default(''), currency: z.string().default("sat"), @@ -78,9 +76,7 @@ const form = useForm({ name: '', info: '', event_start_date: '', - event_start_time: '', event_end_date: '', - event_end_time: '', location: '', banner: '', currency: 'sat', @@ -89,15 +85,6 @@ const form = useForm({ } }) -// Fold a date input ("YYYY-MM-DD") and an optional time input ("HH:MM") -// into the events-extension wire format: date-only when no time given, -// ISO 8601 datetime otherwise. The publisher switches NIP-52 kinds on -// the "T" delimiter. -function foldDateTime(date: string, time: string): string { - if (!date) return '' - return time ? `${date}T${time}` : date -} - const paymentService = injectService(SERVICE_TOKENS.PAYMENT_SERVICE) const ticketApi = injectService(SERVICE_TOKENS.TICKET_API) as TicketApiService | null @@ -157,21 +144,13 @@ const onSubmit = form.handleSubmit(async (formValues) => { try { const eventData: CreateEventRequest = { name: formValues.name, - event_start_date: foldDateTime( - formValues.event_start_date, - formValues.event_start_time - ), + event_start_date: formValues.event_start_date, wallet: preferredWallet.id, } // Optional fields — only include if provided if (formValues.info) eventData.info = formValues.info - if (formValues.event_end_date) { - eventData.event_end_date = foldDateTime( - formValues.event_end_date, - formValues.event_end_time - ) - } + if (formValues.event_end_date) eventData.event_end_date = formValues.event_end_date if (formValues.location) eventData.location = formValues.location if (formValues.banner) eventData.banner = formValues.banner if (formValues.currency) eventData.currency = formValues.currency @@ -228,28 +207,16 @@ const handleOpenChange = (open: boolean) => { - -
- - - Start date * - - - - - - - - - - Start time - - - - - - -
+ + + + Start date * + + + + + + @@ -362,28 +329,16 @@ const handleOpenChange = (open: boolean) => { -
- - - End date - - - - Defaults to start date - - - - - - - End time - - - - - - -
+ + + End date + + + + Defaults to start date if not set + + +
diff --git a/src/modules/activities/types/nip52.ts b/src/modules/activities/types/nip52.ts index 332d054..2a57a71 100644 --- a/src/modules/activities/types/nip52.ts +++ b/src/modules/activities/types/nip52.ts @@ -181,14 +181,6 @@ export function parseCalendarDateEvent(event: NostrEvent): CalendarDateEvent | n if (!dTag || !title || !start) return null - // NIP-52 kind 31922 requires YYYY-MM-DD. Reject anything else (including - // accidentally-published datetimes) so downstream parseIsoDate cannot - // produce an Invalid Date and crash the renderer. - const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/ - if (!ISO_DATE.test(start)) return null - const end = getTagValue(event.tags, 'end') - if (end && !ISO_DATE.test(end)) return null - const participants: Participant[] = event.tags .filter(t => t[0] === 'p') .map(t => ({ @@ -205,7 +197,7 @@ export function parseCalendarDateEvent(event: NostrEvent): CalendarDateEvent | n content: event.content, image: getTagValue(event.tags, 'image'), start, - end, + end: getTagValue(event.tags, 'end'), location: getTagValue(event.tags, 'location'), geohash: getTagValue(event.tags, 'g'), hashtags: getTagValues(event.tags, 't'), diff --git a/src/modules/activities/types/ticket.ts b/src/modules/activities/types/ticket.ts index 5384ddf..8943421 100644 --- a/src/modules/activities/types/ticket.ts +++ b/src/modules/activities/types/ticket.ts @@ -44,10 +44,6 @@ export interface TicketPaymentStatus { /** * LNbits events extension event (database-backed ticketed event). * Corresponds to the Event model in the events extension. - * - * event_start_date / event_end_date are ISO 8601 — either date-only - * ("2026-05-19") or with a time ("2026-05-19T18:30"). Presence of "T" - * switches the publisher between NIP-52 kind 31922 and 31923. */ export interface TicketedEvent { id: string diff --git a/src/modules/activities/views/EventsPage.vue b/src/modules/activities/views/EventsPage.vue index ab4feb8..0181dc1 100644 --- a/src/modules/activities/views/EventsPage.vue +++ b/src/modules/activities/views/EventsPage.vue @@ -33,10 +33,7 @@ function formatDate(dateStr: string | null | undefined) { if (!dateStr) return 'Date not available' const date = new Date(dateStr) if (isNaN(date.getTime())) return 'Invalid date' - // Presence of "T" in the wire value marks a time-based event (NIP-52 - // kind 31923 on our publisher). Show time only when one was set. - const hasTime = dateStr.includes('T') - return format(date, hasTime ? 'MMMM do, yyyy p' : 'MMMM do, yyyy') + return format(date, 'MMMM do, yyyy') } function handlePurchaseClick(event: {