-
Notifications
You must be signed in to change notification settings - Fork 91
/
home.js
91 lines (83 loc) · 2.63 KB
/
home.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import React, { useState, useEffect, useContext } from 'react'
import Feed from '../components/feed'
import Nav from './../components/nav'
import Search from './../components/search'
import Fweeter from '../components/fweeter'
import { faunaQueries } from '../fauna/query-manager'
import { safeVerifyError } from '../fauna/helpers/errors'
import { toast } from 'react-toastify'
import SessionContext from '../context/session'
const Home = () => {
const [state, setState] = useState({
fweets: [],
loaded: false,
error: false
})
// Fetch the fweets on first load.
const sessionContext = useContext(SessionContext)
const { user } = sessionContext.state
useEffect(() => {
if (user) {
faunaQueries
.getFweets()
.then(result => {
setState({
fweets: result,
loaded: true
})
})
.catch(err => {
console.log(err)
const rawError = safeVerifyError(err, ['requestResult', 'responseRaw'])
if (rawError && rawError.includes('Rate limiting')) {
setState({ error: { message: 'Rate-limiting' }, fweets: [], loaded: true })
toast.warn('You are reloading too fast')
} else if (rawError && rawError.includes('permission denied')) {
setState({ error: { message: 'Permission denied!' }, fweets: [], loaded: true })
toast.error('No data permissions')
} else {
setState({ error: err, fweets: [], loaded: true })
toast.error('Unknown error')
}
})
}
}, [user])
const handleCreateFweet = (message, asset) => {
return faunaQueries
.createFweet(message, asset)
.then(fweetArray => {
setState({
fweets: fweetArray.concat(state.fweets),
loaded: true
})
toast.success('Fweeted')
})
.catch(err => {
const rawError = safeVerifyError(err, ['requestResult', 'responseRaw'])
if (rawError.includes('Rate limiting')) {
toast.warn('You are fweeting too fast')
} else {
console.error('error on Fweet', err)
toast.error('Fweet failed')
}
})
}
const update = (fweets, loaded, error) => {
setState({
fweets: fweets,
loaded: loaded,
error: error
})
}
return (
<React.Fragment>
<Nav />
<div className="main-column">
{user ? <Fweeter handleCreateFweet={handleCreateFweet}></Fweeter> : null}
<Feed update={update} error={state.error} loaded={state.loaded} fweets={state.fweets} />
</div>
{user ? <Search /> : null}
</React.Fragment>
)
}
export default Home