diff --git a/packages/client/src/data/collector.tsx b/packages/client/src/data/collector.tsx index 9d94040a..630fd295 100644 --- a/packages/client/src/data/collector.tsx +++ b/packages/client/src/data/collector.tsx @@ -1,5 +1,12 @@ import { CollectorApiDefinition, CollectType, IDocument, IWiki } from '@think/domains'; -import { useCallback } from 'react'; +import { + event, + TOGGLE_COLLECT_DOUCMENT, + TOGGLE_COLLECT_WIKI, + triggerToggleCollectDocument, + triggerToggleCollectWiki, +} from 'event'; +import { useCallback, useEffect } from 'react'; import { useQuery } from 'react-query'; import { HttpClient } from 'services/http-client'; @@ -22,7 +29,18 @@ export const getCollectedWikis = (cookie = null): Promise = * @returns */ export const useCollectedWikis = () => { - const { data, error, isLoading, refetch } = useQuery(CollectorApiDefinition.wikis.client(), getCollectedWikis); + const { data, error, isLoading, refetch } = useQuery(CollectorApiDefinition.wikis.client(), getCollectedWikis, { + staleTime: 0, + }); + + useEffect(() => { + event.on(TOGGLE_COLLECT_WIKI, refetch); + + return () => { + event.off(TOGGLE_COLLECT_WIKI, refetch); + }; + }, [refetch]); + return { data, error, loading: isLoading, refresh: refetch }; }; @@ -73,6 +91,7 @@ export const useWikiCollectToggle = (wikiId) => { const toggle = useCallback(async () => { await toggleCollectWiki(wikiId); refetch(); + triggerToggleCollectWiki(); }, [refetch, wikiId]); return { data, error, toggle }; @@ -97,8 +116,16 @@ export const getCollectedDocuments = (cookie = null): Promise => { export const useCollectedDocuments = () => { const { data, error, isLoading, refetch } = useQuery( CollectorApiDefinition.documents.client(), - getCollectedDocuments + getCollectedDocuments, + { staleTime: 0 } ); + useEffect(() => { + event.on(TOGGLE_COLLECT_DOUCMENT, refetch); + + return () => { + event.off(TOGGLE_COLLECT_DOUCMENT, refetch); + }; + }, [refetch]); return { data, error, loading: isLoading, refresh: refetch }; }; @@ -149,6 +176,7 @@ export const useDocumentCollectToggle = (documentId) => { const toggle = useCallback(async () => { await toggleCollectDocument(documentId); refetch(); + triggerToggleCollectDocument(); }, [refetch, documentId]); return { data, error, toggle }; diff --git a/packages/client/src/event/index.ts b/packages/client/src/event/index.ts index 02f70995..dd21f481 100644 --- a/packages/client/src/event/index.ts +++ b/packages/client/src/event/index.ts @@ -5,6 +5,9 @@ export const event = new EventEmitter(); export const REFRESH_TOCS = `REFRESH_TOCS`; // 刷新知识库目录 export const CREATE_DOCUMENT = `CREATE_DOCUMENT`; +export const TOGGLE_COLLECT_WIKI = `TOGGLE_COLLECT_WIKI`; // 收藏或取消收藏知识库 +export const TOGGLE_COLLECT_DOUCMENT = `TOGGLE_COLLECT_DOUCMENT`; // 收藏或取消收藏文档 + /** * 刷新知识库目录 */ @@ -49,3 +52,11 @@ type CollaborationUser = { export const triggerJoinUser = (users: Array) => { event.emit(JOIN_USER, users); }; + +export const triggerToggleCollectWiki = () => { + event.emit(TOGGLE_COLLECT_WIKI); +}; + +export const triggerToggleCollectDocument = () => { + event.emit(TOGGLE_COLLECT_DOUCMENT); +}; diff --git a/packages/client/src/pages/_app.tsx b/packages/client/src/pages/_app.tsx index 223610c0..799d7216 100644 --- a/packages/client/src/pages/_app.tsx +++ b/packages/client/src/pages/_app.tsx @@ -16,6 +16,7 @@ class MyApp extends App<{ isMobile: boolean }> { queryClient: new QueryClient({ defaultOptions: { queries: { + refetchOnMount: true, refetchOnWindowFocus: true, retry: false, staleTime: 30000,