Skip to content

Commit 3d66dae

Browse files
refactor: use metadata component on the community and learning materials page
1 parent 39d05aa commit 3d66dae

File tree

5 files changed

+22
-12
lines changed

5 files changed

+22
-12
lines changed

__tests__/components/ui/MetaData.test.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ describe("MetaData", () => {
1313
expect(metaTags).toHaveLength(expectedMetaTags.length);
1414
});
1515

16+
it("should render the title when applicable", () => {
17+
render(<MetaData description={description} title="Any title" />);
18+
const metatitle = screen.getByTestId("page-title");
19+
expect(metatitle).toHaveTextContent("Any title");
20+
})
21+
1622
it("should render the correct content in the meta tags", () => {
1723
render(<MetaData description={description} />);
1824
const mockMetas = getMetadataDescription(description);

src/components/ui/MetaData.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getMetadataDescription } from "@/utilities/Metadata";
1+
import { getMetadataDescription, getMetadataTitle } from "@/utilities/Metadata";
22
import { ReactElement, useMemo } from "react";
33

44
/**
@@ -8,10 +8,19 @@ import { ReactElement, useMemo } from "react";
88
* @export
99
* @returns {ReactElement}
1010
*/
11-
export default function MetaData({ description, testId = "meta-id" }: { description?: string; testId?: string }): ReactElement {
11+
12+
interface MetadataProps {
13+
description?: string;
14+
title?: string | null;
15+
community?: string;
16+
testId?: string
17+
}
18+
19+
export default function MetaData({ description, title, community, testId = "meta-id" }: MetadataProps): ReactElement {
1220
const metas = useMemo(() => getMetadataDescription(description), [description]);
1321
return (
1422
<>
23+
{title && <title data-testid="page-title">{getMetadataTitle(title, community as string)}</title>}
1524
{metas.map((meta, index) => (
1625
<meta data-testid={testId} key={`meta-${index}`} content={meta.content} name={meta.name} />
1726
))}

src/pages/communities/[slug]/index.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { NotFoundError } from "@/utilities/errors/NotFoundError";
1313
import { fetchAllScoreboards } from "@/store/services/communities/scoreboard.service";
1414
import { useTranslation } from "next-i18next";
1515
import Head from "next/head";
16-
import { getMetadataDescription, getMetadataTitle } from "@/utilities/Metadata";
16+
import MetaData from "@/components/ui/MetaData";
1717
import LearningMaterialsOverview from "@/components/sections/communities/overview/LearningMaterials";
1818
import { fetchCommunities } from "@/services/community";
1919
import { GetStaticPathsContext } from "next";
@@ -29,10 +29,7 @@ export default function Slug(props: {
2929
return (
3030
<>
3131
<Head>
32-
<title>{getMetadataTitle(t("communities.navigation.courses"), community?.name as string)}</title>
33-
{getMetadataDescription(community?.description as string).map((attributes) => (
34-
<meta key={`scoreboard-meta-${attributes.hid}`} {...attributes} />
35-
))}
32+
<MetaData community={community.name} title={t("communities.navigation.courses")} description={community?.description} />
3633
</Head>
3734
<CommunityWrapper>
3835
<div className="md:hidden">

src/pages/communities/[slug]/learning-materials.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { GetServerSideProps } from "next";
66
import { ReactElement } from "react";
77
import { useTranslation } from "next-i18next";
88
import Head from "next/head";
9-
import { getMetadataDescription, getMetadataTitle } from "@/utilities/Metadata";
9+
import MetaData from "@/components/ui/MetaData";
1010
import { Community } from "@/types/community";
1111
import CommunityWrapper from "@/components/sections/communities/overview/Wrapper";
1212
import { Course, LearningModule } from "@/types/course";
@@ -23,10 +23,7 @@ export default function LearningMaterials(props: {
2323
return (
2424
<div>
2525
<Head>
26-
<title>{getMetadataTitle(t("communities.navigation.learning-materials"), community?.name as string)}</title>
27-
{getMetadataDescription(community?.description as string).map((attributes) => (
28-
<meta key={`scoreboard-meta-${attributes.hid}`} {...attributes} />
29-
))}
26+
<MetaData community={community.name} title={t("communities.navigation.learning-materials")} description={community?.description} />
3027
</Head>
3128
<CommunityWrapper>
3229
<LearningMaterialsOverview />

src/store/services/community.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export const communityService = createApi({
6868
return data
6969
}
7070
catch (error) {
71+
dispatch(setError(error))
7172
return null
7273
}
7374
finally {

0 commit comments

Comments
 (0)