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

124 lines
3 KiB
React
Raw Normal View History

2019-06-26 18:25:30 -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-06-26 18:25:30 -04:00
import FilterForm from '../components/FilterForm.jsx'
2019-06-28 00:35:10 -04:00
import './Team.scss'
2019-06-26 18:25:30 -04:00
2019-06-27 17:07:02 -04:00
export default function Team(props) {
2019-07-25 23:45:01 -04:00
// MARK: State
let [team, setTeam] = useState([])
let [members, setMembers] = useState([])
let [filteredMembers, setFilteredMembers] = useState([])
// MARK: Effect
// MARK: - Load user info from Tempo backend on initialization
useEffect(() => {
let fetchData = async () => {
try {
let result = await axios(props.url)
if (result.data) {
setTeam(result.data)
result.data.members.map(memberId => {
let arr = props.users.filter(el => el.id === memberId)
if (arr[0] !== undefined) {
let tupple = {
name: arr[0].name,
id: memberId
}
setMembers(t => [...t, tupple])
setFilteredMembers(t => [...t, tupple])
} else {
history.push('/')
}
return null
})
} else {
history.push('/')
}
} catch (err) {
console.log('Fetch data error: ' + err)
}
}
fetchData()
}, [props])
// MARK: Helpers
let userData = userId => {
if (props.users === undefined) {
history.push('/')
} else {
let arr = props.users.filter(el => el.id === userId)
if (arr[0] !== undefined) {
return arr[0].name
} else {
history.push('/')
}
}
}
let selectUser = id => {
props.cb(id)
history.push('/member')
}
let filterCallback = e => {
let filtered = members.filter(member => {
return member.name.toUpperCase().includes(e.target.value.toUpperCase())
})
setFilteredMembers(filtered)
}
let navBack = () => {
history.push('/')
}
// MARK: Return
return (
<div className="team">
{props.team !== undefined && (
<div className="header">
<h1>Team {props.team.name}</h1>
</div>
)}
<div className="back">
<button className="back-btn" onClick={navBack}>{`< Back to teams`}</button>
</div>
<FilterForm filterCallback={filterCallback} />
{team.length == 0 ? (
<div data-testId="loading">Loading...</div>
) : (
team !== undefined && (
<div>
<h2>Team lead</h2>
<button data-testId="resolved" className="selector-btn" onClick={() => selectUser(team.lead)}>
{userData(team.lead)}
</button>
<h2>Team members</h2>
<ul className="list">
{filteredMembers.map((member, index) => (
<li className="list-item" key={index}>
<button className="selector-btn" onClick={() => selectUser(member.id)}>
{member.name}
</button>
</li>
))}
</ul>
</div>
)
)}
</div>
)
2019-06-26 18:25:30 -04:00
}