aboutsummaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/GithubAvatar/GithubAvatar.tsx39
-rw-r--r--src/components/SolutionCard/SolutionCard.tsx9
2 files changed, 41 insertions, 7 deletions
diff --git a/src/components/GithubAvatar/GithubAvatar.tsx b/src/components/GithubAvatar/GithubAvatar.tsx
new file mode 100644
index 0000000..32ac553
--- /dev/null
+++ b/src/components/GithubAvatar/GithubAvatar.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+
+import {
+ Avatar,
+ Link,
+} from '@material-ui/core';
+
+interface PropTypes {
+ username: string;
+}
+
+const githubUrl = 'https://github.com/';
+const getUserGithubUrl = (username: string): string => githubUrl + username;
+
+const GithubAvatar: React.FC<PropTypes> = ({ username }) => {
+ if (username === 'anonymous') return <Avatar/>;
+
+ const userGithubUrl = getUserGithubUrl(username);
+ const avatarUrl = userGithubUrl + '.png';
+ const usernameTokens = username.split(/[ ,.\-_#@;]/g);
+ const altText = (
+ (usernameTokens.length > 1)?
+ (usernameTokens[0][0] + usernameTokens[1][0])
+ :
+ usernameTokens[0][0]
+ ).toUpperCase()
+
+ return (
+ <Link href={userGithubUrl}>
+ <Avatar>
+ <img src={avatarUrl} alt={altText} />
+ </Avatar>
+ </Link>
+ )
+};
+
+export { getUserGithubUrl };
+export default GithubAvatar;
+
diff --git a/src/components/SolutionCard/SolutionCard.tsx b/src/components/SolutionCard/SolutionCard.tsx
index 5adbff9..7ec8888 100644
--- a/src/components/SolutionCard/SolutionCard.tsx
+++ b/src/components/SolutionCard/SolutionCard.tsx
@@ -6,7 +6,6 @@ import {
CardHeader,
CardContent,
IconButton,
- Avatar,
Grid,
Menu,
MenuItem,
@@ -18,6 +17,7 @@ import TimerIcon from '@material-ui/icons/Timer';
import MoreVertIcon from '@material-ui/icons/MoreVert';
import DeleteIcon from '@material-ui/icons/Delete';
+import GithubAvatar from '../GithubAvatar/GithubAvatar';
import { del } from '../../requests';
@@ -77,12 +77,7 @@ const SolutionCard: React.FC<PropTypes> = ({ data, removeThisCard }) => {
return (
<Card className={classes.root}>
<CardHeader
- avatar={
- author === 'anonymous'?
- (<Avatar/>)
- :
- (<Avatar>{author[0].toUpperCase()}</Avatar>)
- }
+ avatar={<GithubAvatar username={author} />}
title={author}
subheader={date.toLocaleString('default', DATE_FORMAT)}
action={