diff options
author | eug-vs <eug-vs@keemail.me> | 2020-10-09 02:12:36 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-10-09 02:12:36 +0300 |
commit | 2f7a4bb3de4ff346a928f6887bc2fb4a5973977d (patch) | |
tree | 9ba9d366ab615937a62b8488290a61671f9e613c | |
parent | a5d0f3edcd5478c81262524cbfef8273a065df36 (diff) | |
download | which-ui-2f7a4bb3de4ff346a928f6887bc2fb4a5973977d.tar.gz |
feat: show latest release patchnotes on homepage
-rw-r--r-- | src/containers/Home/Home.tsx | 45 | ||||
-rw-r--r-- | src/hooks/APIClient.ts | 19 |
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 }); +}; |