import { Button } from "~/ui/Button"; import { TextAreaField, TextField } from "~/ui/Field"; import { ErrorBanner } from "~/ui/Callout"; import { EmptyState } from "~/ui/EmptyState"; import { Panel } from "~/ui/Panel"; import { RelativeTime } from "~/ui/RelativeTime"; type Item = { name: string; value?: string; updatedAt: number; detail?: string }; type Props = { title: string; kind: "secret" | "variable"; items: Item[]; pending: boolean; error: string | null; onSave: (name: string, value: string, form: FormData) => Promise; onDelete: (name: string) => void; extraFields?: React.ReactNode; }; /** Add/list/remove panel shared by repository, environment and owner secrets and variables. */ export function ConfigValueList({ title, kind, items, pending, error, onSave, onDelete, extraFields }: Props) { return (
{ event.preventDefault(); const element = event.currentTarget; const form = new FormData(element); const ok = await onSave(String(form.get("name") ?? ""), String(form.get("value") ?? ""), form); if (ok) element.reset(); }} >
{kind === "secret" ? ( ) : ( )}
{extraFields} {items.length === 0 ? ( ) : (
    {items.map((item) => (
  • {item.name} {item.value !== undefined && ( {item.value} )} {item.detail && {item.detail}} Updated
  • ))}
)}
); }