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

79 lines
1.9 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'
2019-07-25 23:45:01 -04:00
import history from '../history.js'
2019-07-17 00:14:21 -04:00
// import config from '../config.json'
2019-06-28 01:20:29 -04:00
import './Member.scss'
2019-06-27 17:07:02 -04:00
2019-07-17 00:14:21 -04:00
export default function Member({ props }) {
2019-07-25 23:45:01 -04:00
// MARK: State
let [user, setUser] = useState(null)
let [teamNames, setTeamNames] = useState([])
2019-06-27 17:07:02 -04:00
2019-07-25 23:45:01 -04:00
// MARK: Effects
// MARK: - Load user info from Tempo backend on initialization
useEffect(() => {
let fetchData = async () => {
try {
let result = await axios.get(props.url)
if (result.data) {
setUser(result.data)
2019-06-27 18:23:50 -04:00
2019-07-25 23:45:01 -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
2019-07-25 23:45:01 -04:00
return null
})
}
} catch (err) {
history.push('/')
}
}
2019-06-27 17:07:02 -04:00
2019-07-25 23:45:01 -04:00
fetchData()
}, [props])
2019-06-27 17:07:02 -04:00
2019-07-25 23:45:01 -04:00
// MARK: Helpers
let navBack = () => {
history.push('/team')
}
2019-06-27 17:07:02 -04:00
2019-07-25 23:45:01 -04:00
// MARK: Return
return (
<div className="member">
{user === null ? (
<div data-testid="loading">Loading...</div>
) : (
user !== undefined && (
<div>
<div className="header">
<span data-testid="resolved">
<h1>Member {user.name}</h1>
</span>
</div>
2019-06-27 17:07:02 -04:00
2019-07-25 23:45:01 -04:00
<div className="back">
<button className="back-btn" onClick={navBack}>{`< Back to team`}</button>
</div>
2019-06-28 01:20:29 -04:00
2019-07-25 23:45:01 -04:00
<h2>Username:</h2>
<div className="username">
<p>{user.username}</p>
</div>
2019-06-27 17:07:02 -04:00
2019-07-25 23:45:01 -04:00
<h2>Member of:</h2>
<ul className="list">
{teamNames.map((name, index) => (
<li className="list-item" key={index}>
<div className="username">{name}</div>
</li>
))}
</ul>
</div>
)
)}
</div>
)
2019-06-27 17:07:02 -04:00
}