bananas-commerce-admin
Version:
What's this, an admin for apes?
49 lines • 2.02 kB
JavaScript
import React from "react";
import { useSearchParams } from "react-router-dom";
import TabContext from "@mui/lab/TabContext";
import { useApi } from "../contexts/ApiContext";
import { useRouter } from "../contexts/RouterContext";
const PageContext = React.createContext(undefined);
export const usePage = () => React.useContext(PageContext);
export const Page = ({ defaultTab = "default", tabSearchParam, children, }) => {
const [searchParams, setSearchParams] = useSearchParams();
const tabSearchParamName = (tabSearchParam === true ? "tab" : tabSearchParam) ?? undefined;
const initialTab = tabSearchParamName
? (searchParams.get(tabSearchParamName) ?? defaultTab)
: location.hash
? location.hash.slice(1)
: defaultTab;
const [selectedTab, setTab] = React.useState(initialTab);
const handleTabChange = (tab) => {
if (tabSearchParamName) {
// Set current tab as URL query param
if (tab != defaultTab) {
searchParams.set(tabSearchParamName, tab);
}
else {
searchParams.delete(tabSearchParamName);
}
setSearchParams(searchParams);
}
else {
// Set current tab as URL hash
const url = new URL(location.toString());
const hash = tab != defaultTab ? tab : "";
url.hash = `#${hash}`;
history.pushState({}, "", url);
}
setTab(tab);
};
const { getCurrent } = useRouter();
const { route: currentRoute } = getCurrent();
const api = useApi();
// TODO: Skip replacing once bcom contrib tabs are adjusted
const contrib = api.findContrib(currentRoute.id.replace(".", ":"));
const context = {
changeTab: handleTabChange,
contrib: contrib,
};
return (React.createElement(PageContext.Provider, { value: context },
React.createElement(TabContext, { value: selectedTab }, children)));
};
//# sourceMappingURL=Page.js.map