"use client" import { useEffect, useMemo } from "react" import { cn } from "@/lib/utils" import { useI18n } from "@/i18n/provider" type JsonCodeEditorProps = { value: string onChange: (value: string) => void onValidationChange?: (error: string | null) => void disabled?: boolean className?: string } function validateJson(value: string, fallbackMessage: string) { const text = value.trim() if (!text) { return null } try { JSON.parse(text) return null } catch (error) { return error instanceof Error ? error.message : fallbackMessage } } export function JsonCodeEditor({ value, onChange, onValidationChange, disabled = false, className, }: JsonCodeEditorProps) { const t = useI18n() const error = useMemo(() => validateJson(value, t("json.invalid")), [t, value]) const lineCount = Math.max(1, value.split("\n").length) useEffect(() => { onValidationChange?.(error) }, [error, onValidationChange]) return (
JSON {error ? t("json.invalidLabel") : t("json.valid")}
{Array.from({ length: lineCount }, (_, index) => (
{index + 1}
))}