diff --git a/src/modules/activities/composables/useEvents.ts b/src/modules/activities/composables/useEvents.ts index cdc5902..a67cf69 100644 --- a/src/modules/activities/composables/useEvents.ts +++ b/src/modules/activities/composables/useEvents.ts @@ -1,43 +1,14 @@ import { computed } from 'vue' import { useAsyncState } from '@vueuse/core' import { injectService, SERVICE_TOKENS } from '@/core/di-container' -import { useAuth } from '@/composables/useAuthService' import type { TicketApiService } from '../services/TicketApiService' import type { TicketedEvent } from '../types/ticket' export function useEvents() { const ticketApi = injectService(SERVICE_TOKENS.TICKET_API) as TicketApiService - const { isAuthenticated, currentUser } = useAuth() - - // When authenticated, also fetch the user's own events (any status) - // and merge them into the feed. Otherwise an event that drops to - // `proposed` after a non-admin edit disappears from the user's view - // entirely — they'd be unable to find it to make a follow-up edit or - // monitor its approval status. Public approved events from other - // users take precedence on dedup (server is the source of truth for - // the public view). - const fetchAll = async (): Promise => { - const publicEvents = (await ticketApi.fetchTicketedEvents()) as TicketedEvent[] - - if (!isAuthenticated.value) return publicEvents - - const invoiceKey = currentUser.value?.wallets?.[0]?.inkey - if (!invoiceKey) return publicEvents - - try { - const myEvents = (await ticketApi.fetchMyEvents(invoiceKey)) as TicketedEvent[] - const seen = new Set(publicEvents.map((e) => e.id)) - const own = myEvents.filter((e) => !seen.has(e.id)) - return [...publicEvents, ...own] - } catch { - // Falling back to just the public feed is acceptable — the user - // can still browse, they just won't see their own pending events. - return publicEvents - } - } const { state: events, isLoading, error: asyncError, execute: refresh } = useAsyncState( - fetchAll, + () => ticketApi.fetchTicketedEvents() as Promise, [] as TicketedEvent[], { immediate: true, diff --git a/src/modules/activities/services/TicketApiService.ts b/src/modules/activities/services/TicketApiService.ts index 64c5fdb..432771d 100644 --- a/src/modules/activities/services/TicketApiService.ts +++ b/src/modules/activities/services/TicketApiService.ts @@ -34,20 +34,6 @@ export class TicketApiService { return response } - /** - * Fetch the authenticated user's own events across all their wallets, - * regardless of status. Lets the webapp show the user's pending / - * rejected events alongside the public approved feed — without this - * a user who edits under `auto_approve=false` loses sight of their - * own event the moment it drops to `proposed`. - */ - async fetchMyEvents(invoiceKey: string): Promise { - return this.request('/events/api/v1/events?all_wallets=true', { - method: 'GET', - headers: { 'X-API-KEY': invoiceKey }, - }) - } - /** * Request a ticket purchase (creates a Lightning invoice). * Uses POST /tickets/{event_id} with user_id in body (upstream API). @@ -201,16 +187,14 @@ export class TicketApiService { } /** - * Read the extension's auto_approve flag. Hits the public probe - * (invoice-key-gated, available to any wallet holder), so non-admin - * users see the real value and the edit-flow copy is accurate. - * Degrades to `false` on failure — the safer default for warning UI. + * Read the extension's auto_approve flag. Admin-only endpoint, so + * non-admin callers see false (the safe default for UI gating). */ - async getAutoApprove(invoiceKey: string): Promise { + async getAutoApprove(adminKey: string): Promise { try { - const settings = await this.request('/events/api/v1/events/settings/public', { + const settings = await this.request('/events/api/v1/events/settings', { method: 'GET', - headers: { 'X-API-KEY': invoiceKey }, + headers: { 'X-API-KEY': adminKey }, }) return Boolean(settings?.auto_approve) } catch { diff --git a/src/modules/activities/views/EventsPage.vue b/src/modules/activities/views/EventsPage.vue index a8eefdd..2a4adac 100644 --- a/src/modules/activities/views/EventsPage.vue +++ b/src/modules/activities/views/EventsPage.vue @@ -48,13 +48,11 @@ function canEdit(event: TicketedEvent): boolean { onMounted(async () => { if (!isAuthenticated.value) return - const wallet = currentUser.value?.wallets?.[0] - if (!wallet?.inkey) return + const adminKey = currentUser.value?.wallets?.[0]?.adminkey + if (!adminKey) return const ticketApi = injectService(SERVICE_TOKENS.TICKET_API) as TicketApiService - autoApprove.value = await ticketApi.getAutoApprove(wallet.inkey) - if (wallet.adminkey) { - isAdmin.value = await ticketApi.isAdmin(wallet.adminkey) - } + isAdmin.value = await ticketApi.isAdmin(adminKey) + autoApprove.value = await ticketApi.getAutoApprove(adminKey) }) function formatDate(dateStr: string | null | undefined) { @@ -161,16 +159,7 @@ function handleEventChanged() {
-
- {{ event.name }} - - {{ event.status === 'rejected' ? 'Rejected' : 'Pending review' }} - -
+ {{ event.name }} {{ event.info }}
@@ -197,18 +186,13 @@ function handleEventChanged() {