bananas-commerce-admin
Version:
What's this, an admin for apes?
42 lines • 1.81 kB
JavaScript
import React, { useMemo } from "react";
import TabList from "@mui/lab/TabList";
import { useUser } from "../contexts/UserContext";
import { hasAccess } from "../util/has_access";
import { usePage } from "./Page";
import { Tab } from "./Tab";
export const Tabs = ({ onChange, data, children, scrollButtons = "auto", variant = "scrollable", sx: passedSx, ...props }) => {
const page = usePage();
const { user } = useUser();
const sx = useMemo(() => ({
display: "flex",
pl: 3,
transform: "translateY(1px)",
".MuiTabs-flexContainer": {
gap: 3,
height: "100%",
},
...passedSx,
}), [passedSx]);
const handleTabChange = (_, newTab) => {
page.changeTab(newTab);
if (onChange != null) {
onChange(newTab);
}
};
return (React.createElement(TabList, { scrollButtons: scrollButtons, sx: sx, variant: variant, onChange: handleTabChange, ...props },
children,
page.contrib
.filter((operation) => operation.method === "GET" && operation.component?.variant === "tab")
.map((operation) => {
if (operation.component?.predicate && data && !operation.component?.predicate(data)) {
return null;
}
if (!hasAccess(user, operation.component?.permission, operation.component?.group)) {
return null;
}
const value = operation.id.match(/\w+\.contrib:(?<name>.+)/)?.groups?.name;
const Icon = operation.component?.icon;
return (value && (React.createElement(Tab, { key: operation.id, icon: Icon && React.createElement(Icon, null), label: operation.component?.title ?? value, value: value })));
})));
};
//# sourceMappingURL=Tabs.js.map