managarten/memoro/apps/mobile/components/molecules/LanguageSelectionModal.tsx
Till-JS e7f5f942f3 chore: initial commit - consolidate 4 projects into monorepo
Projects included:
- maerchenzauber (NestJS backend + Expo mobile + SvelteKit web + Astro landing)
- manacore (Expo mobile + SvelteKit web + Astro landing)
- manadeck (NestJS backend + Expo mobile + SvelteKit web)
- memoro (Expo mobile + SvelteKit web + Astro landing)

This commit preserves the current state before monorepo restructuring.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 23:38:24 +01:00

59 lines
No EOL
1.7 KiB
TypeScript

import React from 'react';
import { useTranslation } from 'react-i18next';
import BaseModal from '~/components/atoms/BaseModal';
import BaseLanguageSelector from '~/components/molecules/BaseLanguageSelector';
interface LanguageSelectionModalProps {
isVisible: boolean;
onClose: () => void;
languages: Record<string, { locale: string; nativeName: string; emoji: string }>;
selectedLanguages: string[];
onToggleLanguage: (languageCode: string) => void;
}
const LanguageSelectionModal: React.FC<LanguageSelectionModalProps> = ({
isVisible,
onClose,
languages,
selectedLanguages,
onToggleLanguage,
}) => {
const { t } = useTranslation();
// Handler for selection changes
const handleSelectionChange = (newSelection: string[]) => {
// Find the difference to determine which language was toggled
const added = newSelection.find(lang => !selectedLanguages.includes(lang));
const removed = selectedLanguages.find(lang => !newSelection.includes(lang));
if (added) {
onToggleLanguage(added);
} else if (removed) {
onToggleLanguage(removed);
}
};
return (
<BaseModal
isVisible={isVisible}
onClose={onClose}
title={t('upload.select_recording_language', 'Aufnahmesprache auswählen')}
animationType="fade"
closeOnOverlayPress={true}
hideFooter={true}
noPadding={true}
size="medium"
>
<BaseLanguageSelector
languages={languages}
selectedLanguages={selectedLanguages}
onSelect={handleSelectionChange}
mode="multi"
showAutoDetect={true}
height={450}
/>
</BaseModal>
);
};
export default LanguageSelectionModal;