aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2020-10-09 02:12:36 +0300
committereug-vs <eug-vs@keemail.me>2020-10-09 02:12:36 +0300
commit2f7a4bb3de4ff346a928f6887bc2fb4a5973977d (patch)
tree9ba9d366ab615937a62b8488290a61671f9e613c
parenta5d0f3edcd5478c81262524cbfef8273a065df36 (diff)
downloadwhich-ui-2f7a4bb3de4ff346a928f6887bc2fb4a5973977d.tar.gz
feat: show latest release patchnotes on homepage
-rw-r--r--src/containers/Home/Home.tsx45
-rw-r--r--src/hooks/APIClient.ts19
2 files changed, 37 insertions, 27 deletions
diff --git a/src/containers/Home/Home.tsx b/src/containers/Home/Home.tsx
index 072e2fa..71b902b 100644
--- a/src/containers/Home/Home.tsx
+++ b/src/containers/Home/Home.tsx
@@ -9,7 +9,7 @@ import {
useMediaQuery
} from '@material-ui/core/';
import { makeStyles, useTheme } from '@material-ui/core/styles';
-import TrendingUpIcon from '@material-ui/icons/TrendingUp';
+import GitHubIcon from '@material-ui/icons/GitHub';
import { Rating } from '@material-ui/lab';
import { Feedback } from 'which-types';
@@ -17,7 +17,7 @@ import ReviewCard from '../../components/ReviewCard/ReviewCard';
import Image from '../../components/Image/Image';
import ReviewForm from './ReviewForm';
import { useAuth } from '../../hooks/useAuth';
-import { useFeedback } from '../../hooks/APIClient';
+import { useFeedback, usePatchNotes } from '../../hooks/APIClient';
const useStyles = makeStyles(theme => ({
root: {
@@ -28,6 +28,9 @@ const useStyles = makeStyles(theme => ({
width: theme.spacing(20),
height: theme.spacing(20)
},
+ patchNotes: {
+ whiteSpace: 'pre-wrap'
+ },
score: {
fontWeight: 'bold'
},
@@ -43,6 +46,7 @@ const useStyles = makeStyles(theme => ({
const Home: React.FC = () => {
const { data: feedbacks } = useFeedback();
+ const { data: release } = usePatchNotes();
const classes = useStyles();
const history = useHistory();
const { isAuthenticated, user } = useAuth();
@@ -62,11 +66,6 @@ const Home: React.FC = () => {
history.push('/registration');
};
- const GithubLink = <Link href="https://github.com/which-ecosystem">GitHub</Link>;
- const TypescriptLink = <Link href="https://www.typescriptlang.org/">Typescript</Link>;
- const ReactLink = <Link href="https://reactjs.org/">React</Link>;
- const FeathersLink = <Link href="https://feathersjs.com">Feathers</Link>;
- const MUILink = <Link href="https://material-ui.com">Material-UI</Link>;
const EmailLink = <Link href="mailto: eug-vs@keemail.me">eug-vs@keemail.me</Link>;
const Reviews = (
@@ -152,31 +151,23 @@ const Home: React.FC = () => {
)}
</Typography>
</Grid>
- <Grid item>
- <Typography variant="h4"> About the project </Typography>
- <Divider />
- <Typography>
- <p>
- The project is written in {TypescriptLink} and features {ReactLink}, {FeathersLink}, and {MUILink}.
- It is currently open-source and you can visit our {GithubLink} (make sure to star our repositories)!
- </p>
- <p>
- We encourage any developer to check it out. Feel free to open issues and create Pull Requests!
- </p>
- <p>
- All the development process is being tracked on the KanBan board (thanks GitHub).
- You can always check it to see what is the current state of the project.
- </p>
+ {release && (
+ <Grid item>
+ <Typography variant="h4">{`What's new in ${release?.version}?`}</Typography>
+ <Divider />
+ <Typography className={classes.patchNotes}>
+ <p>{release?.description}</p>
+ </Typography>
<Button
variant="outlined"
color="primary"
- startIcon={<TrendingUpIcon />}
- href="https://github.com/orgs/which-ecosystem/projects/1"
+ startIcon={<GitHubIcon />}
+ href={release?.url}
>
- track our progress
+ Learn more
</Button>
- </Typography>
- </Grid>
+ </Grid>
+ )}
<Grid item>
<Typography variant="h4"> Leave feedback </Typography>
<Divider />
diff --git a/src/hooks/APIClient.ts b/src/hooks/APIClient.ts
index 68413b0..1d4110c 100644
--- a/src/hooks/APIClient.ts
+++ b/src/hooks/APIClient.ts
@@ -1,5 +1,6 @@
import useSWR, { responseInterface } from 'swr';
import { User, Poll, Feedback } from 'which-types';
+import axios from 'axios';
import { get } from '../requests';
type Response<T> = responseInterface<T, Error>;
@@ -24,3 +25,21 @@ export const useFeed = (): Response<Poll[]> => {
export const useFeedback = (): Response<Feedback[]> => {
return useSWR('/feedback', fetcher);
};
+
+interface Release {
+ url: string;
+ description: string;
+ version: string;
+ name: string;
+}
+
+export const usePatchNotes = (): Response<Release> => {
+ const fetchRelease = () => axios.get('https://api.github.com/repos/which-ecosystem/which/releases/latest')
+ .then(({ data }) => ({
+ name: data.name,
+ url: data.html_url,
+ version: data.tag_name,
+ description: data.body
+ }));
+ return useSWR('/patchnotes', fetchRelease, { revalidateOnFocus: false });
+};