Skip to content

Commit c8bd20a

Browse files
authored
Merge pull request #17 from hcp-uw/fix-member-github
Fix member view
2 parents 6e12470 + 64143ff commit c8bd20a

File tree

2 files changed

+60
-87
lines changed

2 files changed

+60
-87
lines changed

src/components/MemberCard.tsx

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@ import {
44
Avatar,
55
Text,
66
VStack,
7-
HStack,
8-
Link,
9-
Icon,
107
useColorModeValue,
118
Badge,
129
} from '@chakra-ui/react';
13-
import { FaDiscord, FaLinkedin, FaEnvelope } from 'react-icons/fa';
14-
import { Link as RouterLink, useNavigate } from 'react-router-dom';
10+
import { useNavigate } from 'react-router-dom';
1511
import { IMember } from '../interfaces/IMember';
1612
import { Team } from '../interfaces/DBTypes';
1713

@@ -64,51 +60,7 @@ export const MemberCard: React.FC<MemberCardProps> = ({ member }) => {
6460
{member.lead && (
6561
<Badge colorScheme={COLOR_MAP[member.team]}>{member.team}</Badge>
6662
)}
67-
<Text fontSize="sm" color="gray.500">
68-
{member.email}
69-
</Text>
7063
</VStack>
71-
<HStack spacing={4}>
72-
<Link
73-
href={`mailto:${member.email}`}
74-
isExternal
75-
onClick={(e) => e.stopPropagation()}
76-
>
77-
<Icon
78-
as={FaEnvelope}
79-
w={5}
80-
h={5}
81-
color="gray.500"
82-
_hover={{ color: 'blue.500' }}
83-
/>
84-
</Link>
85-
<Link
86-
href={`https://discord.com/users/${member.discord}`}
87-
isExternal
88-
onClick={(e) => e.stopPropagation()}
89-
>
90-
<Icon
91-
as={FaDiscord}
92-
w={5}
93-
h={5}
94-
color="gray.500"
95-
_hover={{ color: 'blue.500' }}
96-
/>
97-
</Link>
98-
<Link
99-
href={member.linkedin}
100-
isExternal
101-
onClick={(e) => e.stopPropagation()}
102-
>
103-
<Icon
104-
as={FaLinkedin}
105-
w={5}
106-
h={5}
107-
color="gray.500"
108-
_hover={{ color: 'blue.500' }}
109-
/>
110-
</Link>
111-
</HStack>
11264
</VStack>
11365
</Box>
11466
);

src/pages/MemberDetailsPage.tsx

Lines changed: 59 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
import React, { useState, useEffect } from 'react';
22
import { useParams, Link as RouterLink } from 'react-router-dom';
33
import {
4-
Box, VStack, Heading, Text, Spinner, Image, HStack, Icon, Link, Button,
5-
useColorModeValue
4+
Box,
5+
VStack,
6+
Heading,
7+
Text,
8+
Spinner,
9+
HStack,
10+
Button,
11+
useColorModeValue,
12+
Avatar,
613
} from '@chakra-ui/react';
7-
import { FaDiscord, FaLinkedin, FaEnvelope, FaArrowLeft } from 'react-icons/fa';
14+
import { FaArrowLeft } from 'react-icons/fa';
815
import { memberService } from '../service/memberService';
916
import { IMember } from '../interfaces/IMember';
1017
import { Layout } from '../components/Layout';
1118
import GitHubCalendar from 'react-github-calendar';
1219

13-
1
1420
interface GHCalProps {
1521
username: string;
1622
}
@@ -20,22 +26,27 @@ const GHCal: React.FC<GHCalProps> = ({ username }) => {
2026
display: 'flex',
2127
justifyContent: 'center',
2228
alignItems: 'center',
23-
}
29+
};
2430

25-
const content = <GitHubCalendar username={extractUsername(username)} colorScheme='light' />
31+
const content = (
32+
<GitHubCalendar
33+
username={extractGithubUsername(username)}
34+
colorScheme="light"
35+
/>
36+
);
2637

