import React, { useEffect, useMemo } from "react";
import Content from "../components/Content/Content";
import Table from "../components/Table/Table";
import Chart from "../components/Chart/Chart";
import Loader from "../components/Loader/Loader";
import Link from "../components/Link/Link";
import Error from "../components/Error/Error";
import { Title } from "../components/Text/Text";
import Status, { WhySignIn } from "../components/Status/Status";
import useIssues from "../hooks/useIssues";
import useReposStore from "../hooks/useReposStore";
import useTokenStore from "../hooks/useTokenStore";
import useFirebase from "../hooks/useFirebase";
import useRouteParams from "../hooks/useRouteParams";
import addStats from "../utils/addStats";
import { Route } from "../routes";
function Milestones() {
const { signIn } = useFirebase();
const [token] = useTokenStore();
const { addRepo } = useReposStore();
const { owner, repo } = useRouteParams(Route.milestones);
// Save the repo?
useEffect(() => {
document.title = `${owner}/${repo}`;
addRepo(owner, repo);
}, [owner, repo]);
const res = useIssues([[owner, repo]]);
const { data } = res;
const milestones = useMemo(() => {
if (!data.length) {
return null;
}
// Merge them all together.
const [head, ...tail] = data;
return addStats(
tail.reduce(
(acc, m) => ({
...acc,
// TODO this should check when the first issue was closed
createdAt: m.createdAt < acc.createdAt ? m.createdAt : acc.createdAt,
dueOn: acc.dueOn
? m.dueOn
? m.dueOn > acc.dueOn
? m.dueOn
: acc.dueOn
: acc.dueOn
: m.dueOn,
issues: acc.issues.concat(m.issues),
}),
head
)
);
// All the data arrive at the same time.
}, [data.length]);
if (!token) {
return (
<>
Sign In
{" "}
to view your milestones
>
);
}
if (res.error) {
return (
);
}
if (res.loading) {
return (
);
}
// TODO?
if (!milestones) {
return null;
}
return (
{owner}/{repo}
);
}
export default Milestones;