Skip to content

Commit 87e49b2

Browse files
committed
Improving the filter behaviour
1 parent 4a9086a commit 87e49b2

1 file changed

Lines changed: 45 additions & 50 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: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { AdjustmentsHorizontalIcon, CheckIcon, XMarkIcon } from "@heroicons/react/20/solid";
1+
import {
2+
AdjustmentsHorizontalIcon,
3+
CheckIcon,
4+
CubeIcon,
5+
XMarkIcon,
6+
} from "@heroicons/react/20/solid";
7+
import * as Ariakit from "@ariakit/react";
28
import { Form, type MetaFunction, useFetcher } from "@remix-run/react";
39
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
410
import { AnimatePresence, motion } from "framer-motion";
@@ -26,7 +32,6 @@ import { SearchInput } from "~/components/primitives/SearchInput";
2632
import { Switch } from "~/components/primitives/Switch";
2733
import {
2834
SelectProvider,
29-
SelectTrigger,
3035
SelectPopover,
3136
SelectList,
3237
SelectItem,
@@ -117,70 +122,60 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
117122
function ProviderFilter({ providers }: { providers: string[] }) {
118123
const { values, replace, del } = useSearchParams();
119124
const selected = values("providers");
125+
const hasFilter = selected.length > 0;
120126

121127
return (
122-
<>
123-
<SelectProvider value={selected} setValue={(v) => replace({ providers: v })}>
124-
<SelectTrigger
125-
icon={<AdjustmentsHorizontalIcon className="size-4" />}
126-
variant="secondary/small"
127-
tooltipTitle="Filter by provider"
128-
>
129-
<span className="ml-0.5">Provider</span>
130-
</SelectTrigger>
131-
<SelectPopover>
132-
<SelectList>
133-
{providers.map((p) => (
134-
<SelectItem key={p} value={p}>
135-
{formatProviderName(p)}
136-
</SelectItem>
137-
))}
138-
</SelectList>
139-
</SelectPopover>
140-
</SelectProvider>
141-
{selected.length > 0 && (
128+
<SelectProvider value={selected} setValue={(v) => replace({ providers: v })}>
129+
<Ariakit.Select render={<div className="group cursor-pointer focus-custom" />}>
142130
<AppliedFilter
143-
label="Provider"
144-
value={appliedSummary(selected.map(formatProviderName))!}
131+
icon={<CubeIcon className="size-4" />}
132+
label={hasFilter ? "Provider" : undefined}
133+
value={hasFilter ? appliedSummary(selected.map(formatProviderName))! : "Provider"}
134+
valueClassName={hasFilter ? undefined : "text-text-bright"}
135+
removable={hasFilter}
145136
onRemove={() => del("providers")}
146137
/>
147-
)}
148-
</>
138+
</Ariakit.Select>
139+
<SelectPopover>
140+
<SelectList>
141+
{providers.map((p) => (
142+
<SelectItem key={p} value={p}>
143+
{formatProviderName(p)}
144+
</SelectItem>
145+
))}
146+
</SelectList>
147+
</SelectPopover>
148+
</SelectProvider>
149149
);
150150
}
151151

152152
function FeaturesFilter({ features }: { features: string[] }) {
153153
const { values, replace, del } = useSearchParams();
154154
const selected = values("features");
155+
const hasFilter = selected.length > 0;
155156

156157
return (
157-
<>
158-
<SelectProvider value={selected} setValue={(v) => replace({ features: v })}>
159-
<SelectTrigger
160-
icon={<AdjustmentsHorizontalIcon className="size-4" />}
161-
variant="secondary/small"
162-
tooltipTitle="Filter by feature"
163-
>
164-
<span className="ml-0.5">Features</span>
165-
</SelectTrigger>
166-
<SelectPopover>
167-
<SelectList>
168-
{features.map((f) => (
169-
<SelectItem key={f} value={f}>
170-
{formatFeature(f)}
171-
</SelectItem>
172-
))}
173-
</SelectList>
174-
</SelectPopover>
175-
</SelectProvider>
176-
{selected.length > 0 && (
158+
<SelectProvider value={selected} setValue={(v) => replace({ features: v })}>
159+
<Ariakit.Select render={<div className="group cursor-pointer focus-custom" />}>
177160
<AppliedFilter
178-
label="Features"
179-
value={appliedSummary(selected.map(formatFeature))!}
161+
icon={<AdjustmentsHorizontalIcon className="size-4" />}
162+
label={hasFilter ? "Features" : undefined}
163+
value={hasFilter ? appliedSummary(selected.map(formatFeature))! : "Features"}
164+
valueClassName={hasFilter ? undefined : "text-text-bright"}
165+
removable={hasFilter}
180166
onRemove={() => del("features")}
181167
/>
182-
)}
183-
</>
168+
</Ariakit.Select>
169+
<SelectPopover>
170+
<SelectList>
171+
{features.map((f) => (
172+
<SelectItem key={f} value={f}>
173+
{formatFeature(f)}
174+
</SelectItem>
175+
))}
176+
</SelectList>
177+
</SelectPopover>
178+
</SelectProvider>
184179
);
185180
}
186181

0 commit comments

Comments
 (0)