# tableberg/1.1.5/admin/src/components/RouterProvider.jsx

Tableberg – Simple Gutenberg Table Block, version 1.1.5. 76 lines.

- Page: https://pluginprobe.com/plugins/tableberg/1.1.5/code/admin/src/components/RouterProvider.jsx
- Raw: https://pluginprobe.com/plugins/tableberg/1.1.5/raw/admin/src/components/RouterProvider.jsx
- Modified: 2026-09-16T03:30:32+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/tableberg/1.1.5/code/admin/src/components/RouterProvider.jsx#L10-L20`.

```jsx
import React, { useEffect, useMemo } from "react";
import Router from "./Router";
import routes from "../inc/routes";
import { generateRouteArray } from "../inc/Route";
import NoRouterComponentFoundError from "../inc/err/NoRouterComponentFoundError";

/**
 * RouterProvider component.
 *
 * @param {Object}   props                  component properties
 * @param {Router}   props.children         router component
 * @class
 */
function RouterProvider({ children, currentRoutePath, setCurrentRoutePath }) {
    const RouterChild = useMemo(() => {
        const Component = children?.type === Router ? children.type : null;

        if (Component === null) {
            throw new NoRouterComponentFoundError();
        }

        return Component;
    }, [currentRoutePath]);

    const generatedRoutes = useMemo(() => {
        return generateRouteArray(routes);
    }, []);

    /**
     * Parse url and set route path.
     */
    const parseRouteFromUrl = () => {
        const url = new URL(window.location.href);
        const urlRoute = url.searchParams.get("route");

        if (urlRoute) {
            setCurrentRoutePath(urlRoute);
        }
    };

    /**
     * Hook to add event listener for popstate.
     */
    useEffect(() => {
        window.addEventListener("popstate", parseRouteFromUrl);
    }, []);

    /**
     * Parse url and set route path at startup.
     */
    useEffect(() => {
        parseRouteFromUrl();
    }, []);

    /**
     * Add route path to url.
     */
    useEffect(() => {
        const url = new URL(window.location.href);
        url.searchParams.set("route", currentRoutePath);
        window.history.pushState(null, null, url.href);
    }, [currentRoutePath]);

    return (
        <RouterChild
            routes={generatedRoutes}
            currentRoutePath={currentRoutePath}
        />
    );
}

/**
 * @module RouterProvider
 */
export default RouterProvider;

```
