Skip to content

Commit 29a01c4

Browse files
committed
feat: hook to fetch single meilisearch document
1 parent 242f403 commit 29a01c4

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/search-manager/data/api.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,3 +491,18 @@ export async function fetchTagsThatMatchKeyword({
491491

492492
return { matches: Array.from(matches).map((tagPath) => ({ tagPath })), mayBeMissingResults: hits.length === limit };
493493
}
494+
495+
/**
496+
* Fetch single document by its id
497+
*/
498+
export async function fetchDocumentById({ client, indexName, id } : {
499+
/** The Meilisearch client instance */
500+
client: MeiliSearch;
501+
/** Which index to search */
502+
indexName: string;
503+
/** document id */
504+
id: string | number;
505+
}): Promise<ContentHit | CollectionHit> {
506+
const doc = await client.index(indexName).getDocument(id);
507+
return formatSearchHit(doc);
508+
}

src/search-manager/data/apiHooks.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,26 @@ export const useTagFilterOptions = (args: {
240240

241241
return { ...mainQuery, data };
242242
};
243+
244+
export const useGetSingleDocument = ({ client, indexName, id }: {
245+
client?: MeiliSearch;
246+
indexName?: string;
247+
id: string | number;
248+
}) => (
249+
useQuery({
250+
enabled: client !== undefined && indexName !== undefined,
251+
queryKey: [
252+
'content_search',
253+
client?.config.apiKey,
254+
client?.config.host,
255+
indexName,
256+
id,
257+
],
258+
queryFn: () => {
259+
if (client === undefined || indexName === undefined) {
260+
throw new Error('Required data unexpectedly undefined. Check "enable" condition of useQuery.');
261+
}
262+
return fetchDocumentById({ client, indexName, id });
263+
},
264+
})
265+
)

0 commit comments

Comments
 (0)