@inspectph/react-easy-router
Version:
A simple React router wrapper with protected routes, role-based access, and layout support for React apps.
128 lines (100 loc) • 3.11 kB
Markdown
//img.shields.io/npm/v/@inspectph/react-easy-router)


A simple React router wrapper with support for protected routes, role-based access, and layouts.
```bash
npm install @inspectph/react-easy-router
npm install react react-dom react-router-dom
```
- Config-driven routing
- Protected routes for authentication
- Role-based access control
- Layout support per route
- Works with React Router v6+
```tsx
// src/routes.tsx
import type { RouteConfig } from "@inspectph/react-easy-router";
import Home from "./pages/Home";
import Login from "./pages/Login";
import Dashboard from "./pages/Dashboard";
import AdminPanel from "./pages/AdminPanel";
import NotFound from "./pages/NotFound";
import DashboardLayout from "./layouts/DashboardLayout";
export const routes: RouteConfig[] = [
{ path: "/", element: <Home /> },
{ path: "/login", element: <Login /> },
{
path: "/dashboard",
element: <Dashboard />,
protected: true,
redirectTo: "/login",
layout: DashboardLayout,
},
{
path: "/admin",
element: <AdminPanel />,
protected: true,
roles: ["admin"],
redirectTo: "/dashboard",
layout: DashboardLayout,
},
{ path: "*", element: <NotFound /> },
];
```
```tsx
// src/App.tsx
import { RouterProvider } from "@inspectph/react-easy-router";
import { routes } from "./routes";
export default function App() {
const isAuthenticated = true; // replace with your auth state
const userRole = "admin"; // replace with your user role
return (
<RouterProvider
routes={routes}
isAuthenticated={isAuthenticated}
userRole={userRole}
/>
);
}
```
```tsx
// src/layouts/DashboardLayout.tsx
import React from "react";
const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({
children,
}) => {
return (
<div>
<header>Dashboard Header</header>
<main>{children}</main>
<footer>Footer</footer>
</div>
);
};
export default DashboardLayout;
```
- Visiting `/dashboard` without being authenticated redirects to `/login`.
- Visiting `/admin` as a non-admin redirects to `/dashboard`.
- `routes: RouteConfig[]` - Array of route configs
- `isAuthenticated: boolean` - Current authentication state
- `userRole?: string` - Current user role (for role-based routes)
### RouteConfig
- `path: string` - Route path
- `element: ReactNode` - Page component
- `protected?: boolean` - Marks route as protected
- `roles?: string[]` - Allowed roles for this route
- `redirectTo?: string` - Redirect path if unauthorized (default: `/login`)
- `layout?: ComponentType<{ children: ReactNode }>` - Optional layout wrapper
MIT © [Inspect](https://github.com/inspectph)
![npm version](https: