From 20a898c978441ac463a2d717536b3ba599a0ba74 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Mon, 30 Sep 2024 15:52:22 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=94(frontend)=20adapt=20versions=20api?= =?UTF-8?q?=20with=20new=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We updated the backend recently, the types of the versions list has changed. This commit adapts the frontend to the new types. --- src/frontend/apps/impress/src/api/helpers.tsx | 18 ++++---- .../doc-versioning/api/useDocVersions.tsx | 46 +++++++++++++------ .../doc-versioning/components/VersionList.tsx | 12 +---- .../src/features/docs/doc-versioning/types.ts | 7 +++ 4 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/frontend/apps/impress/src/api/helpers.tsx b/src/frontend/apps/impress/src/api/helpers.tsx index 5d09463c..9f304d2e 100644 --- a/src/frontend/apps/impress/src/api/helpers.tsx +++ b/src/frontend/apps/impress/src/api/helpers.tsx @@ -10,14 +10,16 @@ import { APIError } from './APIError'; import { APIList } from './types'; export type UseQueryOptionsAPI = UseQueryOptions; -export type DefinedInitialDataInfiniteOptionsAPI = - DefinedInitialDataInfiniteOptions< - Q, - APIError, - InfiniteData, - QueryKey, - number - >; +export type DefinedInitialDataInfiniteOptionsAPI< + Q, + TPageParam = number, +> = DefinedInitialDataInfiniteOptions< + Q, + APIError, + InfiniteData, + QueryKey, + TPageParam +>; /** * @param param Used for infinite scroll pagination diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/api/useDocVersions.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/api/useDocVersions.tsx index fb15f944..cd6adcdb 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-versioning/api/useDocVersions.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/api/useDocVersions.tsx @@ -1,32 +1,35 @@ -import { useQuery } from '@tanstack/react-query'; +import { + InfiniteData, + QueryKey, + useInfiniteQuery, + useQuery, +} from '@tanstack/react-query'; import { APIError, - APIList, DefinedInitialDataInfiniteOptionsAPI, UseQueryOptionsAPI, errorCauses, fetchAPI, - useAPIInfiniteQuery, } from '@/api'; -import { Versions } from '../types'; +import { APIListVersions } from '../types'; export type DocVersionsParam = { docId: string; }; export type DocVersionsAPIParams = DocVersionsParam & { - page: number; + versionId: string; }; -type VersionsResponse = APIList; +type VersionsResponse = APIListVersions; const getDocVersions = async ({ - page, + versionId, docId, }: DocVersionsAPIParams): Promise => { - const url = `documents/${docId}/versions/?page=${page}`; + const url = `documents/${docId}/versions/?version_id=${versionId}`; const response = await fetchAPI(url); @@ -55,12 +58,25 @@ export function useDocVersions( export function useDocVersionsInfiniteQuery( param: DocVersionsParam, - queryConfig?: DefinedInitialDataInfiniteOptionsAPI, + queryConfig?: DefinedInitialDataInfiniteOptionsAPI, ) { - return useAPIInfiniteQuery( - KEY_LIST_DOC_VERSIONS, - getDocVersions, - param, - queryConfig, - ); + return useInfiniteQuery< + VersionsResponse, + APIError, + InfiniteData, + QueryKey, + string + >({ + initialPageParam: '', + queryKey: [KEY_LIST_DOC_VERSIONS, param], + queryFn: ({ pageParam }) => + getDocVersions({ + ...param, + versionId: pageParam, + }), + getNextPageParam(lastPage) { + return lastPage.next_version_id_marker || undefined; + }, + ...queryConfig, + }); } diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx index 3324cdbb..d68e3910 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx @@ -1,6 +1,6 @@ import { Loader } from '@openfun/cunningham-react'; import { useRouter } from 'next/router'; -import React, { useEffect, useMemo, useRef } from 'react'; +import React, { useMemo, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { APIError } from '@/api'; @@ -9,7 +9,6 @@ import { Doc } from '@/features/docs/doc-management'; import { useDate } from '@/hook'; import { useDocVersionsInfiniteQuery } from '../api/useDocVersions'; -import { useDocVersionStore } from '../stores'; import { Versions } from '../types'; import { VersionItem } from './VersionItem'; @@ -102,16 +101,9 @@ export const VersionList = ({ doc }: VersionListProps) => { const containerRef = useRef(null); const versions = useMemo(() => { return data?.pages.reduce((acc, page) => { - return acc.concat(page.results); + return acc.concat(page.versions); }, [] as Versions[]); }, [data?.pages]); - const { setIsPanelVersionOpen } = useDocVersionStore(); - - useEffect(() => { - return () => { - setIsPanelVersionOpen(false); - }; - }, [setIsPanelVersionOpen]); return ( diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts b/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts index d6246c78..5affe7b0 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts @@ -1,5 +1,12 @@ import { Doc } from '../doc-management'; +export interface APIListVersions { + count: number; + is_truncated: boolean; + next_version_id_marker: string | null; + versions: Versions[]; +} + export interface Versions { etag: string; is_latest: boolean;