Fetching users
This commit is contained in:
parent
cbbfc39c4f
commit
dd479ec289
3 changed files with 94 additions and 15 deletions
|
@ -1,12 +1,12 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
export default function Team({ teams, select }) {
|
export default function Team({ teams, users, selectTeam, selectUser }) {
|
||||||
return (
|
return (
|
||||||
<div className='teams'>
|
<div className='teams'>
|
||||||
<ul className='list'>
|
<ul className='list'>
|
||||||
{teams.map(team => (
|
{teams.map(team => (
|
||||||
<li className = 'list-item' key={team.id}>
|
<li className = 'list-item' key={team.id}>
|
||||||
<button onClick={() => select(team.name)}>
|
<button onClick={() => selectTeam(team.name)}>
|
||||||
{ team.name }
|
{ team.name }
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -7,19 +7,21 @@ export default function Home() {
|
||||||
// MARK: State
|
// MARK: State
|
||||||
let [loading, setLoading] = useState(true)
|
let [loading, setLoading] = useState(true)
|
||||||
let [loadingDetails, setLoadingDetails] = useState(true)
|
let [loadingDetails, setLoadingDetails] = useState(true)
|
||||||
|
let [loadingUsers, setLoadingUsers] = useState(true)
|
||||||
let [teams, setTeams] = useState([])
|
let [teams, setTeams] = useState([])
|
||||||
let [members, setMembers] = useState([])
|
let [users, setUsers] = useState([])
|
||||||
let [teamDetails, setTeamDetails] = useState([])
|
let [teamDetails, setTeamDetails] = useState([])
|
||||||
|
|
||||||
// MARK: Effects
|
// MARK: Effects
|
||||||
|
|
||||||
// MAKR: - Load teams from Tempo backend on initialization
|
// MARK: - Load teams from Tempo backend on initialization
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let fetchData = async() => {
|
let fetchData = async() => {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
try {
|
try {
|
||||||
let result = await axios(config.api + '/team/')
|
let result = await axios(config.api + '/team/')
|
||||||
if (result.data) {
|
if (result.data) {
|
||||||
|
console.log('teams fetched')
|
||||||
setTeams(result.data)
|
setTeams(result.data)
|
||||||
}
|
}
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
|
@ -33,45 +35,84 @@ export default function Home() {
|
||||||
fetchData()
|
fetchData()
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
// MARK: Callbacks
|
|
||||||
|
|
||||||
let select = (selected) => {
|
|
||||||
console.log('Selected ' + selected)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Load teams' details
|
// MARK: - Load teams' details
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
let fetched = 0
|
||||||
|
|
||||||
teams.map(team => {
|
teams.map(team => {
|
||||||
let fetchData = async() => {
|
let fetchData = async() => {
|
||||||
try {
|
try {
|
||||||
setLoadingDetails(true)
|
setLoadingDetails(true)
|
||||||
let result = await axios(config.api + '/team/' + team.id)
|
let result = await axios(config.api + '/team/' + team.id)
|
||||||
if (result.data) {
|
if (result.data) {
|
||||||
|
fetched++
|
||||||
setTeamDetails(t => [...t, result.data])
|
setTeamDetails(t => [...t, result.data])
|
||||||
|
if (fetched === teams.length) {
|
||||||
|
setLoadingDetails(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setLoadingDetails(false)
|
|
||||||
}
|
}
|
||||||
catch(err) {
|
catch(err) {
|
||||||
setLoadingDetails(false)
|
fetched++
|
||||||
|
if (fetched === teams.length) {
|
||||||
|
setLoadingDetails(false)
|
||||||
|
}
|
||||||
console.log('Fetch data error: ' + err)
|
console.log('Fetch data error: ' + err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchData()
|
fetchData()
|
||||||
|
|
||||||
|
return null
|
||||||
})
|
})
|
||||||
}, [teams])
|
}, [teams])
|
||||||
|
|
||||||
|
// MARK: - Load users
|
||||||
|
useEffect(() => {
|
||||||
|
let fetchData = async() => {
|
||||||
|
setLoadingUsers(true)
|
||||||
|
try {
|
||||||
|
let result = await axios(config.api + '/user/')
|
||||||
|
if (result.data) {
|
||||||
|
setUsers(result.data)
|
||||||
|
}
|
||||||
|
setLoadingUsers(false)
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
setLoadingUsers(false)
|
||||||
|
console.log('Fetch data error: ' + err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData()
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// MARK: Callbacks
|
||||||
|
|
||||||
|
let selectTeam = (selectedTeam) => {
|
||||||
|
console.log('Selected team ' + selectedTeam)
|
||||||
|
}
|
||||||
|
|
||||||
|
let selectUser = (selectedUser) => {
|
||||||
|
console.log('Selected user ' + selectedUser)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: Return
|
// MARK: Return
|
||||||
return (
|
return (
|
||||||
<div className='home'>
|
<div className='home'>
|
||||||
<h1>Tempo</h1>
|
<h1>Tempo</h1>
|
||||||
|
|
||||||
{loading ? (<div>Loading...</div>) : (
|
{loading || loadingUsers ? (<div>Loading...</div>) : (
|
||||||
teams !== undefined &&
|
teams !== undefined &&
|
||||||
<Team teams={teams} select={select} />
|
<Team
|
||||||
|
teams = {teams}
|
||||||
|
users = {users}
|
||||||
|
selectTeam = {selectTeam}
|
||||||
|
selectUser = {selectUser}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{loadingDetails ? (<div>Loading...</div>) : (
|
{loadingDetails || loadingUsers ? (<div>Loading...</div>) : (
|
||||||
teamDetails !== undefined &&
|
teamDetails !== undefined &&
|
||||||
<div className='details'>
|
<div className='details'>
|
||||||
<ul className='list'>
|
<ul className='list'>
|
||||||
|
|
38
src/views/User.jsx
Normal file
38
src/views/User.jsx
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import React, { useState, useEffect } from 'react'
|
||||||
|
import axios from 'axios'
|
||||||
|
import config from '../config.json'
|
||||||
|
|
||||||
|
export default function User({ userId }) {
|
||||||
|
// MARK: State
|
||||||
|
let [loading, setLoading] = useState(true)
|
||||||
|
let [user, setUser] = useState([])
|
||||||
|
|
||||||
|
// MARK: Effect
|
||||||
|
|
||||||
|
// MARK: - Load user info from Tempo backend on initialization
|
||||||
|
useEffect(() => {
|
||||||
|
let fetchData = async() => {
|
||||||
|
setLoading(true)
|
||||||
|
try {
|
||||||
|
let result = await axios(config.api + '/user/' + userId)
|
||||||
|
if (result.data) {
|
||||||
|
setUser(result.data)
|
||||||
|
}
|
||||||
|
setLoading(false)
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
setLoading(false)
|
||||||
|
console.log('Fetch data error: ' + err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData()
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// MARK: Return
|
||||||
|
return (
|
||||||
|
<div className='user'>
|
||||||
|
<h1>User { userId }</h1>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue