-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.tsx
100 lines (92 loc) · 2.73 KB
/
index.tsx
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
94
95
96
97
98
99
100
import React from "react";
import {
VersionItem,
TestStats,
ConformanceState,
} from "@site/src/components/conformance/types";
import {
createState,
mapToTestStats,
} from "@site/src/components/conformance/utils";
import { useHistory } from "@docusaurus/router";
import Heading from "@theme/Heading";
import styles from "./styles.module.css";
interface BannerProps {
focusItems: VersionItem[];
}
export default function ConformanceHeroBanner(props: BannerProps): JSX.Element {
return (
<div className={styles.bannerSection}>
{props.focusItems.map((item) => {
return <BannerCard key={item.tagName} item={item} />;
})}
</div>
);
}
function BannerCard(props) {
const [stats, setStats] = React.useState<TestStats | null>(null);
const history = useHistory<ConformanceState>();
React.useEffect(() => {
const fetchStats = async () => {
const response = await fetch(props.item.fetchUrl);
const results = await response.json();
return results.r.a;
};
fetchStats().then((data) => setStats(mapToTestStats(data)));
}, []);
return (
<div className={styles.cardContainer}>
<div className="card">
<div className="card__header">
{props.item.tagName === "main" ? (
<Heading as="h3">main Branch Results</Heading>
) : (
<Heading as="h3">
{"Release " + props.item.tagName + " Results"}
</Heading>
)}
</div>
{stats ? (
<div className="card__body">
<div>
<span>{"Total: " + stats.total}</span>
</div>
<div>
<span style={{ color: "var(--ifm-color-success)" }}>
{"Passed: " + stats.passed}
</span>
</div>
<div>
<span style={{ color: "var(--ifm-color-warning)" }}>
{"Ignored: " + stats.ignored}
</span>
</div>
<div>
<span style={{ color: "var(--ifm-color-danger)" }}>
{"Failed: " + (stats.total - stats.passed - stats.ignored)}
</span>
</div>
<div>
<span style={{ color: "var(--ifm-color-danger)" }}>
{"\u26A0Panics: " + stats.panic + "\u26A0"}
</span>
</div>
</div>
) : null}
<div className="card__footer">
<button
className="button button--block button--primary"
onClick={() =>
history.push({
pathname: "/conformance",
state: createState(props.item),
})
}
>
View Results
</button>
</div>
</div>
</div>
);
}