diff --git a/src/App.js b/src/App.js
index 284b512..b9121eb 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,4 +1,4 @@
-import React from "react";
+import React, { useState, useContext } from "react";
import { NavigationContainer } from "@react-navigation/native";
import navigationTheme from "./app/navigation/navigationTheme";
@@ -7,24 +7,31 @@ import openDatabase from "./app/database/database-connection";
import initDatabase from "./app/database/database-init";
import FlashMessage from "react-native-flash-message";
-import { createStackNavigator } from '@react-navigation/stack';
+import { createStackNavigator } from "@react-navigation/stack";
import AppNavigator from "./app/navigation/AppNavigator";
import EventLocationProvider from "./app/context/EventLocationContext";
import CurrentLocationProvider from "./app/context/CurrentLocationContext";
+import AuthNavigator from "./app/navigation/AuthNavigator";
+import { AuthContextProvider } from "./app/auth/context";
export default function App() {
+ const [user, AuthProvider] = AuthContextProvider();
+ console.log("asidhisdhaisu " + JSON.stringify(user));
+
global.userDataBase = openDatabase();
initDatabase(global.userDataBase);
const Stack = createStackNavigator();
return (
-
-
-
-
-
-
-
-
+
+
+
+
+ {user !== undefined ? : }
+
+
+
+
+
);
}
diff --git a/src/app/api/auth.js b/src/app/api/auth.js
new file mode 100644
index 0000000..fa9581c
--- /dev/null
+++ b/src/app/api/auth.js
@@ -0,0 +1,11 @@
+function login(name, password) {
+ // NOTE: Change to API in future
+
+ return {
+ name: "Fulano De Tal",
+ email: "fulano@detal.com",
+ ID: "1",
+ };
+}
+
+export default login;
diff --git a/src/app/auth/context.js b/src/app/auth/context.js
new file mode 100644
index 0000000..51a59d6
--- /dev/null
+++ b/src/app/auth/context.js
@@ -0,0 +1,22 @@
+import React, { useState } from "react";
+
+const AuthContext = React.createContext();
+
+function AuthContextProvider() {
+ const [user, setUser] = useState();
+
+ const provider = ({ children }) => (
+
+ {children}
+
+ );
+
+ return [user, provider];
+}
+
+export { AuthContextProvider, AuthContext };
diff --git a/src/app/config/dimensions.js b/src/app/config/dimensions.js
index 9b5f45e..0a445d2 100644
--- a/src/app/config/dimensions.js
+++ b/src/app/config/dimensions.js
@@ -12,6 +12,7 @@ const dimensions = {
},
spacing: {
+ big_padding: 30,
normal_padding: 10,
minimal_padding: 5,
},
diff --git a/src/app/screens/LoginScreen.js b/src/app/screens/LoginScreen.js
index ecdd7f6..24159e5 100644
--- a/src/app/screens/LoginScreen.js
+++ b/src/app/screens/LoginScreen.js
@@ -1,18 +1,100 @@
-import React from "react";
+import React, { useState, useContext } from "react";
import { StyleSheet, View, Text } from "react-native";
+import * as Yup from "yup";
+import {
+ Form,
+ SubmitButton,
+ FormField,
+ ErrorMessage,
+} from "../components/forms";
+import Screen from "../components/Screen";
+import colors from "../config/colors";
+import { dimensions } from "../config/dimensions";
+import { TouchableNativeFeedback } from "react-native-gesture-handler";
+import login from "../api/auth";
+import { AuthContext } from "../auth/context";
-export default function LoginScreen() {
+const phoneRegex = RegExp(
+ /^\(?[\(]?([0-9]{2})?\)?[)\b]?([0-9]{4,5})[-. ]?([0-9]{4})$/
+);
+
+const validationSchema = Yup.object().shape({
+ name: Yup.string()
+ .matches(phoneRegex, "Número inválido")
+ .required("O número de telefone é obrigatório"),
+ password: Yup.string()
+ .required("A senha é obrigatória")
+ .min(8, "Senha muito curta, minimo 8 caracteres")
+ .matches(/[a-zA-Z]/, "A senha só pode conter letras"),
+});
+
+export default function LoginScreen(props) {
+ const authContext = useContext(AuthContext);
+
+ const handleSubmit = (name, password, setLoginFailed) => {
+ const result = login(name, password);
+
+ if (!result) return setLoginFailed(true);
+ setLoginFailed(false);
+ authContext.setUser(result);
+ };
+
+ const [loginFailed, setLoginFailed] = useState(false);
return (
-
- Login
-
+
+
+
);
}
const styles = StyleSheet.create({
containter: {
- flex: 1,
+ padding: 10,
justifyContent: "center",
- alignItems: "center",
+ },
+ title: {
+ alignSelf: "center",
+ fontSize: dimensions.text.header,
+ marginBottom: dimensions.spacing.big_padding,
},
});