Skip to content

Commit 6ac930b

Browse files
committed
Filter and page structure improvements
1 parent 1f90cfa commit 6ac930b

1 file changed

Lines changed: 45 additions & 31 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 & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,11 @@ function ProviderFilter({ providers }: { providers: string[] }) {
111111
return (
112112
<>
113113
<SelectProvider value={selected} setValue={(v) => replace({ providers: v })}>
114-
<SelectTrigger variant="secondary/small" tooltipTitle="Filter by provider">
115-
<AdjustmentsHorizontalIcon className="size-4" />
114+
<SelectTrigger
115+
icon={<AdjustmentsHorizontalIcon className="size-4" />}
116+
variant="secondary/small"
117+
tooltipTitle="Filter by provider"
118+
>
116119
<span className="ml-0.5">Provider</span>
117120
</SelectTrigger>
118121
<SelectPopover>
@@ -143,8 +146,11 @@ function CapabilityFilter({ capabilities }: { capabilities: string[] }) {
143146
return (
144147
<>
145148
<SelectProvider value={selected} setValue={(v) => replace({ capabilities: v })}>
146-
<SelectTrigger variant="secondary/small" tooltipTitle="Filter by capability">
147-
<AdjustmentsHorizontalIcon className="size-4" />
149+
<SelectTrigger
150+
icon={<AdjustmentsHorizontalIcon className="size-4" />}
151+
variant="secondary/small"
152+
tooltipTitle="Filter by capability"
153+
>
148154
<span className="ml-0.5">Capability</span>
149155
</SelectTrigger>
150156
<SelectPopover>
@@ -175,8 +181,11 @@ function FeaturesFilter() {
175181
return (
176182
<>
177183
<SelectProvider value={selected} setValue={(v) => replace({ features: v })}>
178-
<SelectTrigger variant="secondary/small" tooltipTitle="Filter by feature support">
179-
<AdjustmentsHorizontalIcon className="size-4" />
184+
<SelectTrigger
185+
icon={<AdjustmentsHorizontalIcon className="size-4" />}
186+
variant="secondary/small"
187+
tooltipTitle="Filter by feature support"
188+
>
180189
<span className="ml-0.5">Features</span>
181190
</SelectTrigger>
182191
<SelectPopover>
@@ -209,9 +218,15 @@ function FeaturesFilter() {
209218
function FiltersBar({
210219
allProviders,
211220
allCapabilities,
221+
compareSet,
222+
onClearCompare,
223+
onCompare,
212224
}: {
213225
allProviders: string[];
214226
allCapabilities: string[];
227+
compareSet: Set<string>;
228+
onClearCompare: () => void;
229+
onCompare: () => void;
215230
}) {
216231
const location = useOptimisticLocation();
217232
const searchParams = new URLSearchParams(location.search);
@@ -234,6 +249,17 @@ function FiltersBar({
234249
</Form>
235250
)}
236251
</div>
252+
{compareSet.size >= 2 && (
253+
<div className="flex shrink-0 items-center gap-2">
254+
<span className="text-xs text-text-dimmed">{compareSet.size} selected</span>
255+
<Button variant="tertiary/small" onClick={onClearCompare}>
256+
Clear
257+
</Button>
258+
<Button variant="primary/small" onClick={onCompare}>
259+
Compare ({compareSet.size})
260+
</Button>
261+
</div>
262+
)}
237263
</div>
238264
);
239265
}
@@ -382,31 +408,19 @@ export default function ModelsPage() {
382408
<PageTitle title="Models" />
383409
</NavBar>
384410
<PageBody scrollable={false}>
385-
<div className="grid max-h-full grid-rows-[auto_1fr] overflow-hidden">
386-
<FiltersBar allProviders={allProviders} allCapabilities={allCapabilities} />
387-
{compareSet.size >= 2 && (
388-
<div className="flex shrink-0 items-center justify-between border-b border-grid-bright bg-background-dimmed px-3 py-2">
389-
<span className="text-sm text-text-dimmed">
390-
{compareSet.size} models selected
391-
</span>
392-
<div className="flex items-center gap-2">
393-
<Button variant="tertiary/small" onClick={() => setCompareSet(new Set())}>
394-
Clear
395-
</Button>
396-
<Button
397-
variant="primary/small"
398-
onClick={() => {
399-
const params = Array.from(compareSet).join(",");
400-
navigate(
401-
`${v3ModelComparePath(organization, project, environment)}?models=${params}`
402-
);
403-
}}
404-
>
405-
Compare ({compareSet.size})
406-
</Button>
407-
</div>
408-
</div>
409-
)}
411+
<div className="grid h-full max-h-full grid-rows-[2.5rem_1fr] overflow-hidden">
412+
<FiltersBar
413+
allProviders={allProviders}
414+
allCapabilities={allCapabilities}
415+
compareSet={compareSet}
416+
onClearCompare={() => setCompareSet(new Set())}
417+
onCompare={() => {
418+
const params = Array.from(compareSet).join(",");
419+
navigate(
420+
`${v3ModelComparePath(organization, project, environment)}?models=${params}`
421+
);
422+
}}
423+
/>
410424
<ModelsList
411425
models={filteredModels}
412426
popularMap={popularMap}

0 commit comments

Comments
 (0)