diff --git a/packages/client/src/components/document/actions/index.tsx b/packages/client/src/components/document/actions/index.tsx index a7573cde..27c2fef7 100644 --- a/packages/client/src/components/document/actions/index.tsx +++ b/packages/client/src/components/document/actions/index.tsx @@ -55,7 +55,6 @@ export const DocumentActions: React.FC = ({ = ({ documentId, disabled = false, render }) => { - const { data, toggle: toggleStar } = useDocumentCollectToggle(documentId); + const [visible, toggleVisible] = useToggle(false); + const { data, toggle: toggleStar } = useDocumentCollectToggle(documentId, { enabled: visible }); const text = data ? '取消收藏' : '收藏文档'; + const onViewportChange = useCallback( + (visible) => { + if (visible) { + toggleVisible(true); + } + }, + [toggleVisible] + ); + return ( - <> + {render ? ( render({ star: data, disabled, toggleStar, text }) ) : ( @@ -39,6 +51,6 @@ export const DocumentStar: React.FC = ({ documentId, disabled = false, r /> )} - + ); }; diff --git a/packages/client/src/data/collector.ts b/packages/client/src/data/collector.ts index 33c615f3..1b8fe884 100644 --- a/packages/client/src/data/collector.ts +++ b/packages/client/src/data/collector.ts @@ -7,7 +7,7 @@ import { triggerToggleCollectWiki, } from 'event'; import { useCallback, useEffect } from 'react'; -import { useQuery } from 'react-query'; +import { useQuery, UseQueryOptions } from 'react-query'; import { HttpClient } from 'services/http-client'; export type IWikiWithIsMember = IWiki & { isMember?: boolean }; @@ -168,9 +168,11 @@ export const toggleCollectDocument = (documentId, cookie = null): Promise { - const { data, error, refetch } = useQuery([CollectorApiDefinition.check.client(), documentId], () => - getDocumentIsCollected(documentId) +export const useDocumentCollectToggle = (documentId, options?: UseQueryOptions) => { + const { data, error, refetch } = useQuery( + [CollectorApiDefinition.check.client(), documentId], + () => getDocumentIsCollected(documentId), + options ); const toggle = useCallback(async () => {