diff --git a/package.json b/package.json
index 60c25183c..83d76f241 100644
--- a/package.json
+++ b/package.json
@@ -56,6 +56,7 @@
"react-csv": "2.2.2",
"react-dom": "18.2.0",
"react-ga4": "2.1.0",
+ "react-helmet": "6.1.0",
"react-i18next": "14.1.0",
"react-image-crop": "11.0.5",
"react-qr-code": "2.0.12",
@@ -126,6 +127,7 @@
"@types/react": "18.2.61",
"@types/react-csv": "1.1.10",
"@types/react-dom": "18.2.19",
+ "@types/react-helmet": "^6",
"@types/uuid": "9.0.8",
"@types/validator": "13.11.9",
"@typescript-eslint/eslint-plugin": "7.4.0",
diff --git a/src/components/item/ItemMain.tsx b/src/components/item/ItemMain.tsx
index b8f58f185..5cd886888 100644
--- a/src/components/item/ItemMain.tsx
+++ b/src/components/item/ItemMain.tsx
@@ -1,3 +1,5 @@
+import { Helmet } from 'react-helmet';
+
import { Box, Divider, Typography, styled } from '@mui/material';
import { DiscriminatedItem } from '@graasp/sdk';
@@ -52,32 +54,37 @@ const ItemMain = ({ id, children, item }: Props): JSX.Element => {
const { isChatboxMenuOpen, setIsChatboxMenuOpen } = useLayoutContext();
return (
-
- {isChatboxMenuOpen && (
-
- {
- setIsChatboxMenuOpen(false);
- }}
- // todo
- direction="rtl"
- >
-
- {translateBuilder(BUILDER.ITEM_CHATBOX_TITLE, {
- name: item.name,
- })}
-
-
-
-
-
- )}
-
-
+ <>
+
+ {item.name}
+
+
+ {isChatboxMenuOpen && (
+
+ {
+ setIsChatboxMenuOpen(false);
+ }}
+ // todo
+ direction="rtl"
+ >
+
+ {translateBuilder(BUILDER.ITEM_CHATBOX_TITLE, {
+ name: item.name,
+ })}
+
+
+
+
+
+ )}
+
+
- {children}
-
-
+ {children}
+
+
+ >
);
};
diff --git a/src/components/pages/BookmarkedItemsScreen.tsx b/src/components/pages/BookmarkedItemsScreen.tsx
index 3d3ab911b..96db54e63 100644
--- a/src/components/pages/BookmarkedItemsScreen.tsx
+++ b/src/components/pages/BookmarkedItemsScreen.tsx
@@ -1,3 +1,5 @@
+import { Helmet } from 'react-helmet';
+
import { Box } from '@mui/material';
import { Loader } from '@graasp/ui';
@@ -27,14 +29,19 @@ const BookmarkedItemsLoadableContent = (): JSX.Element | null => {
if (filteredData) {
return (
-
-
- d.item)}
- />
-
+ <>
+
+ {translateBuilder(BUILDER.BOOKMARKED_ITEMS_TITLE)}
+
+
+
+ d.item)}
+ />
+
+ >
);
}
diff --git a/src/components/pages/HomeScreen.tsx b/src/components/pages/HomeScreen.tsx
index 21258a9ad..947354ec3 100644
--- a/src/components/pages/HomeScreen.tsx
+++ b/src/components/pages/HomeScreen.tsx
@@ -1,4 +1,5 @@
import { useState } from 'react';
+import { Helmet } from 'react-helmet';
import { Box, LinearProgress } from '@mui/material';
@@ -104,35 +105,40 @@ const HomeLoadableContent = (): JSX.Element => {
if (accessibleItems) {
return (
-
-
-
-
- ,
- ]}
- ToolbarActions={ItemActions}
- onShowOnlyMeChange={onShowOnlyMeChange}
- showOnlyMe={showOnlyMe}
- page={page}
- setPage={setPage}
- totalCount={accessibleItems.totalCount}
- onSortChanged={onSortChanged}
- pageSize={ITEM_PAGE_SIZE}
- showDropzoneHelper
- />
- {isFetching && (
-
-
-
- )}
-
-
+ <>
+
+ {translateBuilder(BUILDER.MY_ITEMS_TITLE)}
+
+
+
+
+
+ ,
+ ]}
+ ToolbarActions={ItemActions}
+ onShowOnlyMeChange={onShowOnlyMeChange}
+ showOnlyMe={showOnlyMe}
+ page={page}
+ setPage={setPage}
+ totalCount={accessibleItems.totalCount}
+ onSortChanged={onSortChanged}
+ pageSize={ITEM_PAGE_SIZE}
+ showDropzoneHelper
+ />
+ {isFetching && (
+
+
+
+ )}
+
+
+ >
);
}
diff --git a/src/components/pages/PublishedItemsScreen.tsx b/src/components/pages/PublishedItemsScreen.tsx
index dbf2b4157..28f3ca61b 100644
--- a/src/components/pages/PublishedItemsScreen.tsx
+++ b/src/components/pages/PublishedItemsScreen.tsx
@@ -1,3 +1,5 @@
+import { Helmet } from 'react-helmet';
+
import { Box } from '@mui/material';
import { Loader } from '@graasp/ui';
@@ -29,14 +31,19 @@ const PublishedItemsLoadableContent = (): JSX.Element | null => {
if (filteredData) {
return (
-
-
-
-
+ <>
+
+ {translateBuilder(BUILDER.PUBLISHED_ITEMS_TITLE)}
+
+
+
+
+
+ >
);
}
diff --git a/src/components/pages/RecycledItemsScreen.tsx b/src/components/pages/RecycledItemsScreen.tsx
index cc9c19b68..c2e42388c 100644
--- a/src/components/pages/RecycledItemsScreen.tsx
+++ b/src/components/pages/RecycledItemsScreen.tsx
@@ -1,3 +1,5 @@
+import { Helmet } from 'react-helmet';
+
import { Box } from '@mui/material';
import { Loader } from '@graasp/ui';
@@ -58,20 +60,25 @@ const RecycleBinLoadableContent = (): JSX.Element | null => {
if (filteredData) {
return (
-
-
-
-
+ <>
+
+ {translateBuilder(BUILDER.RECYCLE_BIN_TITLE)}
+
+
+
+
+
+ >
);
}
diff --git a/src/components/pages/SharedItemsScreen.tsx b/src/components/pages/SharedItemsScreen.tsx
index dac88c561..f65bdfaee 100644
--- a/src/components/pages/SharedItemsScreen.tsx
+++ b/src/components/pages/SharedItemsScreen.tsx
@@ -1,3 +1,5 @@
+import { Helmet } from 'react-helmet';
+
import { Alert, Box } from '@mui/material';
import { Loader } from '@graasp/ui';
@@ -25,21 +27,26 @@ const SharedItemsLoadableContent = (): JSX.Element | null => {
if (filteredItems) {
return (
-
-
- {translateBuilder(
- "You can also find the items of this page in ''My Graasp''. This page will be unavailable soon.",
- )}
-
-
-
-
+ <>
+
+ {translateBuilder(BUILDER.SHARED_ITEMS_TITLE)}
+
+
+
+ {translateBuilder(
+ "You can also find the items of this page in ''My Graasp''. This page will be unavailable soon.",
+ )}
+
+
+
+
+ >
);
}
if (isError) {
diff --git a/yarn.lock b/yarn.lock
index 0a229f65b..81cccc075 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3369,6 +3369,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/react-helmet@npm:^6":
+ version: 6.1.11
+ resolution: "@types/react-helmet@npm:6.1.11"
+ dependencies:
+ "@types/react": "npm:*"
+ checksum: 10/e329d8ad82c365fec7dd7d91c8b6d167faac30cef0d9f1e27d7e895172a0ebfa65829fb4acabbe79283b01cbbe5840a845caeb50148ceef6f3fad42b3c2c4bdc
+ languageName: node
+ linkType: hard
+
"@types/react-redux@npm:^7.1.20":
version: 7.1.33
resolution: "@types/react-redux@npm:7.1.33"
@@ -7587,6 +7596,7 @@ __metadata:
"@types/react": "npm:18.2.61"
"@types/react-csv": "npm:1.1.10"
"@types/react-dom": "npm:18.2.19"
+ "@types/react-helmet": "npm:^6"
"@types/uuid": "npm:9.0.8"
"@types/validator": "npm:13.11.9"
"@typescript-eslint/eslint-plugin": "npm:7.4.0"
@@ -7634,6 +7644,7 @@ __metadata:
react-csv: "npm:2.2.2"
react-dom: "npm:18.2.0"
react-ga4: "npm:2.1.0"
+ react-helmet: "npm:6.1.0"
react-i18next: "npm:14.1.0"
react-image-crop: "npm:11.0.5"
react-qr-code: "npm:2.0.12"
@@ -11392,6 +11403,13 @@ __metadata:
languageName: node
linkType: hard
+"react-fast-compare@npm:^3.1.1":
+ version: 3.2.2
+ resolution: "react-fast-compare@npm:3.2.2"
+ checksum: 10/a6826180ba75cefba1c8d3ac539735f9b627ca05d3d307fe155487f5d0228d376dac6c9708d04a283a7b9f9aee599b637446635b79c8c8753d0b4eece56c125c
+ languageName: node
+ linkType: hard
+
"react-ga4@npm:2.1.0":
version: 2.1.0
resolution: "react-ga4@npm:2.1.0"
@@ -11399,6 +11417,20 @@ __metadata:
languageName: node
linkType: hard
+"react-helmet@npm:6.1.0":
+ version: 6.1.0
+ resolution: "react-helmet@npm:6.1.0"
+ dependencies:
+ object-assign: "npm:^4.1.1"
+ prop-types: "npm:^15.7.2"
+ react-fast-compare: "npm:^3.1.1"
+ react-side-effect: "npm:^2.1.0"
+ peerDependencies:
+ react: ">=16.3.0"
+ checksum: 10/eff25231384bb0a229870a0552839953a59af17f0ff5e8bca1b8c8fdf19a329e4c00c7fa2fcedc8be5d73f5c7bebb30cf9a32ea58efc7c8f726a10dba51f48a2
+ languageName: node
+ linkType: hard
+
"react-i18next@npm:14.0.8":
version: 14.0.8
resolution: "react-i18next@npm:14.0.8"
@@ -11635,6 +11667,15 @@ __metadata:
languageName: node
linkType: hard
+"react-side-effect@npm:^2.1.0":
+ version: 2.1.2
+ resolution: "react-side-effect@npm:2.1.2"
+ peerDependencies:
+ react: ^16.3.0 || ^17.0.0 || ^18.0.0
+ checksum: 10/8c31aaec5b383d942ff1775b12c45022239d1250d1a00a238bac3c07e0fe266c71991e2814ae16a5d9b855bcd96ba95817d48ab3f34738f0bb32036ebb1abb1a
+ languageName: node
+ linkType: hard
+
"react-text-mask@npm:5.5.0":
version: 5.5.0
resolution: "react-text-mask@npm:5.5.0"