"use client"; import { useState } from "react"; import { Loader2, Save, RotateCcw } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Textarea } from "@/components/ui/textarea"; import { useMethodology, useUpdateMethodology, useResetMethodology, } from "@/lib/api/methodology"; /** * Generic key→JSON editor for methodology categories whose value shape is * arbitrary (T12: transition_phrases, anti_patterns). Each key is editable as * formatted JSON; Save validates + upserts an override, Reset restores default. * These edits flow to the writer via the accumulated-learning channel (T15). */ function Row({ category, k, value, isOverride }: { category: string; k: string; value: unknown; isOverride: boolean; }) { const [draft, setDraft] = useState(JSON.stringify(value, null, 2)); const [err, setErr] = useState(null); const update = useUpdateMethodology(category); const reset = useResetMethodology(category); const dirty = draft !== JSON.stringify(value, null, 2); const onSave = () => { let parsed: unknown; try { parsed = JSON.parse(draft); } catch { setErr("JSON לא תקין"); return; } setErr(null); update.mutate({ key: k, value: parsed }, { onSuccess: () => toast.success(`${k} נשמר`), onError: (e) => toast.error(e instanceof Error ? e.message : "שגיאה"), }); }; const onReset = () => { reset.mutate(k, { onSuccess: () => { toast.success(`${k} אופס לברירת-מחדל`); setDraft(""); }, onError: (e) => toast.error(e instanceof Error ? e.message : "שגיאה"), }); }; return (
{k} {isOverride ? "מותאם" : "ברירת-מחדל"}