1- import { LoaderFunctionArgs } from "react-router" ;
1+ import { LoaderFunctionArgs , redirect } from "react-router" ;
22import { getQueryClient } from "../utilites/ssrQueryClient.ts" ;
33import { getOrganizerPublicQuery } from "../queries/useGetOrganizerPublic.ts" ;
44import { getOrganizerPublicEventsQuery } from "../queries/useGetOrganizerEventsPublic.ts" ;
55import { EventStatus , QueryFilterOperator } from "../types.ts" ;
66
77export const publicOrganizerRouteLoader = async ( { params, request} : LoaderFunctionArgs ) => {
8- const { organizerId} = params ;
8+ const { organizerId, organizerSlug } = params ;
99 const url = new URL ( request . url ) ;
10+ const queryParams = new URLSearchParams ( url . search ) ;
1011 const isPastEvents = url . pathname . endsWith ( '/past-events' ) ;
1112 const pageNumber = url . searchParams . get ( 'page' ) ? parseInt ( url . searchParams . get ( 'page' ) ! ) : 1 ;
1213
@@ -17,6 +18,14 @@ export const publicOrganizerRouteLoader = async ({params, request}: LoaderFuncti
1718 try {
1819 const organizer = await getQueryClient ( ) . fetchQuery ( getOrganizerPublicQuery ( organizerId ) ) ;
1920
21+ if ( organizer && organizer . slug && organizerSlug !== organizer . slug ) {
22+ const searchString = queryParams . toString ( ) ;
23+ const pathSuffix = isPastEvents ? '/past-events' : '' ;
24+ throw redirect (
25+ `/events/${ organizer . id } /${ organizer . slug } ${ pathSuffix } ${ searchString ? `?${ searchString } ` : '' } `
26+ ) ;
27+ }
28+
2029 let filter = { } ;
2130 if ( ! isPastEvents ) {
2231 filter = {
@@ -50,6 +59,11 @@ export const publicOrganizerRouteLoader = async ({params, request}: LoaderFuncti
5059 isPastEvents
5160 } ;
5261 } catch ( error : any ) {
62+ // Re-throw redirect responses so React Router can handle them
63+ if ( error instanceof Response ) {
64+ throw error ;
65+ }
66+
5367 if ( error ?. response ?. status === 404 ) {
5468 return { organizer : null , eventsData : null , isPastEvents} ;
5569 }
0 commit comments