Files
pezkuwi-mobile-app/frontend/src/screens/LanguageSelectionScreen.tsx
T
2025-11-08 14:07:51 +00:00

217 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React, { useState } from 'react';
import {
View,
Text,
StyleSheet,
TouchableOpacity,
SafeAreaView,
Dimensions,
Image,
} from 'react-native';
import { LinearGradient } from 'expo-linear-gradient';
import { Ionicons } from '@expo/vector-icons';
const { width, height } = Dimensions.get('window');
const LANGUAGES = [
{ code: 'en', name: 'English', flag: '🇬🇧' },
{ code: 'ku', name: 'Kurdî (Kurmancî)', flag: '☀️' },
{ code: 'ckb', name: 'کوردی (سۆرانی)', flag: '☀️' },
{ code: 'tr', name: 'Türkçe', flag: '🇹🇷' },
{ code: 'ar', name: 'العربية', flag: '🇸🇦' },
{ code: 'fa', name: 'فارسی', flag: '🇮🇷' },
];
export default function LanguageSelectionScreen({ navigation }: any) {
const [selectedLanguage, setSelectedLanguage] = useState('en');
const handleContinue = () => {
// TODO: Save language preference
// navigation.navigate('HumanVerification');
alert('Language selected: ' + selectedLanguage);
};
return (
<SafeAreaView style={styles.container}>
<LinearGradient
colors={['#00A651', '#EE2A35', '#FFD700', '#FFFFFF']}
start={{ x: 0, y: 0 }}
end={{ x: 1, y: 1 }}
style={styles.gradient}
>
<View style={styles.content}>
{/* Header with Kurdistan Sun */}
<View style={styles.header}>
<View style={styles.sunContainer}>
<Text style={styles.sunEmoji}></Text>
</View>
<Text style={styles.title}>PezkuwiChain</Text>
<Text style={styles.subtitle}>Your Digital Citizenship Platform</Text>
</View>
{/* Language Selection Grid */}
<View style={styles.languagesContainer}>
<Text style={styles.sectionTitle}>Select Your Language</Text>
<View style={styles.languagesScrollView}>
<View style={styles.languagesGrid}>
{LANGUAGES.map((lang) => (
<TouchableOpacity
key={lang.code}
style={[
styles.languageCard,
selectedLanguage === lang.code && styles.languageCardSelected,
]}
onPress={() => setSelectedLanguage(lang.code)}
activeOpacity={0.7}
>
<Text style={styles.languageFlag}>{lang.flag}</Text>
<Text style={styles.languageName}>{lang.name}</Text>
{selectedLanguage === lang.code && (
<View style={styles.checkmark}>
<Ionicons name="checkmark-circle" size={24} color="#00A651" />
</View>
)}
</TouchableOpacity>
))}
</View>
</View>
{/* Continue Button */}
<TouchableOpacity
style={styles.continueButton}
onPress={handleContinue}
activeOpacity={0.8}
>
<Text style={styles.continueButtonText}>Get Started</Text>
<Ionicons name="arrow-forward" size={24} color="#FFF" />
</TouchableOpacity>
</View>
</LinearGradient>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
gradient: {
flex: 1,
},
content: {
flex: 1,
padding: 20,
justifyContent: 'space-between',
},
header: {
alignItems: 'center',
marginTop: 20,
marginBottom: 30,
},
sunContainer: {
width: 100,
height: 100,
borderRadius: 50,
backgroundColor: 'rgba(255,255,255,0.9)',
alignItems: 'center',
justifyContent: 'center',
marginBottom: 20,
shadowColor: '#000',
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 0.2,
shadowRadius: 8,
elevation: 8,
},
sunEmoji: {
fontSize: 60,
},
title: {
fontSize: 32,
fontWeight: 'bold',
color: '#FFF',
textShadowColor: 'rgba(0,0,0,0.3)',
textShadowOffset: { width: 0, height: 2 },
textShadowRadius: 4,
},
subtitle: {
fontSize: 16,
color: '#FFF',
marginTop: 8,
textShadowColor: 'rgba(0,0,0,0.2)',
textShadowOffset: { width: 0, height: 1 },
textShadowRadius: 2,
},
languagesContainer: {
flex: 1,
justifyContent: 'center',
},
sectionTitle: {
fontSize: 20,
fontWeight: '700',
color: '#FFF',
marginBottom: 20,
textAlign: 'center',
textShadowColor: 'rgba(0,0,0,0.2)',
textShadowOffset: { width: 0, height: 1 },
textShadowRadius: 2,
},
languagesGrid: {
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'space-between',
gap: 15,
},
languageCard: {
width: (width - 60) / 2,
backgroundColor: 'rgba(255,255,255,0.95)',
borderRadius: 16,
padding: 20,
alignItems: 'center',
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.15,
shadowRadius: 4,
elevation: 4,
},
languageCardSelected: {
backgroundColor: '#FFF',
borderWidth: 3,
borderColor: '#00A651',
},
languageFlag: {
fontSize: 40,
marginBottom: 10,
},
languageName: {
fontSize: 14,
fontWeight: '600',
color: '#333',
textAlign: 'center',
},
checkmark: {
position: 'absolute',
top: 10,
right: 10,
},
continueButton: {
backgroundColor: '#EE2A35',
borderRadius: 16,
padding: 18,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
gap: 10,
shadowColor: '#000',
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 0.3,
shadowRadius: 8,
elevation: 8,
},
continueButtonText: {
fontSize: 20,
fontWeight: 'bold',
color: '#FFF',
},
});