Skip to content
This repository was archived by the owner on Jun 10, 2019. It is now read-only.

Commit f49d9ab

Browse files
Merge pull request #944 from jjhampton/943-team-page-api
Fetch team member data from API instead of using static client-side data files
2 parents 82b7049 + ae98750 commit f49d9ab

File tree

4 files changed

+88
-218
lines changed

4 files changed

+88
-218
lines changed

src/scenes/home/team/boardMembers.js

Lines changed: 0 additions & 91 deletions
This file was deleted.

src/scenes/home/team/executiveStaff.js

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/scenes/home/team/team.js

Lines changed: 86 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,94 @@
1-
import React from 'react';
1+
import React, { Component } from 'react';
2+
import axios from 'axios';
23
import Section from 'shared/components/section/section';
34
import QuoteBanner from 'shared/components/quoteBanner/quoteBanner';
45
import TeamCard from 'shared/components/teamCard/teamCard';
5-
import BoardMembers from './boardMembers';
6-
import ExecutiveStaff from './executiveStaff';
76
import styles from './team.css';
87

9-
const Team = () => (
10-
<div>
11-
<QuoteBanner
12-
author="Abraham Lincoln"
13-
quote="To care for him who shall have borne the battle and for his widow, and his orphan."
14-
/>
15-
16-
<Section title="Our Board" theme="white">
17-
<div className={styles.boardMembers}>
18-
{BoardMembers.map(boardMember => (
19-
<TeamCard
20-
key={`${boardMember.name} + ${boardMember.role}`}
21-
name={boardMember.name}
22-
role={boardMember.role}
23-
description={boardMember.description}
24-
imageSrc={boardMember.imageSrc}
25-
/>
26-
))}
27-
</div>
28-
<div className={styles.foundingMembers}>
29-
<p>
30-
Operation Code deeply appreciates the time, energy, and hard work of
31-
our <b>Founding Board Members</b>, including Mark Kerr (Chair), Laura
32-
Gomez (Vice Chair), Pete Runyon (Secretary/ Treasurer), Josh Carter,
33-
Nick Frost, and Aimee Knight on their support, dedication and
34-
commitment in the early days.
35-
</p>
36-
37-
<p style={{ textAlign: 'center' }}>
38-
<em>Thank you for setting us up for success!</em>
39-
</p>
40-
</div>
41-
</Section>
42-
43-
<Section title="Our Executive Staff" theme="white">
44-
<div className={styles.executiveStaff}>
45-
{ExecutiveStaff.map(staff => (
46-
<TeamCard
47-
key={`${staff.name} + ${staff.role}`}
48-
name={staff.name}
49-
role={staff.role}
50-
slack={staff.slackUsername}
51-
email={staff.email}
52-
isBoard={false}
53-
/>
54-
))}
8+
class Team extends Component {
9+
constructor(props) {
10+
super(props);
11+
12+
this.state = {
13+
boardMembers: null,
14+
executiveStaffMembers: null,
15+
errorResponse: false
16+
};
17+
}
18+
19+
componentDidMount() {
20+
axios
21+
.get('https://api.operationcode.org/api/v1/team_members.json')
22+
.then((response) => {
23+
const sortById = members => members.sort((a, b) => a.id - b.id);
24+
const sortedMembers = sortById(response.data);
25+
26+
const boardMembers = sortedMembers.filter(x => x.group === 'board');
27+
let executiveStaffMembers = sortedMembers.filter(x => x.group === 'team');
28+
29+
// add founder as first member of executive staff, even though he's in group 'board'
30+
const founder = boardMembers.filter(x => x.name === 'David Molina');
31+
executiveStaffMembers = [...founder, ...executiveStaffMembers];
32+
33+
this.setState({ boardMembers, executiveStaffMembers });
34+
})
35+
.catch(() => this.setState({ errorResponse: true }));
36+
}
37+
38+
render() {
39+
return (
40+
<div>
41+
<QuoteBanner
42+
author="Abraham Lincoln"
43+
quote="To care for him who shall have borne the battle and for his widow, and his orphan."
44+
/>
45+
46+
<Section title="Our Board" theme="white">
47+
<div className={styles.boardMembers}>
48+
{this.state.boardMembers &&
49+
this.state.boardMembers.map(boardMember => (
50+
<TeamCard
51+
key={`${boardMember.name} + ${boardMember.role}`}
52+
name={boardMember.name}
53+
role={boardMember.role}
54+
description={boardMember.description}
55+
imageSrc={boardMember.image_src}
56+
/>
57+
))}
58+
</div>
59+
<div className={styles.foundingMembers}>
60+
<p>
61+
Operation Code deeply appreciates the time, energy, and hard work
62+
of our <b>Founding Board Members</b>, including Mark Kerr (Chair),
63+
Laura Gomez (Vice Chair), Pete Runyon (Secretary/ Treasurer), Josh
64+
Carter, Nick Frost, and Aimee Knight on their support, dedication
65+
and commitment in the early days.
66+
</p>
67+
68+
<p style={{ textAlign: 'center' }}>
69+
<em>Thank you for setting us up for success!</em>
70+
</p>
71+
</div>
72+
</Section>
73+
74+
<Section title="Our Executive Staff" theme="white">
75+
<div className={styles.executiveStaff}>
76+
{this.state.executiveStaffMembers &&
77+
this.state.executiveStaffMembers.map(staff => (
78+
<TeamCard
79+
key={`${staff.name} + ${staff.role}`}
80+
name={staff.name}
81+
role={staff.role}
82+
slack={staff.slackUsername}
83+
email={staff.email}
84+
isBoard={false}
85+
/>
86+
))}
87+
</div>
88+
</Section>
5589
</div>
56-
</Section>
57-
</div>
58-
);
90+
);
91+
}
92+
}
5993

6094
export default Team;

src/shared/components/teamCard/teamCard.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
.teamCard:hover,
1717
.teamCard:focus {
1818
box-shadow: 0 9px 28px rgba(0, 0, 0, 0.25);
19-
max-height: 650px;
19+
max-height: 800px;
2020
height: auto;
2121
transition: box-shadow 0.3s ease-in-out, max-height 0.3s ease-in-out;
2222
}
@@ -37,6 +37,7 @@
3737
.teamCard > img {
3838
height: 125px;
3939
width: 125px;
40+
flex: 1 0 auto;
4041
border-radius: 100%;
4142
box-shadow: 0 3px 4px 2px rgba(0, 0, 0, 0.15);
4243
filter: grayscale(100%);

0 commit comments

Comments
 (0)