From 3f7ea5740cd6f7a7cd9b51aaa28f1f05fd456797 Mon Sep 17 00:00:00 2001 From: LinHuiqing Date: Thu, 30 Sep 2021 14:38:15 +0800 Subject: [PATCH] feat(seo): update meta descriptions of agency and post pages - update meta description for post page with text of first answer - update meta description for agency-specific page with 'Answers from `agency.longname` (`agency.shortname`)' - set meta prop data-react-helmet in index.html to true - refactor AnswerSection component to prevent repeat answer queries re #394 --- client/public/index.html | 1 + .../src/pages/HomePage/HomePage.component.jsx | 7 +++++ .../AnswerSection/AnswerSection.component.jsx | 29 ++++++------------- client/src/pages/Post/Post.component.jsx | 29 ++++++++++++++----- 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/client/public/index.html b/client/public/index.html index 723c5c882..ffb3ffabd 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -35,6 +35,7 @@ diff --git a/client/src/pages/HomePage/HomePage.component.jsx b/client/src/pages/HomePage/HomePage.component.jsx index 1eeda0e9a..d0687d69a 100644 --- a/client/src/pages/HomePage/HomePage.component.jsx +++ b/client/src/pages/HomePage/HomePage.component.jsx @@ -66,6 +66,13 @@ const HomePage = ({ match }) => { title={ agency ? `${agency?.shortname.toUpperCase()} FAQ - AskGov` : undefined } + description={ + agency + ? `Answers from ${ + agency?.longname + } (${agency?.shortname.toUpperCase()})` + : undefined + } /> { - const { isLoading, data: answers } = useQuery( - [GET_ANSWERS_FOR_POST_QUERY_KEY, post.id], - () => getAnswersForPost(post.id), - ) - - return isLoading ? ( +const AnswerSection = ({ answers }) => { + return !answers ? ( ) : (
- {answers.length > 0 ? null : ( + {answers && answers.length > 0 ? ( + answers?.sort(sortByCreatedAt).map((answer) => ( +
+ +
+ )) + ) : (

No official answers yet

)} - {answers?.length > 0 - ? answers?.sort(sortByCreatedAt).map((answer) => ( -
- -
- )) - : null}
) } diff --git a/client/src/pages/Post/Post.component.jsx b/client/src/pages/Post/Post.component.jsx index 917b123ce..fcfbfa114 100644 --- a/client/src/pages/Post/Post.component.jsx +++ b/client/src/pages/Post/Post.component.jsx @@ -1,28 +1,31 @@ -import { Center, Flex, Stack, Spacer, Text, VStack } from '@chakra-ui/layout' +import { Center, Flex, Spacer, Stack, Text, VStack } from '@chakra-ui/layout' +import { format, utcToZonedTime } from 'date-fns-tz' import { BiArrowBack, BiXCircle } from 'react-icons/bi' import { useQuery } from 'react-query' -import { Link, useParams, useHistory } from 'react-router-dom' -import { format, utcToZonedTime } from 'date-fns-tz' - +import { Link, useHistory, useParams } from 'react-router-dom' +import { PostStatus, TagType } from '~shared/types/base' import CitizenRequest from '../../components/CitizenRequest/CitizenRequest.component' +import EditButton from '../../components/EditButton/EditButton.component' import PageTitle from '../../components/PageTitle/PageTitle.component' import Spinner from '../../components/Spinner/Spinner.component' import TagBadge from '../../components/TagBadge/TagBadge.component' import ViewCount from '../../components/ViewCount/ViewCount.component' +import { useAuth } from '../../contexts/AuthContext' import { getAgencyByShortName, GET_AGENCY_BY_SHORTNAME_QUERY_KEY, } from '../../services/AgencyService' +import { + getAnswersForPost, + GET_ANSWERS_FOR_POST_QUERY_KEY, +} from '../../services/AnswerService' import { getPostById, GET_POST_BY_ID_QUERY_KEY, } from '../../services/PostService' -import { PostStatus, TagType } from '~shared/types/base' import AnswerSection from './AnswerSection/AnswerSection.component' import './Post.styles.scss' import QuestionSection from './QuestionSection/QuestionSection.component' -import EditButton from '../../components/EditButton/EditButton.component' -import { useAuth } from '../../contexts/AuthContext' const Post = () => { const { id: postId } = useParams() @@ -69,12 +72,22 @@ const Post = () => { 'dd MMM yyyy HH:mm, zzzz', ) + const { _, data: answers } = useQuery( + [GET_ANSWERS_FOR_POST_QUERY_KEY, post?.id], + () => getAnswersForPost(post?.id), + ) + return isLoading ? ( ) : ( 0 + ? answers[0]?.body.replace(/<[^>]*>?/gm, '') // .replace() uses regex to remove html tags + : undefined + } />
{
- +