RAG_Backend / frontend /src /components /compare /ConfigCard.jsx
Madhesh4124's picture
feat: add auth-gated 3-mode workflow with admin chroma controls
7ac3a44
Raw
History Blame Contribute Delete
2.22 kB
import React from 'react';
import { Badge, Button } from "../common/index";
export default function ConfigCard({ config, onAdd, isStaged, disabled }) {
const chunkParamEntries = Object.entries(config.chunk_params || {}).slice(0, 3);
const status = config.indexingStatus || "idle";
const statusLabel =
status === "indexing"
? "Indexing..."
: status === "ready"
? "Ready ✅"
: status === "already_exists"
? "Already indexed ✅"
: status === "error"
? "Index failed"
: "Not indexed";
const statusColor =
status === "indexing"
? "orange"
: status === "ready" || status === "already_exists"
? "green"
: status === "error"
? "red"
: "gray";
const canAdd = !disabled && !isStaged && status !== "indexing";
return (
<div className="rounded-2xl border border-gray-200 bg-white p-4 shadow-sm transition-transform duration-200 hover:-translate-y-0.5 hover:shadow-md">
<div className="flex items-start justify-between gap-3">
<div>
<h3 className="text-base font-semibold text-gray-900">{config.name}</h3>
<div className="mt-2 flex flex-wrap gap-2">
<Badge color="blue">top_k: {config.top_k}</Badge>
<Badge color="gray">threshold: {Number(config.threshold).toFixed(2)}</Badge>
<Badge color="orange">{config.chunk_strategy}</Badge>
<Badge color="gray">{config.embedding_model}</Badge>
{chunkParamEntries.map(([key, value]) => (
<Badge key={key} color="gray">
{key}: {Array.isArray(value) ? `[${value.length}]` : String(value)}
</Badge>
))}
<Badge color={statusColor}>{statusLabel}</Badge>
</div>
</div>
<Button
onClick={onAdd}
disabled={!canAdd}
variant={isStaged ? "secondary" : "primary"}
className="whitespace-nowrap"
>
{isStaged ? "Added" : "Add ➕"}
</Button>
</div>
<p className="mt-3 text-xs text-gray-400">
{config.isPreset ? "Preset configuration" : "Custom configuration"}
</p>
</div>
);
}