import { Button, Card, CardContent, CardHeader, CardTitle, Input, Label } from '@/components/ui'; import { useToast } from '@/hooks/useToast.ts'; import { bulkTranslateData, getMissingTranslations } from '@/services/admin-api.ts'; import { useState } from 'react'; const entityOptions = [ { value: 'organization', label: 'Organization' }, { value: 'site', label: 'Site' }, { value: 'heritage_title', label: 'Heritage Title' }, { value: 'product', label: 'Product' }, ]; const LocalizationDataPage = () => { const { success, error } = useToast(); const [entityType, setEntityType] = useState('organization'); const [locale, setLocale] = useState('en'); const [fieldsInput, setFieldsInput] = useState('name,description'); const [missing, setMissing] = useState(null); const [isLoading, setIsLoading] = useState(false); const [isTranslating, setIsTranslating] = useState(false); const handleFindMissing = async () => { setIsLoading(true); try { const res = await getMissingTranslations(entityType, locale); setMissing(res); } catch (err) { error('Failed to fetch missing translations'); } finally { setIsLoading(false); } }; const handleBulkTranslate = async () => { setIsTranslating(true); try { const fields = fieldsInput .split(',') .map((f) => f.trim()) .filter(Boolean); const res = await bulkTranslateData(entityType, [], locale, fields); success(`Translated ${res.translated} items`); // Refresh missing await handleFindMissing(); } catch (err) { error('Bulk translate failed'); } finally { setIsTranslating(false); } }; return (

Data Translations

Find and bulk-translate missing data translations

Query
setFieldsInput(e.target.value)} />
{missing && ( Results
Total missing: {missing.total}
{Object.entries(missing.counts || {}).map(([field, count]) => (
{field}: {count}
{missing.results && missing.results[field] && missing.results[field].slice ? missing.results[field].slice(0, 10).join(', ') : missing.results && missing.results[field] ? Object.values(missing.results[field]).slice(0, 10).join(', ') : '—'}
))}
)}
); }; export default LocalizationDataPage;