'use client'; import type { MutableRefObject, RefObject } from 'react'; import { getEnglishValue, useTranslation } from '../../../i18n/useTranslation'; import type { NamespaceCategory } from '../hooks/useNamespaceCategories'; type LanguageEntry = { code: string; name: string; }; type Props = { activeCategory: string; setActiveCategory: (category: string) => void; categoriesWithKnownNamespaces: NamespaceCategory[]; allTabStats: { total: number; translated: number; missing: number }; categoryTabStats: Record; globalTabStats: { total: number; translated: number; missing: number }; activeLang: string; allLanguages: LanguageEntry[]; search: string; setSearch: (value: string) => void; autoScrollOnPanelOpen: boolean; setAutoScrollOnPanelOpen: (value: boolean) => void; autoScrollOnSave: boolean; setAutoScrollOnSave: (value: boolean) => void; newGlobalKeySelection: string; setNewGlobalKeySelection: (value: string) => void; availableGlobalKeyOptions: string[]; addGlobalKey: (key: string) => void; globalFilteredKeys: string[]; removeGlobalKey: (key: string) => void; getDisplayValue: (key: string) => string; translations: Record>; handleChange: (key: string, value: string) => void; globalKeySet: Set; englishReferenceKeySet: Set; setEnglishReferenceForKey: (key: string, enabled: boolean) => void; filteredNs: string[]; filteredGroups: Record; activeNamespacePanel: string | null; setActiveNamespacePanel: (next: string | null | ((prev: string | null) => string | null)) => void; namespaceTranslationStats: Record; openedNamespacePanelRef: RefObject; openFromPanelClickRef: MutableRefObject; onBackToPanels: () => void; onOpenCategoryManager: () => void; }; export default function TranslationCoverageEditor({ activeCategory, setActiveCategory, categoriesWithKnownNamespaces, allTabStats, categoryTabStats, globalTabStats, activeLang, allLanguages, search, setSearch, autoScrollOnPanelOpen, setAutoScrollOnPanelOpen, autoScrollOnSave, setAutoScrollOnSave, newGlobalKeySelection, setNewGlobalKeySelection, availableGlobalKeyOptions, addGlobalKey, globalFilteredKeys, removeGlobalKey, getDisplayValue, translations, handleChange, globalKeySet, englishReferenceKeySet, setEnglishReferenceForKey, filteredNs, filteredGroups, activeNamespacePanel, setActiveNamespacePanel, namespaceTranslationStats, openedNamespacePanelRef, openFromPanelClickRef, onBackToPanels, onOpenCategoryManager, }: Props) { const { t } = useTranslation(); // Shared tab button renderer const renderCategoryTab = ( key: string, label: string, stats: { total: number; translated: number; missing: number } ) => { const isActive = activeCategory === key; const hasMissing = activeLang !== 'en' && stats.missing > 0; return ( ); }; return ( <> {/* ── Category tabs card ───────────────────────────────── */}

{t('autofix.k5f978731')}

{t('autofix.kb7a30760')}

{renderCategoryTab('all', 'All', allTabStats)} {renderCategoryTab('global', 'Global', globalTabStats)} {categoriesWithKnownNamespaces.map((cat) => renderCategoryTab(cat.id, cat.label, categoryTabStats[cat.id] ?? { total: 0, translated: 0, missing: 0 }) )}
{/* ── Search + options row ─────────────────────────────── */}
setSearch(e.target.value)} placeholder={t('autofix.kbf49d59b')} className="w-full rounded-2xl border border-slate-200 bg-white/90 pl-9 pr-3 py-2 text-sm shadow-sm placeholder:text-slate-400 focus:outline-none focus:ring-2 focus:ring-slate-900/20 focus:border-slate-300 transition" />
{/* ── Content area ────────────────────────────────────── */}
{/* Global keys table */} {activeCategory === 'global' && (
{t('autofix.k6cfeedd3')}

{t('autofix.kad7d8c49')}

{globalFilteredKeys.length > 0 ? ( {activeLang !== 'en' && ( )} {globalFilteredKeys.map((key) => { const enVal = getEnglishValue(key); const currentVal = getDisplayValue(key); const hasOverride = (translations[activeLang]?.[key] ?? '') !== ''; return ( {activeLang !== 'en' && ( )}
KeyEnglish {allLanguages.find((l) => l.code === activeLang)?.name ?? activeLang}
{key}
{enVal}