From cf38ad7daa179065b4d577b8b037ede5548593ca Mon Sep 17 00:00:00 2001 From: Yash Johri Date: Thu, 13 Apr 2023 00:17:11 +0530 Subject: [PATCH 1/2] [Firecms] Add support for typesense search --- lib/.gitignore | 1 + lib/package.json | 4 ++- lib/src/firebase_app/index.ts | 2 +- lib/src/firebase_app/types/text_search.ts | 36 +++++++++++++++++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/lib/.gitignore b/lib/.gitignore index ac51b135b..ac66824a9 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -17,6 +17,7 @@ dist .env.test.local .env.production.local +yarn.lock npm-debug.log* yarn-debug.log* yarn-error.log* diff --git a/lib/package.json b/lib/package.json index 7bd960ea8..4912f0c50 100644 --- a/lib/package.json +++ b/lib/package.json @@ -75,7 +75,8 @@ "react": "^18.0.0", "react-dom": "^18.0.0", "react-router": "^6.2.0", - "react-router-dom": "^6.2.0" + "react-router-dom": "^6.2.0", + "typesense": "1.5.3" }, "eslintConfig": { "extends": [ @@ -120,6 +121,7 @@ "react-router-dom": "^6.9.0", "tsd": "^0.28.1", "typescript": "^5.0.2", + "typesense": "1.5.3", "vite": "^4.2.1" }, "files": [ diff --git a/lib/src/firebase_app/index.ts b/lib/src/firebase_app/index.ts index 61d6c69de..598580d81 100644 --- a/lib/src/firebase_app/index.ts +++ b/lib/src/firebase_app/index.ts @@ -16,4 +16,4 @@ export { useInitializeAppCheck } from "./hooks/useInitializeAppCheck"; export * from "./types/auth"; export type { FirestoreTextSearchController } from "./types/text_search"; -export { performAlgoliaTextSearch } from "./types/text_search"; +export { performAlgoliaTextSearch, performTypesenseSearch } from "./types/text_search"; diff --git a/lib/src/firebase_app/types/text_search.ts b/lib/src/firebase_app/types/text_search.ts index ae6a8da28..6c72bc6c1 100644 --- a/lib/src/firebase_app/types/text_search.ts +++ b/lib/src/firebase_app/types/text_search.ts @@ -1,4 +1,6 @@ import { SearchIndex } from "algoliasearch"; +import Collection from "typesense/lib/Typesense/Collection"; +import { SearchParams } from "typesense/lib/Typesense/Documents"; /** * Use this controller to return a list of ids from a search index, given a @@ -10,7 +12,10 @@ import { SearchIndex } from "algoliasearch"; * @see performAlgoliaTextSearch * @category Firebase */ -export type FirestoreTextSearchController = (props: { path: string, searchString: string }) => Promise | undefined; +export type FirestoreTextSearchController = (props: { + path: string; + searchString: string; +}) => Promise | undefined; /** * Utility function to perform a text search in an algolia index, @@ -19,8 +24,10 @@ export type FirestoreTextSearchController = (props: { path: string, searchString * @param query * @category Firebase */ -export function performAlgoliaTextSearch(index: SearchIndex, query: string): Promise { - +export function performAlgoliaTextSearch( + index: SearchIndex, + query: string +): Promise { console.debug("Performing Algolia query", index, query); return index .search(query) @@ -32,3 +39,26 @@ export function performAlgoliaTextSearch(index: SearchIndex, query: string): Pro return []; }); } + +/** + * Utility function to perform a text search in an typesense index, + * returning the ids of the entities. + * @param index + * @param query + * @category Firebase + */ +export function performTypesenseSearch( + index: Collection<{}>, + searchParameters: SearchParams +): Promise { + return index + .documents() + .search(searchParameters) + .then(({ hits }: any) => { + return hits.map((hit: any) => hit.document.id as string); + }) + .catch((err: any) => { + console.log(err); + return []; + }); +} From 1bea325f4df1fda8122e4e74dbaa13e2bdef74a4 Mon Sep 17 00:00:00 2001 From: Yash Johri Date: Thu, 13 Apr 2023 00:32:54 +0530 Subject: [PATCH 2/2] [Firecms] Add check for undefined --- lib/src/firebase_app/types/text_search.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/src/firebase_app/types/text_search.ts b/lib/src/firebase_app/types/text_search.ts index 6c72bc6c1..7662df429 100644 --- a/lib/src/firebase_app/types/text_search.ts +++ b/lib/src/firebase_app/types/text_search.ts @@ -54,7 +54,8 @@ export function performTypesenseSearch( return index .documents() .search(searchParameters) - .then(({ hits }: any) => { + .then(({ hits }) => { + if (hits === undefined) return []; return hits.map((hit: any) => hit.document.id as string); }) .catch((err: any) => {