-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathBreadcrumbs.js
More file actions
93 lines (86 loc) · 2.01 KB
/
Copy pathBreadcrumbs.js
File metadata and controls
93 lines (86 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// @flow
import * as React from "react";
import { Link as RouterLink } from "react-router-dom";
import { makeStyles } from "rex-ui/Theme";
import * as mui from "@material-ui/core";
import { type Breadcrumb } from "./Route";
let useStyles = makeStyles(theme => {
return {
root: {
backgroundColor: "#FFFFFF",
padding: theme.spacing(),
},
ol: {
display: "flex",
flexWrap: "wrap",
alignItems: "center",
padding: "0 16px",
margin: 0,
listStyle: "none",
},
separator: {
display: "flex",
userSelect: "none",
marginLeft: 8,
marginRight: 8,
},
};
});
type BreadcrumbsProps = {|
breadcrumbs: Array<Breadcrumb>,
separator?: string,
|};
function Link({ crumb, isLast }: {| crumb: Breadcrumb, isLast?: boolean |}) {
return isLast ? (
<mui.Typography color="textPrimary">{crumb.title}</mui.Typography>
) : (
<mui.Link component={RouterLink} color="inherit" to={crumb.path}>
{crumb.title}
</mui.Link>
);
}
function withSeparators(
breadcrumbs: Breadcrumb[],
className,
separator,
): Array<React.Node> {
return breadcrumbs.reduce((acc, current, index, breadcrumbs) => {
if (index < breadcrumbs.length - 1) {
acc = acc.concat(
<li key={current.path}>
<Link crumb={current} />
</li>,
<li aria-hidden key={`separator-${index}`} className={className}>
{separator}
</li>,
);
} else {
acc.push(
<li key={current.path}>
<Link crumb={current} isLast />
</li>,
);
}
return acc;
}, []);
}
export function Breadcrumbs({
breadcrumbs,
separator = "/",
}: BreadcrumbsProps) {
let classes = useStyles();
if (breadcrumbs.length <= 1) {
return null;
}
return (
<mui.Typography
component="nav"
color="textSecondary"
className={classes.root}
>
<ol className={classes.ol}>
{withSeparators(breadcrumbs, classes.separator, separator)}
</ol>
</mui.Typography>
);
}