diff --git a/src/components/shared/PipelineRunFiltersBar/PipelineRunFiltersBar.tsx b/src/components/shared/PipelineRunFiltersBar/PipelineRunFiltersBar.tsx new file mode 100644 index 000000000..1c299bd5f --- /dev/null +++ b/src/components/shared/PipelineRunFiltersBar/PipelineRunFiltersBar.tsx @@ -0,0 +1,49 @@ +import { useState } from "react"; + +import { Button } from "@/components/ui/button"; +import { Icon } from "@/components/ui/icon"; +import { Input } from "@/components/ui/input"; +import { BlockStack, InlineStack } from "@/components/ui/layout"; +import { useRunSearchParams } from "@/hooks/useRunSearchParams"; + +export function PipelineRunFiltersBar() { + const { filters, setFilter, setFilterDebounced } = useRunSearchParams(); + + const [nameInput, setNameInput] = useState(filters.pipeline_name ?? ""); + + return ( + + + + + { + setNameInput(e.target.value); + setFilterDebounced("pipeline_name", e.target.value); + }} + className="pl-9 pr-8 w-full" + /> + {nameInput && ( + { + setNameInput(""); + setFilter("pipeline_name", undefined); + }} + className="absolute right-2 top-1/2 -translate-y-1/2 size-6 text-muted-foreground hover:text-foreground" + aria-label="Clear search" + > + + + )} + + + + ); +} diff --git a/src/flags.ts b/src/flags.ts index c01bb29a3..0fae9b2ec 100644 --- a/src/flags.ts +++ b/src/flags.ts @@ -65,4 +65,12 @@ export const ExistingFlags: ConfigFlags = { default: false, category: "beta", }, + + ["pipeline-run-filters-bar"]: { + name: "Pipeline run filters bar (UI only)", + description: + "Non-functional UI preview. This filter bar is not connected to the API and is for testing/development purposes only.", + default: false, + category: "beta", + }, }; diff --git a/src/routes/Home/Home.tsx b/src/routes/Home/Home.tsx index abcce081f..c5055cd55 100644 --- a/src/routes/Home/Home.tsx +++ b/src/routes/Home/Home.tsx @@ -1,10 +1,14 @@ import { useRef, useState } from "react"; import { PipelineSection, RunSection } from "@/components/Home"; +import { PipelineRunFiltersBar } from "@/components/shared/PipelineRunFiltersBar/PipelineRunFiltersBar"; +import { useFlagValue } from "@/components/shared/Settings/useFlags"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; const Home = () => { const [activeTab, setActiveTab] = useState("runs"); + const isFiltersBarEnabled = useFlagValue("pipeline-run-filters-bar"); + const handleTabSelect = (value: string) => { setActiveTab(value); }; @@ -35,7 +39,8 @@ const Home = () => { - + + {isFiltersBarEnabled && }