Parameter search & inline display for Past Runs and Run History pages (#3985)

This commit is contained in:
Celal Zamanoglu
2025-11-14 01:33:39 +03:00
committed by GitHub
parent f1e118ab2b
commit a95837783a
10 changed files with 797 additions and 257 deletions

View File

@@ -0,0 +1,105 @@
import { ReactNode } from "react";
import { cn } from "@/util/utils";
import { HighlightText } from "./HighlightText";
type ParameterDisplayItem = {
key: string;
value: unknown;
description?: string | null;
};
type ParameterDisplayInlineProps = {
title?: string;
parameters: Array<ParameterDisplayItem>;
searchQuery: string;
keywordMatchesParameter: (parameter: ParameterDisplayItem) => boolean;
showDescription?: boolean;
emptyMessage?: ReactNode;
className?: string;
};
function getDisplayValue(value: unknown): string {
if (value === null || value === undefined || value === "") {
return "-";
}
if (typeof value === "string") {
return value;
}
try {
return JSON.stringify(value);
} catch {
return String(value);
}
}
function ParameterDisplayInline({
title = "Parameters",
parameters,
searchQuery,
keywordMatchesParameter,
showDescription = true,
emptyMessage = "No parameters for this run",
className,
}: ParameterDisplayInlineProps) {
if (!parameters || parameters.length === 0) {
return (
<div className={cn("ml-8 py-4 text-sm text-slate-400", className)}>
{emptyMessage}
</div>
);
}
return (
<div className={cn("ml-8 space-y-2 py-4", className)}>
<div className="mb-3 text-sm font-medium">{title}</div>
<div className="space-y-2">
{parameters.map((parameter) => {
const displayValue = getDisplayValue(parameter.value);
const matches = keywordMatchesParameter(parameter);
return (
<div
key={parameter.key}
className={cn(
"grid gap-6 rounded border bg-white p-3 text-sm dark:border-slate-800 dark:bg-slate-900",
showDescription
? "grid-cols-[minmax(200px,1fr)_minmax(200px,1fr)_minmax(300px,2fr)]"
: "grid-cols-[minmax(200px,1fr)_minmax(300px,2fr)]",
matches &&
"shadow-[0_0_15px_rgba(59,130,246,0.3)] ring-2 ring-blue-500/50",
)}
>
<div className="font-medium text-blue-600 dark:text-blue-400">
<HighlightText text={parameter.key} query={searchQuery} />
</div>
<div className="truncate">
{displayValue === "-" ? (
<span className="text-slate-400">-</span>
) : (
<HighlightText text={displayValue} query={searchQuery} />
)}
</div>
{showDescription ? (
<div className="text-slate-500">
{parameter.description ? (
<HighlightText
text={parameter.description}
query={searchQuery}
/>
) : (
<span className="text-slate-400">No description</span>
)}
</div>
) : null}
</div>
);
})}
</div>
</div>
);
}
export type { ParameterDisplayItem };
export { ParameterDisplayInline };