import React from "react"
import { Route, Routes } from "react-router-dom"
import { useRoutes } from "../../../providers/route-provider"
import { Route as AdminRoute, RouteSegment } from "../../../types/extensions"
import { isRoute } from "../../../utils/extensions"
import RouteErrorElement from "./route-error-element"
import { useRouteContainerProps } from "./use-route-container-props"
type RouteContainerProps = {
route: AdminRoute | RouteSegment
previousPath?: string
}
const RouteContainer = ({ route, previousPath = "" }: RouteContainerProps) => {
const routeContainerProps = useRouteContainerProps()
const isFullRoute = isRoute(route)
const { path } = route
const { getNestedRoutes } = useRoutes()
const fullPath = `${previousPath}${path}`
const nestedRoutes = getNestedRoutes(fullPath)
const hasNestedRoutes = nestedRoutes.length > 0
/**
* If the route is only a segment, we need to render the nested routes that
* are children of the segment. If the segment has no nested routes, we
* return null.
*/
if (!isFullRoute) {
if (hasNestedRoutes) {
return (
{nestedRoutes.map((r, i) => (
}
/>
))}
)
}
return null
}
const { Page, origin } = route
const PageWithProps = React.createElement(Page, routeContainerProps)
if (!hasNestedRoutes) {
return PageWithProps
}
return (
<>
}
/>
{nestedRoutes.map((r, i) => (
}
/>
))}
>
)
}
export default RouteContainer