**What** - Renames /admin-next -> /admin - Renames @medusajs/admin-sdk -> @medusajs/admin-bundler - Creates a new package called @medusajs/admin-sdk that will hold all tooling relevant to creating admin extensions. This is currently `defineRouteConfig` and `defineWidgetConfig`, but will eventually also export methods for adding custom fields, register translation, etc. - cc: @shahednasser we should update the examples in the docs so these functions are imported from `@medusajs/admin-sdk`. People will also need to install the package in their project, as it's no longer a transient dependency. - cc: @olivermrbl we might want to publish a changelog when this is merged, as it is a breaking change, and will require people to import the `defineXConfig` from the new package instead of `@medusajs/admin-shared`. - Updates CODEOWNERS so /admin packages does not require a review from the UI team.
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { RouteObject } from "react-router-dom"
|
|
import { ErrorBoundary } from "../components/utilities/error-boundary"
|
|
|
|
/**
|
|
* Used to test if a route is a settings route.
|
|
*/
|
|
export const settingsRouteRegex = /^\/settings\//
|
|
|
|
export const createRouteMap = (
|
|
routes: { path: string; Component: () => JSX.Element }[],
|
|
ignore?: string
|
|
): RouteObject[] => {
|
|
const root: RouteObject[] = []
|
|
|
|
const addRoute = (
|
|
pathSegments: string[],
|
|
Component: () => JSX.Element,
|
|
currentLevel: RouteObject[]
|
|
) => {
|
|
if (!pathSegments.length) {
|
|
return
|
|
}
|
|
|
|
const [currentSegment, ...remainingSegments] = pathSegments
|
|
let route = currentLevel.find((r) => r.path === currentSegment)
|
|
|
|
if (!route) {
|
|
route = { path: currentSegment, children: [] }
|
|
currentLevel.push(route)
|
|
}
|
|
|
|
if (remainingSegments.length === 0) {
|
|
route.children ||= []
|
|
route.children.push({
|
|
path: "",
|
|
ErrorBoundary: ErrorBoundary,
|
|
async lazy() {
|
|
return { Component }
|
|
},
|
|
})
|
|
} else {
|
|
route.children ||= []
|
|
addRoute(remainingSegments, Component, route.children)
|
|
}
|
|
}
|
|
|
|
routes.forEach(({ path, Component }) => {
|
|
// Remove the ignore segment from the path if it is provided
|
|
const cleanedPath = ignore
|
|
? path.replace(ignore, "").replace(/^\/+/, "")
|
|
: path.replace(/^\/+/, "")
|
|
const pathSegments = cleanedPath.split("/").filter(Boolean)
|
|
addRoute(pathSegments, Component, root)
|
|
})
|
|
|
|
return root
|
|
}
|