diff --git a/src/lib/strings/helpers.ts b/src/lib/strings/helpers.ts index 381ae32f..e2abe901 100644 --- a/src/lib/strings/helpers.ts +++ b/src/lib/strings/helpers.ts @@ -37,3 +37,27 @@ export function countLines(str: string | undefined): number { if (!str) return 0 return str.match(/\n/g)?.length ?? 0 } + +// Augments search query with additional syntax like `from:me` +export function augmentSearchQuery(query: string, {did}: {did?: string}) { + // Don't do anything if there's no DID + if (!did) { + return query + } + + // We don't want to replace substrings that are being "quoted" because those + // are exact string matches, so what we'll do here is to split them apart + + // Even-indexed strings are unquoted, odd-indexed strings are quoted + const splits = query.split(/("(?:[^"\\]|\\.)*")/g) + + return splits + .map((str, idx) => { + if (idx % 2 === 0) { + return str.replaceAll(/(^|\s)from:me(\s|$)/g, `$1${did}$2`) + } + + return str + }) + .join('') +} diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index 80b514e2..df64cc5a 100644 --- a/src/view/screens/Search/Search.tsx +++ b/src/view/screens/Search/Search.tsx @@ -52,6 +52,7 @@ import {isNative, isWeb} from '#/platform/detection' import {listenSoftReset} from '#/state/events' import {s} from '#/lib/styles' import AsyncStorage from '@react-native-async-storage/async-storage' +import {augmentSearchQuery} from '#/lib/strings/helpers' function Loader() { const pal = usePalette('default') @@ -318,9 +319,13 @@ export function SearchScreenInner({ const pal = usePalette('default') const setMinimalShellMode = useSetMinimalShellMode() const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() - const {hasSession} = useSession() + const {hasSession, currentAccount} = useSession() const {isDesktop} = useWebMediaQueries() + const augmentedQuery = React.useMemo(() => { + return augmentSearchQuery(query || '', {did: currentAccount?.did}) + }, [query, currentAccount]) + const onPageSelected = React.useCallback( (index: number) => { setMinimalShellMode(false) @@ -343,7 +348,7 @@ export function SearchScreenInner({ )} initialPage={0}> - +