"use client"; import { useMemo, useState } from "react"; import { Badge, Button, Input, Label, Textarea } from "poyraz-ui/atoms"; import { contentInputName, type ContentTranslationField } from "@/lib/i18n/content"; export type LocalizedFieldLocale = { code: string; nativeName: string; status?: string; }; export type LocalizedFieldValues = Record>; type LocalizedFieldsProps = { idPrefix: string; defaultLocale: string; locales: LocalizedFieldLocale[]; fields: ContentTranslationField[]; values?: LocalizedFieldValues | null; fallbackValues?: Record; labels?: { defaultBadge?: string; missingRequired?: string; }; }; export function LocalizedFields({ idPrefix, defaultLocale, locales, fields, values, fallbackValues, labels, }: LocalizedFieldsProps) { const orderedLocales = useMemo(() => { const localeMap = new Map(locales.map((locale) => [locale.code, locale])); const defaultLocaleRecord = localeMap.get(defaultLocale); return [ ...(defaultLocaleRecord ? [defaultLocaleRecord] : []), ...locales.filter((locale) => locale.code !== defaultLocale), ]; }, [defaultLocale, locales]); const [activeLocale, setActiveLocale] = useState(orderedLocales[0]?.code ?? defaultLocale); const missingRequiredLocales = new Set( orderedLocales .filter((locale) => fields.some((field) => { if (!field.required) return false; const value = values?.[locale.code]?.[field.name] ?? ( locale.code === defaultLocale ? fallbackValues?.[field.name] : null ); return !String(value ?? "").trim(); }), ) .map((locale) => locale.code), ); return (
{orderedLocales.map((locale) => ( ))}
{orderedLocales.map((locale) => (
{fields.map((field) => { const id = `${idPrefix}-${locale.code}-${field.name}`; const defaultValue = values?.[locale.code]?.[field.name] ?? (locale.code === defaultLocale ? fallbackValues?.[field.name] : "") ?? ""; return (
{field.kind === "textarea" ? (