diff --git a/CHANGELOG.md b/CHANGELOG.md index 96e8ec18..f2cc21f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,11 +6,15 @@ and this project adheres to ## [Unreleased] +## Fixed + +- 🐛(frontend) fix duplicate document entries in grid #1479 + ## [3.8.2] - 2025-10-17 ### Fixed -🐛(service-worker) fix sw registration and page reload logic #1500 +- 🐛(service-worker) fix sw registration and page reload logic #1500 ## [3.8.1] - 2025-10-17 diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx index 3705e98c..51df82b4 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx @@ -1,4 +1,5 @@ import { Button } from '@openfun/cunningham-react'; +import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { InView } from 'react-intersection-observer'; import { css } from 'styled-components'; @@ -36,7 +37,19 @@ export const DocsGrid = ({ hasNextPage, } = useDocsQuery(target); - const docs = data?.pages.flatMap((page) => page.results) ?? []; + const docs = useMemo(() => { + const allDocs = data?.pages.flatMap((page) => page.results) ?? []; + // Deduplicate documents by ID to prevent the same doc appearing multiple times + // This can happen when a multiple users are impacting the docs list (creation, update, ...) + const seenIds = new Set(); + return allDocs.filter((doc) => { + if (seenIds.has(doc.id)) { + return false; + } + seenIds.add(doc.id); + return true; + }); + }, [data?.pages]); const loading = isFetching || isLoading; const hasDocs = data?.pages.some((page) => page.results.length > 0);