Skip to content

Commit 4c21f84

Browse files
committed
Compare models button behaviour improvements
1 parent 088551e commit 4c21f84

1 file changed

Lines changed: 28 additions & 16 deletions

File tree

  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index/route.tsx

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { AdjustmentsHorizontalIcon, CheckIcon, XMarkIcon } from "@heroicons/react/20/solid";
22
import { Form, type MetaFunction, useFetcher } from "@remix-run/react";
33
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
4+
import { AnimatePresence, motion } from "framer-motion";
45
import { useEffect, useMemo, useState } from "react";
56
import { typedjson, useTypedLoaderData } from "remix-typedjson";
67
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
78
import { AppliedFilter } from "~/components/primitives/AppliedFilter";
9+
import { Badge } from "~/components/primitives/Badge";
810
import { Button } from "~/components/primitives/Buttons";
911
import { Checkbox } from "~/components/primitives/Checkbox";
1012
import { DateTime } from "~/components/primitives/DateTime";
@@ -53,7 +55,7 @@ import {
5355
} from "~/utils/modelFormatters";
5456
import { formatNumberCompact } from "~/utils/numberFormatter";
5557
import { Spinner } from "~/components/primitives/Spinner";
56-
import { SimpleTooltip } from "~/components/primitives/Tooltip";
58+
5759
import { type loader as compareLoader } from "~/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models.compare/route";
5860

5961
export const meta: MetaFunction = () => {
@@ -262,21 +264,31 @@ function FiltersBar({
262264
)}
263265
</div>
264266
<div className="flex shrink-0 items-center gap-2">
265-
{compareDisabled ? (
266-
<SimpleTooltip
267-
button={
268-
<Button variant="secondary/small" disabled>
269-
Compare
270-
</Button>
271-
}
272-
content="Choose 2–4 models to compare"
273-
asChild
274-
/>
275-
) : (
276-
<Button variant="secondary/small" onClick={onCompare}>
277-
Compare ({compareSet.size})
278-
</Button>
279-
)}
267+
<Button
268+
variant="secondary/small"
269+
disabled={compareDisabled}
270+
className="px-1.5"
271+
tooltip={compareDisabled ? "Choose 2–4 models to compare" : "Compare selected models"}
272+
onClick={compareDisabled ? undefined : onCompare}
273+
>
274+
<span className="flex items-center overflow-hidden">
275+
<span className={!compareDisabled ? "text-text-bright" : undefined}>Compare</span>
276+
<AnimatePresence initial={false}>
277+
{compareSet.size >= 2 && (
278+
<motion.span
279+
key="badge"
280+
initial={{ width: 0, marginLeft: 0, opacity: 0 }}
281+
animate={{ width: "auto", marginLeft: 4, opacity: 1 }}
282+
exit={{ width: 0, marginLeft: 0, opacity: 0 }}
283+
transition={{ duration: 0.15, ease: "easeInOut" }}
284+
className="inline-flex"
285+
>
286+
<Badge variant="rounded">{compareSet.size}</Badge>
287+
</motion.span>
288+
)}
289+
</AnimatePresence>
290+
</span>
291+
</Button>
280292
<Switch
281293
variant="secondary/small"
282294
label="All details"

0 commit comments

Comments
 (0)