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',