rc-dymanic-routes

0.1.2 • Public • Published

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>
    );
}

Package Sidebar

Install

npm i rc-dymanic-routes

Weekly Downloads

1

Version

0.1.2

License

none

Unpacked Size

11.6 kB

Total Files

12

Last publish

Collaborators

  • mallchel