From acba2bd6554bc300c32a34e066220e95df5f6da7 Mon Sep 17 00:00:00 2001 From: Rodrigo Pedroso <> Date: Thu, 27 Jun 2019 17:07:02 -0400 Subject: [PATCH] Members view --- src/components/Router.jsx | 71 ++++++++----------- src/components/{Team.jsx => TeamList.jsx} | 4 +- src/views/Home.jsx | 10 +-- src/views/Member.jsx | 86 +++++++++++++++++++++++ src/views/Team.jsx | 52 ++++++++++---- 5 files changed, 160 insertions(+), 63 deletions(-) rename src/components/{Team.jsx => TeamList.jsx} (67%) create mode 100644 src/views/Member.jsx diff --git a/src/components/Router.jsx b/src/components/Router.jsx index 82fb77f..8413bc1 100644 --- a/src/components/Router.jsx +++ b/src/components/Router.jsx @@ -1,65 +1,52 @@ import React, { useState } from 'react' import { Router as ReactRouter, Route, Switch } from 'react-router-dom' import history from '../history.js' -// import { createBrowserHistory as createHistory } from 'history' - -/* Site */ import Home from '../views/Home' import Team from '../views/Team' -// import Member from '../views/Member' +import Member from '../views/Member' -// const history = createHistory() history.listen(location => { window.scrollTo(0,0) }) export default function Router(props) { - let [team, setTeam] = useState('Rodrigo') + let [team, setTeam] = useState([]) + let [allTeams, setAllTeams] = useState([]) + let [users, setUsers] = useState([]) + let [userId, setUserId] = useState([]) let teamCallback = (el) => { setTeam(el) } + let usersCallback = (el) => { + setUsers(el) + } + + let userIdCallback = (el) => { + setUserId(el) + } + + let allTeamsCallback = (el) => { + setAllTeams(el) + } + return ( - } /> - } /> + } + /> + } + /> + } + /> ) } - -// } /> - -// class Router extends React.Component { -// constructor(props) { -// super(props) -// } - -// componentDidMount() { -// ReactGA.pageview(window.location.pathname) -// } - -// render() { -// return ( -// -// -// -// -// ( -//
-// } /> -// -//
-// )} -// /> -//
-//
-// ) -// } -// } - -// export default Router diff --git a/src/components/Team.jsx b/src/components/TeamList.jsx similarity index 67% rename from src/components/Team.jsx rename to src/components/TeamList.jsx index ed7cad8..906b72d 100644 --- a/src/components/Team.jsx +++ b/src/components/TeamList.jsx @@ -1,13 +1,13 @@ import React from 'react' -export default function Team({ teams, users, selectTeam, selectUser }) { +export default function TeamList({ teams, users, selectTeam, selectUser }) { return (
    {teams.map(team => (
  • -
    diff --git a/src/views/Home.jsx b/src/views/Home.jsx index 24bb4f2..e2a2a56 100644 --- a/src/views/Home.jsx +++ b/src/views/Home.jsx @@ -3,7 +3,7 @@ import React, { useState, useEffect } from 'react' import history from '../history.js' import axios from 'axios' import config from '../config.json' -import Team from '../components/Team.jsx' +import TeamList from '../components/TeamList.jsx' import FilterForm from '../components/FilterForm.jsx' export default function Home(props) { @@ -94,9 +94,9 @@ export default function Home(props) { // MARK: Callbacks let selectTeam = (selectedTeam) => { - console.log('Selected team ' + selectedTeam) - - props.teamCallback('Pedroso') + props.teamCallback(selectedTeam) + props.usersCallback(users) + props.allTeamsCallback(teams) history.push('/team') } @@ -121,7 +121,7 @@ export default function Home(props) { {loading || loadingUsers ? (
    Loading...
    ) : ( teams !== undefined && - { + let fetchData = async() => { + setLoading(true) + try { + let result = await axios(config.api + '/user/' + props.userId) + if (result.data) { + setUser(result.data) + result.data.member_teams.map(teamId => { + let arr = props.teams.filter(el => el.id === teamId) + setTeamNames(t => [...t, arr[0].name]) + }) + } + setLoading(false) + } + catch(err) { + setLoading(false) + console.log('Fetch data error: ' + err) + } + } + + fetchData() + }, [props]) + + // useEffect(() => { + // user.member_teams.map(teamId => { + // let arr = props.teams.filter(el => el.id === teamId) + // setTeamNames(t => [...t, arr[0].name]) + + // return null + // }) + // }, [props, user]) + + // MARK: Helpers + let teamData = (teamId) => { + let arr = props.teams.filter(el => el.id === teamId) + return arr[0].name + } + + let navBack = () => { + history.push('/team') + } + + // MARK: Return + return ( +
    + + + + + {loading ? (
    Loading...
    ) : ( + user !== undefined && +
    +

    {user.name}

    + +

    Username:

    +

    {user.username}

    + +

    Member of:

    +
      + {teamNames.map((name, index) => ( +
    • + {name} +
    • + ))} +
    +
    + )} + +
    + ) +} diff --git a/src/views/Team.jsx b/src/views/Team.jsx index 2a02c3e..a14b08a 100644 --- a/src/views/Team.jsx +++ b/src/views/Team.jsx @@ -1,10 +1,12 @@ // MARK: Definitions import React, { useState, useEffect } from 'react' import axios from 'axios' +import history from '../history.js' import config from '../config.json' import FilterForm from '../components/FilterForm.jsx' -export default function User({ teamId }) { +// teamProps, usersProps, userIdCallback +export default function Team(props) { // MARK: State let [loading, setLoading] = useState(true) let [team, setTeam] = useState([]) @@ -16,7 +18,7 @@ export default function User({ teamId }) { let fetchData = async() => { setLoading(true) try { - let result = await axios(config.api + '/team/2') + let result = await axios(config.api + '/team/' + props.teamProps.id) if (result.data) { setTeam(result.data) } @@ -29,29 +31,51 @@ export default function User({ teamId }) { } fetchData() - }, [teamId]) + }, [props]) - // MARK: Callbacks - // let filterCallback = (e) => { - // let filtered = teams.filter(team => { - // return team.name.toUpperCase().includes(e.target.value.toUpperCase()) - // }) + // MARK: Helpers + let userData = (userId) => { + let arr = props.usersProps.filter(el => el.id === userId) + return arr[0].name + } - // setFilteredTeams(filtered) - // } + let selectUser = (id) => { + props.userIdCallback(id) + history.push('/member') + } + + let navBack = () => { + history.push('/') + } // MARK: Return return (
    -

    Team

    + - {teamId !== undefined && -

    {teamId}

    + {props.teamProps !== undefined && +

    {props.teamProps.name}

    } {loading ? (
    Loading...
    ) : ( team !== undefined && -

    {team.name}

    +
    +

    Team lead

    + +

    { userData(team.lead) }

    + +

    Team members

    + +
      + {team.members.map((member, index) => ( +
    • + +
    • + ))} +
    +
    )}
    )