diff --git a/src/App.tsx b/src/App.tsx index 8ae52c8..76692a6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,7 @@ import {Colors} from 'react-native/Libraries/NewAppScreen'; import * as React from 'react'; import {NavigationContainer} from '@react-navigation/native'; import {createStackNavigator} from '@react-navigation/stack'; +import {useState} from 'react'; // local imports: import isLightMode from './utils/checkDarkMode'; @@ -11,27 +12,34 @@ import LoginScreen from './screens/LoginScreen'; import HomeScreen from './screens/HomeScreen'; import ProfileScreen from './screens/ProfileScreen'; import {enableScreens} from 'react-native-screens'; +import User from './utils/currentUser'; enableScreens(); const Stack = createStackNavigator(); +export const UserContext = React.createContext({ + currentUser: null, + setCurrentUser: (value: string | null) => {}, +}); + function App(): JSX.Element { + const [currentUser, setCurrentUser] = useState(null); + const backgroundStyle = { backgroundColor: isLightMode() ? Colors.darker : Colors.lighter, }; return ( - - - - - - - - // - // - // + + + + + + + + + ); } diff --git a/src/components/task.tsx b/src/components/task.tsx index f176a4d..84c2f2a 100644 --- a/src/components/task.tsx +++ b/src/components/task.tsx @@ -1,21 +1,25 @@ +//react imports import {View, Text, StyleSheet} from 'react-native'; +import React from 'react'; //local imports import themeProvider from './providers/themeProvider'; import tasks from '../utils/currentTasks'; +import {Task, Tasks} from './types'; -const tasksArray = Object.values(tasks); +const tasksArray = Object.values(tasks) as Task[]; -export default function task({item}: {item: number}): JSX.Element { +export default function task({item}: {item: string}): JSX.Element { + const {title, deadline, stakes} = tasksArray[Number(item)]; return ( - {tasksArray[item].title} - {tasksArray[item].deadline} + {title} + {deadline} - {tasksArray[item].stakes} + {stakes} ); diff --git a/src/components/types.tsx b/src/components/types.tsx new file mode 100644 index 0000000..94adb47 --- /dev/null +++ b/src/components/types.tsx @@ -0,0 +1,13 @@ +// types.ts +export type Task = { + id: number; + title: string; + description: string; + completed: boolean; + deadline: string; + stakes: string; +}; + +export type Tasks = { + [key: string]: Task; +}; diff --git a/src/screens/HomeScreen.tsx b/src/screens/HomeScreen.tsx index db92860..259c1e5 100644 --- a/src/screens/HomeScreen.tsx +++ b/src/screens/HomeScreen.tsx @@ -1,5 +1,5 @@ //dependencie imports -import React from 'react'; +import React, {useContext} from 'react'; import { SafeAreaView, StatusBar, @@ -22,6 +22,7 @@ import NavBar from '../components/navBar'; import user from '../utils/currentUser'; import Task from '../components/task'; import tasks from '../utils/currentTasks'; +import {UserContext} from '../App'; export default function HomeScreen(): JSX.Element { const backgroundStyle = { @@ -30,36 +31,39 @@ export default function HomeScreen(): JSX.Element { : themeProvider.colorsLight.background, }; + const handleUserProfilePress = () => { + console.log('user profile pressed'); + }; + + const {currentUser} = useContext(UserContext); + return ( - + { - console.log('user profile pressed'); - }}> - {user.name} + onPress={handleUserProfilePress}> + {currentUser} {Object.keys(tasks).map(key => { - console.log(key); - return ; + return ; })} - - - - + ); } const styles = StyleSheet.create({ + background: { + flex: 1, + }, taskList: {}, avatar: { width: 50, @@ -76,11 +80,5 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', }, - scroll: { - flex: 0, - }, navBar: {}, - background: { - height: '100%', - }, }); diff --git a/src/screens/LoginScreen.tsx b/src/screens/LoginScreen.tsx index 0f70e03..784d9b8 100644 --- a/src/screens/LoginScreen.tsx +++ b/src/screens/LoginScreen.tsx @@ -2,22 +2,19 @@ import React, {useState} from 'react'; import { SafeAreaView, - StatusBar, StyleSheet, Text, View, TextInput, Image, - Button, Pressable, - TouchableOpacity, } from 'react-native'; -import {Colors} from 'react-native/Libraries/NewAppScreen'; //local imports import checkCredentials from '../utils/checkCredentials'; import useIsDarkMode from '../utils/checkDarkMode'; import themeProvider from '../components/providers/themeProvider'; +import {UserContext} from '../App'; export default function LoginScreen({navigation}): JSX.Element { const backgroundStyle = { @@ -37,6 +34,8 @@ export default function LoginScreen({navigation}): JSX.Element { const [passInput, setPassInput] = React.useState(''); const [outputStatus, setOutputStatus] = React.useState(''); + const {setCurrentUser} = React.useContext(UserContext); + return ( // this is the background \/ @@ -91,9 +90,16 @@ export default function LoginScreen({navigation}): JSX.Element { onPress={() => { console.log('Username', userInput); console.log('Password', passInput); - checkCredentials(userInput, passInput) - ? navigation.navigate('HomeScreen') - : setOutputStatus('Login Failed, try again!'); + const credentialsCheckResult = checkCredentials( + userInput, + passInput, + ); + if (credentialsCheckResult !== null) { + setCurrentUser(credentialsCheckResult); + navigation.navigate('HomeScreen'); + } else { + setOutputStatus('Login Failed, try again!'); + } }}> Login @@ -124,7 +130,7 @@ const styles = StyleSheet.create({ height: '100%', }, container: { - marginTop: '50%', + marginTop: '30%', padding: 24, fontSize: 50, alignItems: 'center', diff --git a/src/utils/checkCredentials.tsx b/src/utils/checkCredentials.tsx index 8d7e03d..f685d2e 100644 --- a/src/utils/checkCredentials.tsx +++ b/src/utils/checkCredentials.tsx @@ -1,11 +1,27 @@ -const users: {[key: string]: string} = { - John: '123456', +const users = { + User1: { + username: 'John', + password: '123456', + email: 'John@gmail.com', + }, + User2: { + username: 'Jane', + password: 'Janejane', + email: 'Jane54@gmail.com', + }, }; export default function checkCredentials(username: string, password: string) { - if (users.hasOwnProperty(username) && password === users[username]) { - return true; + const lowerCaseUsername = username.toLowerCase(); + const matchingUser = Object.values(users).find( + user => + user.username.toLowerCase() === lowerCaseUsername || + user.email.toLowerCase() === lowerCaseUsername, + ); + + if (matchingUser && password === matchingUser.password) { + return matchingUser.username; } else { - return false; + return null; } } diff --git a/src/utils/currentTasks.tsx b/src/utils/currentTasks.tsx index de93d84..5fea82e 100644 --- a/src/utils/currentTasks.tsx +++ b/src/utils/currentTasks.tsx @@ -1,4 +1,7 @@ -const tasks = { +// mockData.ts +import {Task, Tasks} from '../components/types'; + +const tasks: Tasks = { 0o0: { id: 0o0, title: 'Finish React project',