Files
docmost/apps/client/src/features/search/queries/search-query.ts
T

69 lines
1.9 KiB
TypeScript

import { keepPreviousData, useQuery, UseQueryResult } from "@tanstack/react-query";
import {
searchAttachments,
searchPage,
searchPublicSpace,
searchShare,
searchSuggestions,
} from '@/features/search/services/search-service';
import {
IAttachmentSearch,
IPageSearch,
IPageSearchParams,
ISuggestionResult,
SearchSuggestionParams,
} from '@/features/search/types/search.types';
export function usePageSearchQuery(
params: IPageSearchParams,
): UseQueryResult<IPageSearch[], Error> {
return useQuery({
queryKey: ["page-search", params],
queryFn: () => searchPage(params),
enabled: !!params.query,
});
}
export function useSearchSuggestionsQuery(
params: SearchSuggestionParams & { preload?: boolean },
): UseQueryResult<ISuggestionResult, Error> {
const { preload, ...queryParams } = params;
return useQuery({
queryKey: ["search-suggestion", params.query],
staleTime: 60 * 1000, // 1min
queryFn: () => searchSuggestions(queryParams),
enabled: preload || !!params.query,
placeholderData: keepPreviousData,
});
}
export function useShareSearchQuery(
params: IPageSearchParams,
): UseQueryResult<IPageSearch[], Error> {
return useQuery({
queryKey: ["share-search", params],
queryFn: () => searchShare(params),
enabled: !!params.query,
});
}
export function useAttachmentSearchQuery(
params: IPageSearchParams,
): UseQueryResult<IAttachmentSearch[], Error> {
return useQuery({
queryKey: ["attachment-search", params],
queryFn: () => searchAttachments(params),
enabled: !!params.query,
});
}
export function usePublicSpaceSearchQuery(
params: IPageSearchParams & { spaceSlug: string },
): UseQueryResult<IPageSearch[], Error> {
return useQuery({
queryKey: ["public-space-search", params],
queryFn: () => searchPublicSpace(params),
enabled: !!params.query && !!params.spaceSlug,
});
}