Add page to authenticate user

This commit is contained in:
Nat 2021-03-29 18:51:34 -03:00
parent 00d21265cb
commit 42a9036547
4 changed files with 158 additions and 1 deletions

8
package-lock.json generated
View File

@ -1345,6 +1345,14 @@
} }
} }
}, },
"@react-native-async-storage/async-storage": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.14.1.tgz",
"integrity": "sha512-UkLUox2q5DKNYB6IMUzsuwrTJeXGLySvtQlnrqd3fd+96JErCT4X3xD+W1cvQjes0nm0LbaELbwObKc+Tea7wA==",
"requires": {
"deep-assign": "^3.0.0"
}
},
"@react-native-community/cli-debugger-ui": { "@react-native-community/cli-debugger-ui": {
"version": "4.9.0", "version": "4.9.0",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.9.0.tgz", "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.9.0.tgz",

View File

@ -8,6 +8,7 @@
"eject": "expo eject" "eject": "expo eject"
}, },
"dependencies": { "dependencies": {
"@react-native-async-storage/async-storage": "^1.14.1",
"@react-native-community/masked-view": "0.1.10", "@react-native-community/masked-view": "0.1.10",
"@react-navigation/core": "5.2.3", "@react-navigation/core": "5.2.3",
"@react-navigation/native": "5.1.1", "@react-navigation/native": "5.1.1",

View File

@ -9,6 +9,7 @@ import { registerRootComponent } from 'expo';
import ViewPostJsx from "src/components/pages/view-post"; import ViewPostJsx from "src/components/pages/view-post";
import ViewCommentsJsx from "src/components/pages/view-comments.js"; import ViewCommentsJsx from "src/components/pages/view-comments.js";
import AuthenticateJsx from "src/components/pages/authenticate";
import FeedJsx from "src/components/pages/feed"; import FeedJsx from "src/components/pages/feed";
import ProfileJsx, { ViewProfileJsx } from "src/components/pages/profile"; import ProfileJsx, { ViewProfileJsx } from "src/components/pages/profile";
import DiscoverJsx from 'src/components/pages/discover'; import DiscoverJsx from 'src/components/pages/discover';
@ -19,6 +20,7 @@ import UserListJsx from "src/components/pages/user-list.js";
import SettingsJsx from "src/components/pages/profile/settings.js"; import SettingsJsx from "src/components/pages/profile/settings.js";
const Stack = createStackNavigator({ const Stack = createStackNavigator({
Authenticate: { screen: AuthenticateJsx },
Feed: { screen: FeedJsx, }, Feed: { screen: FeedJsx, },
Discover: { screen: DiscoverJsx }, Discover: { screen: DiscoverJsx },
Notifications: { screen: NotificationsJsx }, Notifications: { screen: NotificationsJsx },
@ -31,7 +33,7 @@ const Stack = createStackNavigator({
ViewHashtag: { screen: ViewHashtagJsx }, ViewHashtag: { screen: ViewHashtagJsx },
UserList: { screen: UserListJsx } UserList: { screen: UserListJsx }
}, { }, {
initialRouteKey: "Feed", initialRouteKey: "Authenticate",
headerMode: "none", headerMode: "none",
navigationOptions: { navigationOptions: {
headerVisible: false headerVisible: false

View File

@ -0,0 +1,146 @@
import React, { useState, useEffect } from "react";
import {
SafeAreaView,
View,
TextInput,
TouchableOpacity,
Text,
Image,
Dimensions,
} from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
const TEST_IMAGE = "https://cache.desktopnexus.com/thumbseg/2255/2255124-bigthumbnail.jpg";
const TEST_PROFILE = {
username: "njms",
acct: "njms",
display_name: "Nat🔆",
locked: false,
bot: false,
note: "Yeah heart emoji.",
avatar: TEST_IMAGE,
followers_count: "1 jillion",
statuses_count: 334,
fields: [
{
name: "Blog",
value: "<a href=\"https://njms.ca\">https://njms.ca</a>",
verified_at: "some time"
},
{
name: "Github",
value: "<a href=\"https://github.com/natjms\">https://github.com/natjms</a>",
verified_at: null
}
]
};
const AuthenticateJsx = ({navigation}) => {
const [state, setState] = useState({
acct: "",
password: "",
authChecked: false,
});
useEffect(() => {
const profile = AsyncStorage.getItem("@user_profile").then((profile) => {
if (profile != null) {
navigation.navigate("feed");
}
setState({...state, authChecked: true});
});
}, []);
const loginCallback = async () => {
const profileJSON = JSON.stringify(TEST_PROFILE);
AsyncStorage.setItem("@user_profile", profileJSON).then(() => {
navigation.navigate("Feed");
});
};
return (
<SafeAreaView style = { styles.container }>
{
state.authChecked
? <View style = { styles.innerContainer }>
<View style = { styles.logo.container }>
<Image
style = { styles.logo.image }
resizeMode = { "contain" }
source = { require("assets/logo/logo-standalone.png") }/>
</View>
<Text style = { styles.label }> Account name </Text>
<TextInput
style = { styles.input }
placeholder = { "name@domain.tld" }
onChangeText = {
value => setState({ ...state, acct: value })
}/>
<Text style = { styles.label }> Password </Text>
<TextInput
style = { styles.input }
placeholder = { "************" }
secureTextEntry = { true }
onChangeText = {
value => setState({ ...state, password: value })
}/>
<TouchableOpacity
style = { styles.login.button }
onPress = { loginCallback }>
<Text style = { styles.login.label }> Login </Text>
</TouchableOpacity>
</View>
: <></>
}
</SafeAreaView>
);
};
const SCREEN_WIDTH = Dimensions.get("window").width;
const SCREEN_HEIGHT = Dimensions.get("window").height;
const styles = {
container: {
justifyContent: "center",
alignItems: "center",
height: SCREEN_HEIGHT,
},
innerContainer: {
width: SCREEN_WIDTH / 1.5,
},
logo: {
container: {
alignItems: "center",
marginBottom: 30,
},
image: {
width: 100,
height: 100,
}
},
label: {
fontWeight: "bold",
color: "#888",
},
input: {
padding: 10,
borderBottomWidth: 1,
borderBottomColor: "#888",
marginBottom: 10,
},
login: {
button: {
borderWidth: 1,
borderColor: "#888",
borderRadius: 5,
padding: 15,
},
label: {
textAlign: "center",
},
},
};
export { AuthenticateJsx as default };