"use client"; import type { CandidateFactCard, ConfirmedFactCard } from "../lib/domain/types"; interface FactCardEditorProps { factCard: CandidateFactCard | null; isSaving: boolean; onChange: (factCard: CandidateFactCard) => void; onConfirm: () => void; } const listFields = [ "company_short_names", "brand_names", "product_names", "core_claims", "forbidden_claims", "image_topics", "uncertain_items", ] as const; export function FactCardEditor({ factCard, isSaving, onChange, onConfirm, }: FactCardEditorProps) { if (!factCard) { return ( Fact Card ); } const currentFactCard = factCard; const canOptimize = currentFactCard.uncertain_items.length === 0; function update( key: K, value: CandidateFactCard[K], ) { onChange({ ...currentFactCard, [key]: value, is_ready_for_optimization: key === "uncertain_items" ? (value as string[]).length === 0 : currentFactCard.uncertain_items.length === 0, }); } return ( Fact Card {isSaving ? "Saving..." : "Confirm"} Company full name update("company_full_name", event.target.value)} /> Target industry update("target_industry", event.target.value)} /> Target audience update("target_audience", event.target.value)} /> Experience years update( "experience_years", event.target.value ? Number(event.target.value) : null, ) } /> {listFields.map((field) => ( {field.replace(/_/g, " ")} update( field, event.target.value .split(/\r?\n/) .map((line) => line.trim()) .filter(Boolean) as CandidateFactCard[typeof field], ) } /> ))} {!canOptimize && ( Resolve uncertain items before optimization. )} ); } export function toConfirmedFactCard( factCard: CandidateFactCard, ): ConfirmedFactCard { return { ...factCard, uncertain_items: [], is_ready_for_optimization: true, confirmed_by_user: true, }; }
Resolve uncertain items before optimization.