Skip to content

Commit 4f8ef54

Browse files
committed
Add filter to home page
1 parent 72e834c commit 4f8ef54

3 files changed

Lines changed: 72 additions & 1 deletion

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { FlaskConical } from "lucide-react";
2+
import type { ReactNode } from "react";
3+
4+
import {
5+
Tooltip,
6+
TooltipContent,
7+
TooltipTrigger,
8+
} from "@/components/ui/tooltip";
9+
import { ExistingFlags } from "@/flags";
10+
import { cn } from "@/lib/utils";
11+
12+
interface BetaFeatureWrapperProps {
13+
flagKey: keyof typeof ExistingFlags;
14+
children: ReactNode;
15+
className?: string;
16+
}
17+
18+
export function BetaFeatureWrapper({
19+
flagKey,
20+
children,
21+
className,
22+
}: BetaFeatureWrapperProps) {
23+
const flag = ExistingFlags[flagKey];
24+
25+
if (!flag) {
26+
return <>{children}</>;
27+
}
28+
29+
return (
30+
<div
31+
className={cn(
32+
"relative rounded-lg border-2 border-amber-400/50 bg-amber-50/30 dark:bg-amber-950/10",
33+
className,
34+
)}
35+
>
36+
<Tooltip>
37+
<TooltipTrigger asChild>
38+
<div className="absolute -right-2 -top-2 flex size-6 cursor-help items-center justify-center rounded-full border border-amber-400 bg-amber-100 dark:bg-amber-900">
39+
<FlaskConical className="size-3.5 text-amber-600 dark:text-amber-400" />
40+
</div>
41+
</TooltipTrigger>
42+
<TooltipContent side="top" className="max-w-xs">
43+
<div className="space-y-1">
44+
<p className="font-medium">{flag.name}</p>
45+
<p className="text-xs opacity-90">{flag.description}</p>
46+
<p className="text-xs italic opacity-70">Beta feature</p>
47+
</div>
48+
</TooltipContent>
49+
</Tooltip>
50+
<div className="p-3">{children}</div>
51+
</div>
52+
);
53+
}

src/flags.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,12 @@ export const ExistingFlags: ConfigFlags = {
6565
default: false,
6666
category: "beta",
6767
},
68+
69+
["pipeline-run-filters-bar"]: {
70+
name: "Pipeline run filters bar (UI only)",
71+
description:
72+
"Non-functional UI preview. This filter bar is not connected to the API and is for testing/development purposes only.",
73+
default: false,
74+
category: "beta",
75+
},
6876
};

src/routes/Home/Home.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { useRef, useState } from "react";
22

33
import { PipelineSection, RunSection } from "@/components/Home";
4+
import { BetaFeatureWrapper } from "@/components/shared/BetaFeatureWrapper/BetaFeatureWrapper";
5+
import { PipelineRunFiltersBar } from "@/components/shared/PipelineRunFiltersBar/PipelineRunFiltersBar";
6+
import { useFlagValue } from "@/components/shared/Settings/useFlags";
47
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
58

69
const Home = () => {
710
const [activeTab, setActiveTab] = useState("runs");
11+
const isFiltersBarEnabled = useFlagValue("pipeline-run-filters-bar");
12+
813
const handleTabSelect = (value: string) => {
914
setActiveTab(value);
1015
};
@@ -35,7 +40,12 @@ const Home = () => {
3540
<TabsContent value="pipelines">
3641
<PipelineSection />
3742
</TabsContent>
38-
<TabsContent value="runs" className="flex flex-col gap-1">
43+
<TabsContent value="runs" className="flex flex-col gap-4">
44+
{isFiltersBarEnabled && (
45+
<BetaFeatureWrapper flagKey="pipeline-run-filters-bar">
46+
<PipelineRunFiltersBar />
47+
</BetaFeatureWrapper>
48+
)}
3949
<RunSection onEmptyList={handlePipelineRunsEmpty} />
4050
</TabsContent>
4151
</Tabs>

0 commit comments

Comments
 (0)