// DynamicRouter.tsx
import React from 'react'
import { Routes, Route, Navigate, useLocation } from 'react-router-dom'
import { mapCustomComponentRoutes, mapDynamicRoutes } from './dynamicRouteLoader'
import { useDynamicRoutes } from './dynamicRoutesContext'
import { useComponents } from '@/contexts/ComponentContext'
import ProtectedRoute from '@/components/route/ProtectedRoute'
import PermissionGuard from '@/components/route/PermissionGuard'
import PageContainer from '@/components/template/PageContainer'
import { ROUTES_ENUM } from './route.constant'
import { hasSubdomain } from '@/utils/subdomain'
// AccessDenied ve NotFound'u dinamiklikten çıkarıyoruz
const AccessDenied = React.lazy(() => import('@/views/AccessDenied'))
const NotFound = React.lazy(() => import('@/views/NotFound'))
const DatabaseSetup = React.lazy(() => import('@/views/setup/DatabaseSetup'))
const RootRedirect = () => {
const location = useLocation()
const searchParams = new URLSearchParams(location.search)
const isPasswordResetLink = searchParams.has('userId') && searchParams.has('resetToken')
return (
)
}
const LegacyPasswordResetRedirect = () => {
const location = useLocation()
return
}
const LegacyEmailConfirmationRedirect = () => {
const location = useLocation()
return
}
export const DynamicRouter: React.FC = () => {
const { routes, loading, error } = useDynamicRoutes()
const { components, registeredComponents, renderComponent, isComponentRegistered } =
useComponents()
const location = useLocation()
const dynamicRoutes = React.useMemo(
() => [
...mapDynamicRoutes(routes),
...mapCustomComponentRoutes(components),
],
[routes, components],
)
// /setup path'inde loading bekleme — setup route her zaman erişilebilir olmalı
if (loading && location.pathname !== '/setup') return
Loading...
if (error && location.pathname !== '/setup') return Hata: {error}
return (
{/* ADMIN */}
}>
{dynamicRoutes
.filter((r) => r.routeType === 'protected')
.map((route) => {
const Component = route.getComponent(
registeredComponents,
renderComponent,
isComponentRegistered,
)
return (
Loading {route.path}...}>
}
/>
)
})}
{/* admin default */}
} />
{/* admin access denied (statik) */}
Loading...}>
}
/>
{/* admin not found (statik) */}
Loading...}>
}
/>
{/* Auth/Public dinamik rotalar */}
{dynamicRoutes
.filter((r) =>
hasSubdomain() ? r.routeType === 'authenticated' : r.routeType !== 'protected',
)
.map((route) => {
const Component = route.getComponent(
registeredComponents,
renderComponent,
isComponentRegistered,
)
return (
Loading {route.path}...}>
}
/>
)
})}
{/* root redirect */}
} />
} />
} />
{/* public access denied (statik) */}
Loading...}>
}
/>
{/* public not found (statik) */}
Loading...}>
}
/>
{/* İlk kurulum — veritabanı mevcut değilse gösterilir */}
Loading...}>
}
/>
)
}