bananas-commerce-admin
Version:
What's this, an admin for apes?
55 lines • 2.4 kB
JavaScript
import React, { useEffect, useMemo } from "react";
import LinkIcon from "@mui/icons-material/Link";
import { useI18n } from "../../contexts/I18nContext";
import { useRouter } from "../../contexts/RouterContext";
import { useUser } from "../../contexts/UserContext";
import { hasGroup } from "../../util/has_group";
import { hasPermission } from "../../util/has_permission";
import { isURL } from "../../util/is_url";
import NavRailItem from "./NavRailItem";
export const NavRailRoutes = ({ navigation }) => {
const { routes, setCustomRoutes } = useRouter();
const { user } = useUser();
const { t } = useI18n();
useEffect(() => {
const newRoutes = Object.values(navigation)
.filter((entry) => Boolean(entry && entry?.route))
.map((entry) => entry.route);
setCustomRoutes(newRoutes);
}, [navigation, setCustomRoutes]);
const navItems = useMemo(() => {
const appItems = [];
for (const [routeId, navEntry] of Object.entries(navigation)) {
if (navEntry == null || navEntry === false || navEntry.hidden)
continue;
const navInfo = typeof navEntry === "object" ? navEntry : {};
if (navInfo.permission && !hasPermission(user, navInfo.permission))
continue;
if (navInfo.group && !hasGroup(user, navInfo.group))
continue;
if (navInfo.excludedGroup && hasGroup(user, navInfo.excludedGroup))
continue;
let title = navInfo.title;
let icon = navInfo.icon;
let route;
let href;
if (isURL(routeId)) {
icon ??= LinkIcon;
href = routeId;
}
else {
route = routes.find((r) => r.id === routeId);
if (route == null) {
console.warn(`No route found for navigation entry ${routeId}`);
continue;
}
title ??= route.title;
}
appItems.push(React.createElement(NavRailItem, { key: routeId, href: href, icon: icon, route: route, title: t(title ?? "Missing title") }));
}
return appItems;
}, [routes, navigation, user, t]);
return React.createElement(React.Fragment, null, navItems);
};
export default NavRailRoutes;
//# sourceMappingURL=NavRailRoutes.js.map