MediBot / components /views /LanguageView.tsx
github-actions[bot]
Deploy MedOS Global from 0b9218f6
102e23b
'use client';
import { Check } from 'lucide-react';
import { LANGUAGE_META, type SupportedLanguage } from '@/lib/i18n';
import { hapticFeedback } from '@/lib/mobile/touch';
interface LanguageViewProps {
currentLanguage: SupportedLanguage;
onSelectLanguage: (lang: SupportedLanguage) => void;
}
const LANGUAGE_ORDER: SupportedLanguage[] = [
'en', 'es', 'zh', 'hi', 'ar', 'pt', 'bn', 'fr', 'ru', 'ja',
'de', 'ko', 'tr', 'vi', 'it', 'th', 'id', 'sw', 'tl', 'uk',
];
export default function LanguageView({
currentLanguage,
onSelectLanguage,
}: LanguageViewProps) {
return (
<div className="flex-1 overflow-y-auto scroll-smooth">
{/* Header */}
<div className="px-4 py-4 border-b border-slate-700/50">
<h2 className="text-lg font-bold text-slate-100">Language</h2>
<p className="text-sm text-slate-400 mt-1">
MedOS responds in your chosen language
</p>
</div>
{/* Language List */}
<div className="p-4 space-y-1">
{LANGUAGE_ORDER.map((lang) => {
const meta = LANGUAGE_META[lang];
const isSelected = lang === currentLanguage;
return (
<button
key={lang}
onClick={() => {
hapticFeedback('light');
onSelectLanguage(lang);
}}
className={`
w-full flex items-center gap-3 px-4 py-3 rounded-xl
touch-target transition-all duration-200
${isSelected
? 'bg-medical-primary/10 border border-medical-primary/30 text-slate-100'
: 'hover:bg-slate-800 text-slate-300'
}
`}
>
<span className="text-2xl">{meta.flag}</span>
<div className="flex-1 text-left">
<p className="text-sm font-medium">{meta.nativeName}</p>
<p className="text-xs text-slate-500">{meta.name}</p>
</div>
{meta.rtl && (
<span className="text-xs text-slate-600 px-2 py-0.5 rounded bg-slate-800">
RTL
</span>
)}
{isSelected && (
<Check size={18} className="text-medical-primary" />
)}
</button>
);
})}
</div>
</div>
);
}