Skip to content

Commit 7e226e9

Browse files
committed
More work on home page
1 parent 9d8ee4d commit 7e226e9

File tree

8 files changed

+358
-262
lines changed

8 files changed

+358
-262
lines changed

src/Feature/index.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import React, { isValidElement, useContext } from "react";
2+
import useBaseUrl from "@docusaurus/useBaseUrl";
3+
import classnames from "classnames";
4+
5+
import styles from "../pages/styles.module.css";
6+
7+
const FeatureSideContext = React.createContext(false);
8+
9+
export function FeatureList(props: { children: React.ReactNode }): JSX.Element {
10+
return (
11+
<>
12+
{React.Children.map(props.children, (child, index) => {
13+
return (
14+
<FeatureSideContext.Provider value={index % 2 === 0}>
15+
<div className="row">{child}</div>
16+
</FeatureSideContext.Provider>
17+
);
18+
})}
19+
</>
20+
);
21+
}
22+
23+
export function Feature(props: { children: React.ReactNode }): JSX.Element {
24+
const sideContext = useContext(FeatureSideContext);
25+
26+
const children = React.Children.toArray(props.children);
27+
28+
const describer = children.filter(
29+
(x) => isValidElement(x) && x.type === Feature.Describer
30+
)[0];
31+
const visual = children.filter(
32+
(x) => isValidElement(x) && x.type === Feature.Visual
33+
)[0];
34+
35+
if (sideContext.valueOf()) {
36+
return (
37+
<>
38+
<div className={classnames("col", "col--6")}>{describer}</div>
39+
<div className={classnames("col", "col--6")}>{visual}</div>
40+
</>
41+
);
42+
} else {
43+
return (
44+
<>
45+
<div className={classnames("col", "col--6")}>{visual}</div>
46+
<div className={classnames("col", "col--6", styles.reorder)}>
47+
{describer}
48+
</div>
49+
</>
50+
);
51+
}
52+
}
53+
54+
Feature.Describer = function (props: {
55+
children: React.ReactNode;
56+
}): JSX.Element {
57+
return <>{props.children}</>;
58+
};
59+
60+
Feature.Visual = function (props: {
61+
children?: React.ReactNode;
62+
imageUrl?: string;
63+
}): JSX.Element {
64+
if (props.imageUrl !== undefined) {
65+
return (
66+
<a href={useBaseUrl(props.imageUrl)} target="_blank">
67+
<img
68+
src={useBaseUrl(props.imageUrl)}
69+
className={classnames(styles.featureImage)}
70+
/>
71+
</a>
72+
);
73+
} else {
74+
return <>{props.children}</>;
75+
}
76+
};

0 commit comments

Comments
 (0)