react-hooks-unit-tests/src/views/Member.jsx

87 lines
1.8 KiB
React
Raw Normal View History

2019-06-27 17:07:02 -04:00
// MARK: Definitions
import React, { useState, useEffect } from 'react'
import axios from 'axios'
import history from '../history.js'
import config from '../config.json'
2019-06-28 01:20:29 -04:00
import './Member.scss'
2019-06-27 17:07:02 -04:00
// teamProps, usersProps, userIdCallback
export default function Member(props) {
// MARK: State
let [loading, setLoading] = useState(true)
let [user, setUser] = useState([])
let [teamNames, setTeamNames] = useState([])
2019-06-28 01:20:29 -04:00
// MARK: Effects
2019-06-27 17:07:02 -04:00
// MARK: - Load user info from Tempo backend on initialization
useEffect(() => {
let fetchData = async() => {
setLoading(true)
try {
let result = await axios(config.api + '/user/' + props.userId)
if (result.data) {
setUser(result.data)
2019-06-27 18:23:50 -04:00
2019-06-27 17:07:02 -04:00
result.data.member_teams.map(teamId => {
let arr = props.teams.filter(el => el.id === teamId)
setTeamNames(t => [...t, arr[0].name])
2019-06-27 18:23:50 -04:00
return null
2019-06-27 17:07:02 -04:00
})
}
setLoading(false)
}
catch(err) {
setLoading(false)
console.log('Fetch data error: ' + err)
2019-06-28 01:20:29 -04:00
history.push('/')
2019-06-27 17:07:02 -04:00
}
}
fetchData()
}, [props])
// MARK: Helpers
let navBack = () => {
history.push('/team')
}
2019-06-27 18:23:50 -04:00
2019-06-27 17:07:02 -04:00
// MARK: Return
return (
2019-06-28 01:20:29 -04:00
<div className='member'>
2019-06-27 17:07:02 -04:00
{loading ? (<div>Loading...</div>) : (
user !== undefined &&
<div>
2019-06-28 01:20:29 -04:00
<div className='header'>
<h1>Member {user.name}</h1>
</div>
<div className='back'>
<button className='back-btn' onClick={navBack}>{`< Back to team`}</button>
</div>
2019-06-27 17:07:02 -04:00
<h2>Username:</h2>
2019-06-28 01:20:29 -04:00
<div className='username'>
<p>{user.username}</p>
</div>
2019-06-27 17:07:02 -04:00
<h2>Member of:</h2>
<ul className='list'>
{teamNames.map((name, index) => (
2019-06-28 01:20:29 -04:00
<li className='list-item' key={index}>
<div className='username'>
{name}
</div>
2019-06-27 17:07:02 -04:00
</li>
))}
</ul>
</div>
)}
</div>
)
}