Refactor to store

This commit is contained in:
Maarten 2024-08-08 14:05:17 +02:00
parent e3a2251898
commit b619fe34f8
9 changed files with 177 additions and 70 deletions

View file

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import { StyleSheet, ScrollView, SafeAreaView, View, StatusBar, TouchableOpacity, Image } from 'react-native';
import { StyleSheet, ScrollView, SafeAreaView, View, StatusBar } from 'react-native';
// @ts-ignore
import CalendarPicker from 'react-native-calendar-picker';
import Ionicons from '@expo/vector-icons/Ionicons';
@ -12,40 +12,50 @@ import { useToken } from '@/context/AppProvider';
import { Request } from '@/services/request';
import List from '@/components/List';
import { useIsFocused } from '@react-navigation/core';
import { useSelector } from 'react-redux';
export default function HomeScreen() {
const colorScheme = useColorScheme() ?? 'light';
const isFocused = useIsFocused();
const session = useSelector((state: any) => state.data.session);
const reloadCalendar = useSelector((state: any) => state.data.reloadCalendar);
const { token, isLoading } = useToken();
const [ name, setName ] = useState( ' ' ); // Default empty space to prevent layout shifting
const [ dates, setDates ] = useState<any | null>( [] );
const [ types, setTypes ] = useState<any | null>( [] );
// Load session
useEffect( () => {
setName(session.name);
}, [session, isFocused]);
useEffect( () => {
if (token) {
Request.post( 'calendar', { token: token } ).then( (response) => {
if (response.success) {
// Set name
setName( response.name );
// Set dates
let calendarDates: any[] = [];
response.dates.forEach( (date: any) => {
calendarDates.push( {
date: new Date( date.date ),
style: { backgroundColor: date.color },
textStyle: { color: Colors.white },
allowDisabled: true,
} )
} )
setDates( calendarDates );
// Set types
setTypes( response.types );
}
} )
loadCalendar();
}
}, [ isFocused ] );
}, [ reloadCalendar, isFocused ] );
// Load calendar data
const loadCalendar = () => {
Request.post( 'calendar', { token: token } ).then( (response) => {
if (response.success) {
// Set dates
let calendarDates: any[] = [];
response.dates.forEach( (date: any) => {
calendarDates.push( {
date: new Date( date.date ),
style: { backgroundColor: date.color },
textStyle: { color: Colors.white },
allowDisabled: true,
} )
} )
setDates( calendarDates );
// Set types
setTypes( response.types );
}
} )
}
return (
<SafeAreaView style={{ flex: 1, backgroundColor: Colors[ colorScheme ].background, }}>

View file

@ -10,13 +10,13 @@ import { Colors } from '@/constants/Colors';
import { useColorScheme } from '@/hooks/useColorScheme';
import List from '@/components/List';
import { Request } from '@/services/request';
import { useToken } from '@/context/AppProvider';
import { useIsFocused } from '@react-navigation/core';
import { useSelector } from 'react-redux';
export default function MapScreen() {
const colorScheme = useColorScheme() ?? 'light';
const { token, isLoading } = useToken();
const isFocused = useIsFocused();
const session = useSelector((state: any) => state.data.session);
const [ types, setTypes ] = useState<any>( [] );
const [ coordinates, setCoordinates ] = useState<any>( [] );
@ -24,17 +24,8 @@ export default function MapScreen() {
// Load session
useEffect( () => {
if (token) {
Request.post( 'sessions/get', { token: token } ).then( (response) => {
console.log('session', response);
if (response.success) {
const { session } = response;
setCoordinates([session.coordinates.longitude, session.coordinates.latitude]);
}
} )
}
}, [isFocused]);
setCoordinates([session.coordinates.longitude, session.coordinates.latitude]);
}, [session, isFocused]);
// Load markers and types
useEffect( () => {

View file

@ -10,6 +10,7 @@ import {
} from 'react-native';
import { useRouter } from 'expo-router';
import Ionicons from '@expo/vector-icons/Ionicons';
import { useSelector } from 'react-redux';
import { ThemedText } from '@/components/ThemedText';
import { ThemedView } from '@/components/ThemedView';
@ -19,10 +20,13 @@ import { useToken } from '@/context/AppProvider';
import { Message } from '@/services/message';
import { Request } from '@/services/request';
import CustomModal from '@/components/EditModal';
import { store } from '@/store/store';
import { setSession, setReloadCalendar } from '@/store/dataStore';
export default function SettingsScreen() {
const colorScheme = useColorScheme() ?? 'light';
const { token, isLoading } = useToken();
const session = useSelector((state: any) => state.data.session);
const router = useRouter();
// Name
@ -37,22 +41,13 @@ export default function SettingsScreen() {
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 );
}
} )
}
}, [] );
setSessionData( session );
}, [session] );
// Set session data in view
const setSessionData = (session: any) => {
// Name
setName( session.name )
setName( session.name );
// Address
setZipcode( session.address.zipcode );
@ -61,7 +56,7 @@ export default function SettingsScreen() {
setCity( session.address.city );
}
// Handle
// Handle save settings
const handleSave = (inputValues: Record<string, string>) => {
let postData: any = { token: token };
@ -69,21 +64,27 @@ export default function SettingsScreen() {
postData[ 'name' ] = inputValues.name;
}
let addressChanged = false;
if (inputValues.zipcode) {
postData[ 'zipcode' ] = inputValues.zipcode;
addressChanged = true;
}
if (inputValues.houseNumber) {
postData[ 'houseNumber' ] = inputValues.houseNumber;
addressChanged = true;
}
Request.post( 'sessions/update', postData )
.then( (response) => {
console.log( 'save', response );
if (response.success) {
setSessionData( response.session );
// Save to store
store.dispatch(setSession(response.session))
store.dispatch(setReloadCalendar(addressChanged))
Message.success( 'Opgeslagen!' )
} else {
Message.error( response.message );
@ -91,6 +92,7 @@ export default function SettingsScreen() {
} );
};
// Remove session data and logout
const logout = () => {
Alert.alert( 'Uitloggen', 'Weet je het zeker?', [
{