"use client"; import { useMemo, useState } from "react"; import type { QuestionField } from "@/lib/schema-adapter"; import { useI18n } from "@/translations/provider"; import { useQuestionAnswers } from "./question-answer-storage"; import QuestionDateSheet from "./question-date-sheet"; import QuestionTitle from "./question-title"; type QuestionDateProps = { question: QuestionField; disabled?: boolean; }; const MIN_AGE = 18; function parseDateParts(dateValue: string): { year: string; month: string; day: string; } { const parts = dateValue ? dateValue.split("-") : []; return { year: parts[0] || "", month: parts[1] || "", day: parts[2] || "", }; } export function QuestionDate({ question, disabled }: QuestionDateProps) { const { dictionary: t, locale } = useI18n(); const { getAnswerValue, setAnswerValue } = useQuestionAnswers(); const value = getAnswerValue(question); const dateValue = typeof value === "string" ? value : ""; const { year, month, day } = parseDateParts(dateValue); const [isOpen, setIsOpen] = useState(false); const calculatedAge = useMemo(() => { if (!year || !month || !day) return null; const y = Number.parseInt(year, 10); const m = Number.parseInt(month, 10); const d = Number.parseInt(day, 10); if ( !y || !m || !d || Number.isNaN(y) || Number.isNaN(m) || Number.isNaN(d) ) { return null; } const today = new Date(); const cYear = today.getFullYear(); const cMonth = today.getMonth() + 1; const cDay = today.getDate(); let age = cYear - y; if (cMonth < m || (cMonth === m && cDay < d)) { age -= 1; } return age >= 0 ? age : null; }, [year, month, day]); const isUnder18 = calculatedAge !== null && calculatedAge < MIN_AGE; const displayDate = useMemo(() => { if (!year || !month || !day) return ""; const date = new Date( Number.parseInt(year, 10), Number.parseInt(month, 10) - 1, Number.parseInt(day, 10), ); return new Intl.DateTimeFormat(`${locale}-u-ca-gregory`, { day: "numeric", month: "long", year: "numeric", }).format(date); }, [year, month, day, locale]); const openSheet = () => { if (disabled) return; setIsOpen(true); }; const handleApply = (formattedDate: string) => { setAnswerValue(question, formattedDate); }; const placeholder = t["Select date"] || (locale === "fa" ? "انتخاب تاریخ" : "Select date"); return (
{/* Date Trigger Field (single input, like the Flutter app's DOB field) */} {calculatedAge !== null ? (
{t.Age || (locale === "fa" ? "سن" : "Age")} {isUnder18 ? ( {locale === "fa" ? "حداقل سن برای ثبت‌نام ۱۸ سال می‌باشد." : "Minimum age required for registration is 18 years."} ) : null}
) : null} {isOpen && ( setIsOpen(false)} /> )}
); } export default QuestionDate;