From b5681e61050f91fc5a01ae72d8c95345d9efde4d Mon Sep 17 00:00:00 2001 From: Ldoppea Date: Sun, 12 Jan 2025 15:47:29 +0100 Subject: [PATCH] feat: Implement search feature --- src/App.js | 7 +++++++ src/app/domain/search/search.ts | 20 ++++++++++++++++++++ src/libs/intents/localMethods.ts | 13 +++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/app/domain/search/search.ts diff --git a/src/App.js b/src/App.js index 238325336..050b3cdd7 100644 --- a/src/App.js +++ b/src/App.js @@ -73,6 +73,7 @@ import LauncherView from '/screens/konnectors/LauncherView' import { makeImportantFilesAvailableOfflineInBackground } from '/app/domain/io.cozy.files/importantFiles' import { useOfflineReplicationOnRealtime } from '/app/domain/offline/hooks/useOfflineReplicationOnRealtime' import { useShareFiles } from '/app/domain/osReceive/services/shareFilesService' +import { initSearchEngine } from '/app/domain/search/search' import { ClouderyOffer } from '/app/view/IAP/ClouderyOffer' import { useDimensions } from '/libs/dimensions' import { configureFileLogger } from '/app/domain/logger/fileLogger' @@ -135,6 +136,12 @@ const App = ({ setClient }) => { useOfflineDebugUniversalLinks(client) usePerformancesUniversalLinks(client) + useEffect(() => { + if (client) { + initSearchEngine(client) + } + }, [client]) + const { LauncherDialog, canDisplayLauncher, diff --git a/src/app/domain/search/search.ts b/src/app/domain/search/search.ts new file mode 100644 index 000000000..3bcc35305 --- /dev/null +++ b/src/app/domain/search/search.ts @@ -0,0 +1,20 @@ +import CozyClient from 'cozy-client' +import { SearchEngine } from 'cozy-dataproxy-lib/dist/api' +import type { SearchOptions } from 'cozy-dataproxy-lib/dist/search/types' +import Minilog from 'cozy-minilog' + +const log = Minilog('📱🗂️ Search') + +let searchEngine: SearchEngine | undefined = undefined + +export const initSearchEngine = (client: CozyClient): void => { + log.debug('Init SearchEngine') + searchEngine = new SearchEngine(client) +} + +export const search = (query: string, options: SearchOptions): unknown => { + log.debug('Search for', query) + if (!searchEngine) return undefined + + return searchEngine.search(query, options) +} diff --git a/src/libs/intents/localMethods.ts b/src/libs/intents/localMethods.ts index bb796b047..ee2819355 100644 --- a/src/libs/intents/localMethods.ts +++ b/src/libs/intents/localMethods.ts @@ -3,6 +3,7 @@ import { getDeviceName } from 'react-native-device-info' import CozyClient, { QueryDefinition } from 'cozy-client' import type { FileDocument } from 'cozy-client/types/types' +import type { SearchOptions } from 'cozy-dataproxy-lib/dist/search/types' import { FlagshipUI, NativeMethodsRegisterWithOptions, @@ -17,6 +18,7 @@ import { isScannerAvailable } from '/app/domain/scanner/services/scanner' import { processOcr, isOcrAvailable } from '/app/domain/ocr/services/ocr' +import { search as doSearch } from '/app/domain/search/search' import { setColorScheme } from '/app/theme/colorScheme' import { printBase64Doc as print } from '/libs/intents/printBase64Doc' import { setHomeThemeIntent } from '/libs/intents/setHomeThemeIntent' @@ -95,6 +97,10 @@ export const backToHome = (): Promise => { return Promise.resolve(null) } +const search = (query: string, options: SearchOptions): unknown => { + return doSearch(query, options) +} + const isAvailable = (featureName: string): Promise => { if (featureName === 'geolocationTracking') { return Promise.resolve(true) @@ -116,6 +122,8 @@ const isAvailable = (featureName: string): Promise => { return Promise.resolve(true) } else if (featureName === 'downloadFile') { return Promise.resolve(true) + } else if (featureName === 'search') { + return Promise.resolve(true) } return Promise.resolve(false) @@ -407,6 +415,11 @@ export const localMethods = ( flagshipLinkRequest(operation as QueryDefinition, client), downloadFile: (_options, file) => downloadFileAndPreview(file as FileDocument, client), + search: ( + _options: PostMeMessageOptions, + query: string, + options: SearchOptions + ) => search(query, options), ...mergedMethods } }