Routing and Menu
Routing is based on well-known React Router library. The React client has a single point (src/routing.ts
) to define the screens that will be automatically placed in the main menu:
menuItems.push({
pathPattern: '/pets', // pattern may be used to consume some parameters, e.g.: /pets/:petId?
menuLink: '/pets',
component: PetBrowser, // component to be rendered, should be imported in `routes.ts`
caption: 'Pets' // Menu item caption
});
The src/App.tsx
contains Switch
component that renders a screen depending on the URL path:
<Switch>
<Route exact={true} path="/" component={HomePage}/>
{collectRouteItems(menuItems).map(route => ( // get all routes from main and sub menus
<Route key={route.pathPattern} path={route.pathPattern} component={route.component}/>
)}
</Switch>
You can manually add a Route
to the Switch
component or customize the structure used in routes.ts
for example in order to create a hierarchical menu.
Sub Menus
To create a hierarchical menu you need to create a SubMenu
instance in routes.ts
and add it to the menuItems
.
// This is RouteItem object that we want to see in User Settings sub menu
const userProfileRouteItem = {
pathPattern: "/profile",
menuLink: "/profile",
component: UserProfile,
caption: "UserProfile"
};
// SubMenu
const userSettingsSubMenu = {
caption: 'UserSettings', // add router.UserSettings key to src/i18n/en.json for valid caption
items: [userProfileRouteItem]};
// Add sub menu to menu config
menuItems.push(userSettingsSubMenu);
Sub menus can have unlimited nesting. One sub menu could be used as an item in another.