43 lines · 1.4 KB · TypeScript
RawDownload
import type { ProjectSearchEntriesResult } from "@t3tools/contracts";import { queryOptions } from "@tanstack/react-query";import { ensureNativeApi } from "~/nativeApi"; export const projectQueryKeys = {  all: ["projects"] as const,  searchEntries: (cwd: string | null, query: string, limit: number) =>    ["projects", "search-entries", cwd, query, limit] as const,}; const DEFAULT_SEARCH_ENTRIES_LIMIT = 80;const DEFAULT_SEARCH_ENTRIES_STALE_TIME = 15_000;const EMPTY_SEARCH_ENTRIES_RESULT: ProjectSearchEntriesResult = {  entries: [],  truncated: false,}; export function projectSearchEntriesQueryOptions(input: {  cwd: string | null;  query: string;  enabled?: boolean;  limit?: number;  staleTime?: number;}) {  const limit = input.limit ?? DEFAULT_SEARCH_ENTRIES_LIMIT;  return queryOptions({    queryKey: projectQueryKeys.searchEntries(input.cwd, input.query, limit),    queryFn: async () => {      const api = ensureNativeApi();      if (!input.cwd) {        throw new Error("Workspace entry search is unavailable.");      }      return api.projects.searchEntries({        cwd: input.cwd,        query: input.query,        limit,      });    },    enabled: (input.enabled ?? true) && input.cwd !== null && input.query.length > 0,    staleTime: input.staleTime ?? DEFAULT_SEARCH_ENTRIES_STALE_TIME,    placeholderData: (previous) => previous ?? EMPTY_SEARCH_ENTRIES_RESULT,  });}