rc-dynamic-routes
v0.1.6
Published
This library has helpers for creating dynamic route links and route paths, without hard coding
Downloads
11
Maintainers
Readme
Get dynamic links and paths
This library has helpers for creating dynamic route links and route paths, without hard coding
Preparing - generate your routes config
const relativeRoutes: IRelativeRoutesConfig = {
companies: { path: '/companies', component: () => <TestComponent name={'Companies'} /> },
company: {
parent: 'companies',
path: '/:companyId',
component: () => <TestComponent name={'Company'} />,
defaultValues: { companyId: '$defaultValue' }, // Optional, default param for companyId
},
filters: {
parent: 'company',
path: '/filters/:filterId',
component: () => <TestComponent name={'Filter'} />,
defaultValues: { filterId: '0' },
}
};
const absoluteRoutes = createAbsoluteRoutes(relativeRoutes);
// absoluteRoutes {
// companies: {
// path: "/companies",
// component: () => {…},
// },
// company: {
// parent: "companies",
// path: "/companies/:companyId",
// component: () => {…},
// defaultValue: '$defaultValue',
// },
// filters: {
// parent: 'company',
// path: '/companies/:companyId/filters/:filterId',
// component: () => {...},
// defaultValue: '0',
// }
//}
getLink - for getting route link
const link = getLink(absoluteRoutes.company, { companyId: 1 });
// result /companies/1
const link = getLink(absoluteRoutes.company);
// result /companies/$defaultValue
const link = getLink(absoluteRoutes.filters);
// result /companies/$defaultValue/filters/0
// You can pass the window.location to gathering missing params
window.location = 'http://localhost:3001/companies/1/filters/2'
const link = getLink(absoluteRoutes.filters, {}, window.location);
// result /companies/1/filters/2
// And override params
const link = getLink(absoluteRoutes.filters, { filterId: 33 }, window.location);
// result /companies/1/filters/33
getRouteParams - for getting route params from location
window.location = 'http://localhost:3001/companies/0'
const paramsFromCurrentLocation = getRouteParams({ location: window.location })
// paramsFromCurrentLocation {
// route: {
// parent: "companies",
// path: "/companies/:companyId",
// component: () => {…},
// defaultValue: '$defaultValue',
// },
// match: {
// path: "/companies/:companyId",
// url: "/companies/0",
// isExact: true,
// params: {companyId: "0"},
// }
// }
Example
function App() {
return (
<BrowserRouter>
<nav>
{Object.keys(absoluteRoutes).map(routeKey => {
const absoluteConfig = absoluteRoutes[routeKey];
return (
<NavLink
key={absoluteConfig.path}
to={getLink(absoluteConfig)}
activeClassName={'_activeClassName'}
>
{routeKey}
</NavLink>
);
})}
</nav>
<div className={'containers-wrapper'}>
{Object.keys(absoluteRoutes).map(routeKey => {
const { path, component } = absoluteRoutes[routeKey];
return <Route key={path} path={path} component={component} />;
})}
</div>
</BrowserRouter>
);
}