/** @jsx jsx */
import { useCallback, useMemo, useState } from "react";
import { useStaticQuery, graphql, withPrefix } from "gatsby";
import { jsx } from "theme-ui";
import SidebarContent from "../../sidebar.mdx";
import Branding from "./Branding";
import Link from "../Link";
import Item, { isItemActive } from "./Item";
import { getActiveItem, getActiveItemParentLinks, getItems } from "./utils";
const setOpenItems = (state, items) => {
for (const item of items) {
if (item.items) {
state.openItems[item.link] =
isItemActive(state.activeItemParentLinks, item) ||
withPrefix(state.activeItem.link) === item.link;
setOpenItems(state, item.items);
}
}
};
function Sidebar({ children, sidebar, open = true, location }) {
const { site } = useStaticQuery(graphql`
query {
site {
pathPrefix
}
}
`);
const items = useMemo(() => getItems(children, site.pathPrefix), [
children,
site.pathPrefix
]);
const [{ openItems, activeItem, activeItemParentLinks }, setState] = useState(
() => {
const activeItem = getActiveItem(items, location);
const state = {
openItems: {},
activeItem,
activeItemParentLinks: getActiveItemParentLinks(items, activeItem, [])
};
setOpenItems(state, items);
return state;
}
);
const toggleItem = useCallback(item => {
setState(state => ({
...state,
openItems: {
...state.openItems,
[item.link]: !state.openItems[item.link]
}
}));
}, []);
return (
);
}
export default props => (
);