27-
return (
28-
<Box style={centered}>
29-
{content}
30-
</Box>
31-
)
32-
}
38+
return <Box style={centered}>{content}</Box>;
39+
};
3340

34-
const extractUsername = (maybeUrl: string) =>
35-
(maybeUrl.indexOf("/") === -1)
36-
? maybeUrl
37-
: new URL(maybeUrl).pathname.split('/')[1]
41+
const extractGithubUsername = (maybeUrl: string) => {
42+
if (maybeUrl.startsWith('https://')) {
43+
return maybeUrl.split('/')[3];
44+
}
3845

46+
return maybeUrl.indexOf('/') === -1
47+
? maybeUrl
48+
: new URL(`https://${maybeUrl}`).pathname.split('/')[1];
49+
};
3950

4051
export const MemberDetailsPage: React.FC = () => {
4152
const { id } = useParams<{ id: string }>();
@@ -66,8 +77,18 @@ export const MemberDetailsPage: React.FC = () => {
6677
fetchMember();
6778
}, [id]);
6879

69-
if (loading) return <Layout><Spinner size="xl" /></Layout>;
70-
if (error || !member) return <Layout><Text color="red.500">{error || 'Member not found'}</Text></Layout>;
80+
if (loading)
81+
return (
82+
<Layout>
83+
<Spinner size="xl" />
84+
</Layout>
85+
);
86+
if (error || !member)
87+
return (
88+
<Layout>
89+
<Text color="red.500">{error || 'Member not found'}</Text>
90+
</Layout>
91+
);
7192

7293
return (
7394
<Layout>
@@ -82,36 +103,36 @@ export const MemberDetailsPage: React.FC = () => {
82103
margin="auto"
83104
>
84105
<VStack spacing={6} align="stretch">
85-
<Button as={RouterLink} to="/members" leftIcon={<FaArrowLeft />} alignSelf="flex-start">
106+
<Button
107+
as={RouterLink}
108+
to="/members"
109+
leftIcon={<FaArrowLeft />}
110+
alignSelf="flex-start"
111+
>
86112
Back to Members
87113
</Button>
88114
<HStack spacing={6}>
89-
<Image
90-
borderRadius="full"
91-
boxSize="150px"
115+
<Avatar
116+
size="xl"
117+
name={`${member.firstName} ${member.lastName}`}
92118
src={member.profilePicture}
93-
alt={`${member.firstName} ${member.lastName}`}
94119
/>
95120
<VStack align="start" spacing={2}>
96-
<Heading size="xl">{member.firstName} {member.lastName}</Heading>
97-
<Text fontSize="lg" color="gray.500">{member.email}</Text>
121+
<Heading size="xl">
122+
{member.firstName} {member.lastName}
123+
</Heading>
98124
</VStack>
99125
</HStack>
100-
<GHCal username={member.github} />
101-
<HStack spacing={4}>
102-
<Link href={`mailto:${member.email}`} isExternal>
103-
<Icon as={FaEnvelope} w={6} h={6} color="gray.500" _hover={{ color: 'blue.500' }} />
104-
</Link>
105-
<Link href={`https://discord.com/users/${member.discord}`} isExternal>
106-
<Icon as={FaDiscord} w={6} h={6} color="gray.500" _hover={{ color: 'blue.500' }} />
107-
</Link>
108-
<Link href={member.linkedin} isExternal>
109-
<Icon as={FaLinkedin} w={6} h={6} color="gray.500" _hover={{ color: 'blue.500' }} />
110-
</Link>
111-
</HStack>
126+
{member.github !== '' ? (
127+
<GHCal username={member.github} />
128+
) : (
129+
<Text fontSize="lg" color="gray.500">
130+
No GitHub calendar available
131+
</Text>
132+
)}
112133
{/* Add more member details here as needed */}
113134
</VStack>
114135
</Box>
115136
</Layout>
116137
);
117-
};
138+
};

0 commit comments

Comments
 (0)