/
auth.js
58 lines (47 loc) · 1.33 KB
/
auth.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import React from 'react';
import { AsyncStorage } from 'react-native';
const defaultState = {
checkedAuth: false,
isLoggedIn: false,
};
export const AUTH_KEY = 'auth-demo-key';
const AuthContext = React.createContext(defaultState);
export const Consumer = AuthContext.Consumer;
export class Provider extends React.Component {
state = defaultState;
componentDidMount() {
AsyncStorage.getItem('authData')
.then((state) => {
this.setState({
...JSON.parse(state),
checkedAuth: true,
});
});
}
componentDidUpdate() {
AsyncStorage.setItem('authData', JSON.stringify({ ...this.state, checkedAuth: false }));
}
createAccount = () => new Promise((resolve) => {
this.setState({ isLoggedIn: true, checkedAuth: true }, () => resolve());
})
logIn = () => new Promise((resolve) => {
this.setState({ isLoggedIn: true, checkedAuth: true }, () => resolve());
});
logOut = () => new Promise((resolve) => {
this.setState({ ...defaultState, checkedAuth: true }, () => resolve());
})
render() {
return (
<AuthContext.Provider
value={{
...this.state,
createAccount: this.createAccount,
logIn: this.logIn,
logOut: this.logOut,
}}
>
{this.props.children}
</AuthContext.Provider>
);
}
}