mirror of
https://github.com/docmost/docmost.git
synced 2025-11-18 19:01:10 +10:00
* feat(EE): fulltext search in attachments * feat: global search - search filters - attachments search ui - and more * fix import * fix import * rename migration * add GIN index * fix table name * sanitize
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { useQuery, UseQueryResult } from "@tanstack/react-query";
|
|
import {
|
|
searchPage,
|
|
searchAttachments,
|
|
} from "@/features/search/services/search-service";
|
|
import {
|
|
IAttachmentSearch,
|
|
IPageSearch,
|
|
IPageSearchParams,
|
|
} from "@/features/search/types/search.types";
|
|
import { useLicense } from "@/ee/hooks/use-license";
|
|
|
|
export type UnifiedSearchResult = IPageSearch | IAttachmentSearch;
|
|
|
|
export interface UseUnifiedSearchParams extends IPageSearchParams {
|
|
contentType?: string;
|
|
}
|
|
|
|
export function useUnifiedSearch(
|
|
params: UseUnifiedSearchParams,
|
|
): UseQueryResult<UnifiedSearchResult[], Error> {
|
|
const { hasLicenseKey } = useLicense();
|
|
|
|
const isAttachmentSearch =
|
|
params.contentType === "attachment" && hasLicenseKey;
|
|
const searchType = isAttachmentSearch ? "attachment" : "page";
|
|
|
|
return useQuery({
|
|
queryKey: ["unified-search", searchType, params],
|
|
queryFn: async () => {
|
|
// Remove contentType from backend params since it's only used for frontend routing
|
|
const { contentType, ...backendParams } = params;
|
|
|
|
if (isAttachmentSearch) {
|
|
return await searchAttachments(backendParams);
|
|
} else {
|
|
return await searchPage(backendParams);
|
|
}
|
|
},
|
|
enabled: !!params.query,
|
|
});
|
|
}
|