import React from "react";
import {
Box,
createStyles,
Divider,
Drawer,
List,
ListItem,
ListItemText,
makeStyles,
Theme,
Typography
} from "@material-ui/core";
import { Link as ReactLink } from "react-router-dom";
import "firebase/analytics";
import "firebase/auth";
import "firebase/storage";
import "firebase/firestore";
import { EntityCollection } from "./models";
import { addInitialSlash, buildCollectionPath } from "./routes/navigation";
import { AdditionalView } from "./CMSAppProps";
const drawerWidth = 240;
const useStyles = makeStyles((theme: Theme) =>
createStyles({
logo: {
padding: theme.spacing(3),
maxWidth: drawerWidth
},
drawerPaper: {
width: drawerWidth,
// letterSpacing: "1px"
}
})
);
interface CMSDrawerProps {
logo: string | undefined,
navigation: EntityCollection[],
drawerOpen: boolean,
closeDrawer: () => any,
additionalViews: AdditionalView[] | undefined;
}
interface NavigationEntry {
url: string;
name: string;
group?: string;
}
export function CMSDrawer({ logo, navigation, closeDrawer, drawerOpen, additionalViews }: CMSDrawerProps) {
const classes = useStyles();
const navigationEntries: NavigationEntry[] = [
...navigation.map(view => ({
url: buildCollectionPath(view),
name: view.name,
group: view.group
})),
...(additionalViews ?? []).map(additionalView => ({
url: addInitialSlash(additionalView.path),
name: additionalView.name,
group: additionalView.group
}))
];
const groups: string[] = Array.from(new Set(
Object.values(navigationEntries).map(e => e.group).filter(Boolean) as string[]
).values());
const ungroupedNavigationViews: NavigationEntry[] = Object.values(navigationEntries).filter(e => !e.group);
function createNavigationEntry(index: number, group: string, entry: NavigationEntry) {
return
;
}
return
{logo &&
}
{ungroupedNavigationViews.map((view, index) => createNavigationEntry(index, "none", view))}
{groups.map((group) => (
{group.toUpperCase()}
{Object.values(navigationEntries)
.filter(e => e.group === group)
.map((view, index) => createNavigationEntry(index, group, view))}
))}
;
}