import React, { useEffect, useState } from 'react'; import { StyleSheet, ScrollView, SafeAreaView, StatusBar, TouchableOpacity, Alert, TextInput, } from 'react-native'; import { useRouter } from 'expo-router'; import Ionicons from '@expo/vector-icons/Ionicons'; import { ThemedText } from '@/components/ThemedText'; import { ThemedView } from '@/components/ThemedView'; import { Colors } from '@/constants/Colors'; import { useColorScheme } from '@/hooks/useColorScheme'; import { useToken } from '@/context/AppProvider'; import { Message } from '@/services/message'; import { Request } from '@/services/request'; import CustomModal from '@/components/EditModal'; import { err } from 'react-native-svg'; export default function SettingsScreen() { const colorScheme = useColorScheme() ?? 'light'; const { token, isLoading } = useToken(); const router = useRouter(); // Name const [ name, setName ] = useState( '' ); const [ nameModalVisible, setNameModalVisible ] = useState( false ); // Address const [ zipcode, setZipcode ] = React.useState( '6715GA' ); const [ houseNumber, setHouseNumber ] = React.useState( '3' ); const [ street, setStreet ] = React.useState( '3' ); const [ city, setCity ] = React.useState( '3' ); const [ addressModalVisible, setAddressModalVisible ] = useState( false ); useEffect( () => { // Load current session if (token) { Request.post( 'sessions/get', { token: token } ).then( (response) => { if (response.success) { const { session } = response; setSessionData( session ); } } ) } }, [] ); // Set session data in view const setSessionData = (session: any) => { // Name setName( session.name ) // Address setZipcode( session.address.zipcode ); setHouseNumber( session.address.houseNumber ); setStreet( session.address.street ); setCity( session.address.city ); } // Handle const handleSave = (inputValues: Record) => { let postData: any = { token: token }; if (inputValues.name) { postData[ 'name' ] = inputValues.name; } if (inputValues.zipcode) { postData[ 'zipcode' ] = inputValues.zipcode; } if (inputValues.houseNumber) { postData[ 'houseNumber' ] = inputValues.houseNumber; } Request.post( 'sessions/update', postData ) .then( (response) => { console.log( 'save', response ); if (response.success) { setSessionData( response.session ); Message.success( 'Opgeslagen!' ) } else { Message.error( response.message ); } } ) .catch( (error) => { console.log( 'error', error ); } ) }; const logout = () => { Alert.alert( 'Uitloggen', 'Weet je het zeker?', [ { text: 'Annuleren', style: 'cancel', }, { text: 'Ja', onPress: () => { Request.post( 'sessions/delete' ).then( (response) => { console.log( 'sessions delete', response ); if (!response.success) { Message.success( 'Je bent uitgelogd' ) router.replace( '/(onboarding)/start' ); } else { Message.error( 'Er is iets mis gegaan. Probeer het later opnieuw!' ) } } ) } }, ] ); } return ( Instellingen Naam setNameModalVisible( true )}> {name} Adres setAddressModalVisible( true )}> {street} {houseNumber}. {city} Notificaties Uitloggen setNameModalVisible( false )} onSave={handleSave} fields={[ { name: 'name', placeholder: 'Je naam', defaultValue: name, }, ]} /> setAddressModalVisible( false )} onSave={handleSave} fields={[ { name: 'zipcode', title: 'Postcode', placeholder: 'Je postcode', defaultValue: zipcode, }, { name: 'houseNumber', title: 'Huisnummer', placeholder: 'Je huis nummer', defaultValue: houseNumber, }, ]} /> ); } const styles = StyleSheet.create( { container: { padding: 25, marginTop: StatusBar.currentHeight, }, titleContainer: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingBottom: 8, }, listContainer: { marginTop: 30, paddingBottom: 10 }, listItem: { flex: 1, display: 'flex', gap: 8, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', paddingBottom: 20, marginBottom: 20, borderBottomWidth: 1, borderBottomColor: '#f2f2f2', }, listIcon: { marginRight: 15, }, listTitle: { flex: 1, flexDirection: 'row', alignItems: 'center', }, listEdit: { flex: 1, flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-end', textAlign: 'right', }, listEditText: { fontWeight: '300', }, listEditIcon: { marginLeft: 10, }, logout: { color: Colors.red, }, } );