diff --git a/src/components/experiments/ExperimentCard.tsx b/src/components/experiments/ExperimentCard.tsx
index a9f9cb7..7f583cd 100644
--- a/src/components/experiments/ExperimentCard.tsx
+++ b/src/components/experiments/ExperimentCard.tsx
@@ -7,11 +7,16 @@ import {
Text,
CardHeader,
Divider,
- Box,
+ Spinner,
+ AspectRatio,
} from "@chakra-ui/react";
import { RiFlaskLine } from "react-icons/ri";
import { formatTimePast } from "~/utils/dayjs";
+import Link from "next/link";
import { useRouter } from "next/router";
+import { BsPlusSquare } from "react-icons/bs";
+import { api } from "~/utils/api";
+import { useHandledAsyncCallback } from "~/utils/hooks";
type ExperimentData = {
testScenarioCount: number;
@@ -24,24 +29,17 @@ type ExperimentData = {
};
export const ExperimentCard = ({ exp }: { exp: ExperimentData }) => {
- const router = useRouter();
return (
- {
- e.preventDefault();
- void router.push({ pathname: "/experiments/[id]", query: { id: exp.id } }, undefined, {
- shallow: true,
- });
- }}
+ href={{ pathname: "/experiments/[id]", query: { id: exp.id } }}
>
-
+
{exp.label}
@@ -52,19 +50,19 @@ export const ExperimentCard = ({ exp }: { exp: ExperimentData }) => {
-
- Created {formatTimePast(exp.createdAt)}
+
+ Created {formatTimePast(exp.createdAt)}
- Updated {formatTimePast(exp.updatedAt)}
+ Updated {formatTimePast(exp.updatedAt)}
-
+
);
};
const CountLabel = ({ label, count }: { label: string; count: number }) => {
return (
-
+
{label}
@@ -74,3 +72,26 @@ const CountLabel = ({ label, count }: { label: string; count: number }) => {
);
};
+
+export const NewExperimentCard = () => {
+ const router = useRouter();
+ const utils = api.useContext();
+ const createMutation = api.experiments.create.useMutation();
+ const [createExperiment, isLoading] = useHandledAsyncCallback(async () => {
+ const newExperiment = await createMutation.mutateAsync({ label: "New Experiment" });
+ await router.push({ pathname: "/experiments/[id]", query: { id: newExperiment.id } });
+ }, [createMutation, router]);
+
+ return (
+
+
+
+
+
+ New Experiment
+
+
+
+
+ );
+};
diff --git a/src/components/experiments/NewExperimentButton.tsx b/src/components/experiments/NewExperimentButton.tsx
deleted file mode 100644
index 4478a57..0000000
--- a/src/components/experiments/NewExperimentButton.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Icon, Button, Spinner, Text, type ButtonProps } from "@chakra-ui/react";
-import { api } from "~/utils/api";
-import { useRouter } from "next/router";
-import { BsPlusSquare } from "react-icons/bs";
-import { useHandledAsyncCallback } from "~/utils/hooks";
-
-export const NewExperimentButton = (props: ButtonProps) => {
- const router = useRouter();
- const utils = api.useContext();
- const createMutation = api.experiments.create.useMutation();
- const [createExperiment, isLoading] = useHandledAsyncCallback(async () => {
- const newExperiment = await createMutation.mutateAsync({ label: "New Experiment" });
- await utils.experiments.list.invalidate();
- await router.push({ pathname: "/experiments/[id]", query: { id: newExperiment.id } });
- }, [createMutation, router]);
-
- return (
-
- );
-};
diff --git a/src/pages/experiments/index.tsx b/src/pages/experiments/index.tsx
index cb2702b..c268b04 100644
--- a/src/pages/experiments/index.tsx
+++ b/src/pages/experiments/index.tsx
@@ -13,8 +13,7 @@ import {
import { RiFlaskLine } from "react-icons/ri";
import AppShell from "~/components/nav/AppShell";
import { api } from "~/utils/api";
-import { NewExperimentButton } from "~/components/experiments/NewExperimentButton";
-import { ExperimentCard } from "~/components/experiments/ExperimentCard";
+import { ExperimentCard, NewExperimentCard } from "~/components/experiments/ExperimentCard";
import { signIn, useSession } from "next-auth/react";
export default function ExperimentsPage() {
@@ -45,7 +44,7 @@ export default function ExperimentsPage() {
return (
-
+
@@ -53,9 +52,9 @@ export default function ExperimentsPage() {
-
+
{experiments?.data?.map((exp) => )}
diff --git a/src/server/api/routers/experiments.router.ts b/src/server/api/routers/experiments.router.ts
index 02931e8..9141847 100644
--- a/src/server/api/routers/experiments.router.ts
+++ b/src/server/api/routers/experiments.router.ts
@@ -25,7 +25,7 @@ export const experimentsRouter = createTRPCRouter({
},
},
orderBy: {
- sortIndex: "asc",
+ sortIndex: "desc",
},
});
diff --git a/src/utils/dayjs.ts b/src/utils/dayjs.ts
index 5f1c606..2425333 100644
--- a/src/utils/dayjs.ts
+++ b/src/utils/dayjs.ts
@@ -5,16 +5,5 @@ import relativeTime from "dayjs/plugin/relativeTime";
dayjs.extend(duration);
dayjs.extend(relativeTime);
-export const formatTimePast = (date: Date) => {
- const now = dayjs();
- const dayDiff = Math.floor(now.diff(date, "day"));
- if (dayDiff > 0) return dayjs.duration(-dayDiff, "days").humanize(true);
-
- const hourDiff = Math.floor(now.diff(date, "hour"));
- if (hourDiff > 0) return dayjs.duration(-hourDiff, "hours").humanize(true);
-
- const minuteDiff = Math.floor(now.diff(date, "minute"));
- if (minuteDiff > 0) return dayjs.duration(-minuteDiff, "minutes").humanize(true);
-
- return "a few seconds ago";
-};
+export const formatTimePast = (date: Date) =>
+ dayjs.duration(dayjs(date).diff(dayjs())).humanize(true);