diff --git a/frontend/src/context/event-context.tsx b/frontend/src/context/event-context.tsx index 459e868..c70a3ee 100644 --- a/frontend/src/context/event-context.tsx +++ b/frontend/src/context/event-context.tsx @@ -28,16 +28,19 @@ import { // Events context state interface interface EventsContextState { // Query access methods + event: EventResponse | undefined; userEvents: PaginatedResponseEventResponse | undefined; upcomingEvents: PaginatedResponseEventResponse | undefined; publicEvents: PaginatedResponseEventResponse | undefined; isLoadingUserEvents: boolean; isLoadingUpcomingEvents: boolean; isLoadingPublicEvents: boolean; + isLoadingEvent: boolean; // Single event methods getEvent: (id: string) => Promise; getEventBySlug: (slug: string) => Promise; + fetchEventBySlug: (slug: string) => void; // Mutation methods createEvent: (event: EventCreate) => Promise; @@ -55,19 +58,23 @@ interface EventsContextState { isUpdating: boolean; isDeleting: boolean; error: Error | null; + eventError: Error | null; } // Default context state const defaultEventsState: EventsContextState = { + event: undefined, userEvents: undefined, upcomingEvents: undefined, publicEvents: undefined, isLoadingUserEvents: false, isLoadingUpcomingEvents: false, isLoadingPublicEvents: false, + isLoadingEvent: false, getEvent: async () => undefined, getEventBySlug: async () => undefined, + fetchEventBySlug: () => {}, createEvent: async () => { throw new Error("EventsProvider not initialized"); @@ -88,6 +95,7 @@ const defaultEventsState: EventsContextState = { isUpdating: false, isDeleting: false, error: null, + eventError: null, }; // Create context @@ -112,6 +120,20 @@ export const EventsProvider: React.FC = ({ children }) => { const queryClient = useQueryClient(); const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); + const [currentSlug, setCurrentSlug] = useState(null); + + const { + data: event, + isLoading: isLoadingEvent, + error: eventError, + } = useQuery({ + ...getEventBySlugOptions({ path: { slug: currentSlug || "" } }), + enabled: !!currentSlug, + }); + + const fetchEventBySlug = useCallback((slug: string) => { + setCurrentSlug(slug); + }, []); // Query options with pagination const paginationParams = { @@ -229,15 +251,18 @@ export const EventsProvider: React.FC = ({ children }) => { // Context value const value: EventsContextState = { + event, userEvents, upcomingEvents, publicEvents, isLoadingUserEvents, isLoadingUpcomingEvents, isLoadingPublicEvents, + isLoadingEvent, getEvent, getEventBySlug, + fetchEventBySlug, createEvent, updateEvent, @@ -252,6 +277,7 @@ export const EventsProvider: React.FC = ({ children }) => { isUpdating: updateEventMutationHook.isPending, isDeleting: deleteEventMutationHook.isPending, error, + eventError, }; return (