"use client"; import { useEffect, useRef, useState } from "react"; import type { QuestionField } from "@/lib/schema-adapter"; import { cn } from "@/lib/utils"; import { useI18n } from "@/translations/provider"; import { Textarea } from "@/components/ui/textarea"; import { useQuestionAnswers } from "./question-answer-storage"; import QuestionTitle from "./question-title"; type QuestionTextareaProps = { question: QuestionField; description?: string; disabled?: boolean; }; export function QuestionTextarea({ question, description, disabled, }: QuestionTextareaProps) { const { dictionary: t } = useI18n(); const { getAnswerValue, setAnswerValue } = useQuestionAnswers(); const value = getAnswerValue(question); const [localValue, setLocalValue] = useState(String(value ?? "")); const debounceTimerRef = useRef(null); const isFocusedRef = useRef(false); useEffect(() => { if (!isFocusedRef.current) { setLocalValue(String(value ?? "")); } }, [value]); useEffect(() => { return () => { if (debounceTimerRef.current) { clearTimeout(debounceTimerRef.current); } }; }, []); const handleChange = (e: React.ChangeEvent) => { const val = e.target.value; setLocalValue(val); if (debounceTimerRef.current) { clearTimeout(debounceTimerRef.current); } debounceTimerRef.current = setTimeout(() => { setAnswerValue(question, val); }, 300); }; const handleFocus = () => { isFocusedRef.current = true; }; const handleBlur = () => { isFocusedRef.current = false; if (debounceTimerRef.current) { clearTimeout(debounceTimerRef.current); } setAnswerValue(question, localValue); }; const stringValue = localValue.trim(); const isAnswered = question.required === false ? true : stringValue.length > 0; return (