diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/api/useSubDocs.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/api/useSubDocs.tsx deleted file mode 100644 index e76c8bc4..00000000 --- a/src/frontend/apps/impress/src/features/docs/doc-management/api/useSubDocs.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { UseQueryOptions, useQuery } from '@tanstack/react-query'; - -import { - APIError, - InfiniteQueryConfig, - errorCauses, - fetchAPI, - useAPIInfiniteQuery, -} from '@/api'; - -import { DocsOrdering } from '../types'; - -import { DocsResponse, constructParams } from './useDocs'; - -export type SubDocsParams = { - page: number; - ordering?: DocsOrdering; - is_creator_me?: boolean; - title?: string; - is_favorite?: boolean; - parent_id: string; -}; - -export const getSubDocs = async ( - params: SubDocsParams, -): Promise => { - const searchParams = constructParams(params); - searchParams.set('parent_id', params.parent_id); - - const response: Response = await fetchAPI( - `documents/${params.parent_id}/descendants/?${searchParams.toString()}`, - ); - - if (!response.ok) { - throw new APIError( - 'Failed to get the sub docs', - await errorCauses(response), - ); - } - - return response.json() as Promise; -}; - -export const KEY_LIST_SUB_DOC = 'sub-docs'; - -export function useSubDocs( - params: SubDocsParams, - queryConfig?: UseQueryOptions, -) { - return useQuery({ - queryKey: [KEY_LIST_SUB_DOC, params], - queryFn: () => getSubDocs(params), - ...queryConfig, - }); -} - -export const useInfiniteSubDocs = ( - params: SubDocsParams, - queryConfig?: InfiniteQueryConfig, -) => { - return useAPIInfiniteQuery(KEY_LIST_SUB_DOC, getSubDocs, params, queryConfig); -}; diff --git a/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchSubPageContent.tsx b/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchSubPageContent.tsx deleted file mode 100644 index 7d9747ce..00000000 --- a/src/frontend/apps/impress/src/features/docs/doc-search/components/DocSearchSubPageContent.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { useTreeContext } from '@gouvfr-lasuite/ui-kit'; -import { t } from 'i18next'; -import React, { useEffect, useState } from 'react'; -import { InView } from 'react-intersection-observer'; - -import { QuickSearchData, QuickSearchGroup } from '@/components/quick-search'; -import { Doc } from '@/docs/doc-management'; -import { useInfiniteSearchDocs } from '@/docs/doc-management/api/useSearchDocs'; -import { DocSearchTarget } from '@/docs/doc-search'; - -type DocSearchSubPageContentProps = { - search: string; - onSelect: (doc: Doc) => void; - onLoadingChange?: (loading: boolean) => void; - renderElement: (doc: Doc) => React.ReactNode; -}; - -export const DocSearchSubPageContent = ({ - search, - onSelect, - onLoadingChange, - renderElement, -}: DocSearchSubPageContentProps) => { - const treeContext = useTreeContext(); - - const { - data: subDocsData, - isFetching, - isRefetching, - isLoading, - fetchNextPage: subDocsFetchNextPage, - hasNextPage: subDocsHasNextPage, - } = useInfiniteSearchDocs( - { - q: search, - page: 1, - target: DocSearchTarget.CURRENT, - parentPath: treeContext?.root?.path, - }, - { - enabled: !!treeContext?.root?.path, - }, - ); - - const [docsData, setDocsData] = useState>({ - groupName: '', - elements: [], - emptyString: '', - }); - - const loading = isFetching || isRefetching || isLoading; - - useEffect(() => { - if (loading) { - return; - } - - const subDocs = subDocsData?.pages.flatMap((page) => page.results) || []; - - setDocsData({ - groupName: subDocs.length > 0 ? t('Select a doc') : '', - elements: search ? subDocs : [], - emptyString: search ? t('No document found') : t('Search by title'), - endActions: subDocsHasNextPage - ? [ - { - content: void subDocsFetchNextPage()} />, - }, - ] - : [], - }); - }, [ - loading, - search, - subDocsData?.pages, - subDocsFetchNextPage, - subDocsHasNextPage, - treeContext?.root, - ]); - - useEffect(() => { - onLoadingChange?.(loading); - }, [loading, onLoadingChange]); - - return ( - - ); -};