Component layout
compute.tsx
is used for saving all the routes related configuration. And it is get imported in module.tsx
.
├── src
│ ├── assets
│ │ └── images
│ │ ├── bank_account_helper.png
│ │ ├── paypal_logo.png
│ │ └── stripe_logo.png
│ ├── contianers
│ │ ├── Billing
│ │ │ ├── Billing.tsx
│ ├── compute.tsx
│ ├── constants
│ ├── index.tsx
│ ├── module.tsx
compute.tsx
export const basePath = '/o/:orgName/usermenu';
export const modulePath = `${basePath}/billing`;
const billingPageStore = [
// this would define the parent menu position of the billing menus
{
key: 'user-menu',
name: 'User Menu',
tab: 'User Menu',
path: basePath,
position: IMenuPosition.BOTTOM,
exact: false,
},
// this would define the submenu's parent of Billing
{
key: 'billing',
name: 'Billing',
tab: 'Billing',
path: modulePath,
auth: true,
exact: false,
authority: [IPreDefineBillingPermissions.viewSubscriptions],
component: React.lazy(() => import('./components/billing-tab')),
},
{
name: 'Home',
key: 'home',
tab: 'Home',
auth: true,
path: `${modulePath}/home`,
component: Home,
authority: [IPreDefineBillingPermissions.viewSubscriptions],
},
]
// add the `key` that you want to use in `routeConfig`
const selectedRoutes = ['billing', 'home', 'user-menu'];
const filteredBillingRoutes: IMappedData[] = getFilteredRoutes(billingPageStore, selectedRoutes);
export const filteredRoutes: IMappedData[] = [
...filteredBillingRoutes,
];
module.tsx
import { Feature } from '@common-stack/client-react';
import { filteredRoutes } from './compute';
export const repository = new Feature({
routeConfig: filteredRoutes,
...
});
Routing Security
If the routes need a login user, set auth: true
.
example
{
name: 'Home',
key: 'home',
tab: 'Home',
auth: true,
...
},
Under the hood it uses authWrapper
set in the Feature.authWrapper
.
Routing permissions
If permssions are configured in the backend, you can restrict the URL based on the permission by setting authority
.
example
{
key: 'billing',
name: 'Billing',
...
authority: [IPreDefineBillingPermissions.viewSubscriptions],
component: React.lazy(() => import('./components/billing-tab')),
},