feat: from:me search syntax
parent
17f7c36edf
commit
7f4d3dc999
|
@ -37,3 +37,27 @@ export function countLines(str: string | undefined): number {
|
||||||
if (!str) return 0
|
if (!str) return 0
|
||||||
return str.match(/\n/g)?.length ?? 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('')
|
||||||
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ import {useSetMinimalShellMode, useSetDrawerSwipeDisabled} from '#/state/shell'
|
||||||
import {isWeb} from '#/platform/detection'
|
import {isWeb} from '#/platform/detection'
|
||||||
import {listenSoftReset} from '#/state/events'
|
import {listenSoftReset} from '#/state/events'
|
||||||
import {s} from '#/lib/styles'
|
import {s} from '#/lib/styles'
|
||||||
|
import {augmentSearchQuery} from '#/lib/strings/helpers'
|
||||||
|
|
||||||
function Loader() {
|
function Loader() {
|
||||||
const pal = usePalette('default')
|
const pal = usePalette('default')
|
||||||
|
@ -315,9 +316,13 @@ export function SearchScreenInner({
|
||||||
const pal = usePalette('default')
|
const pal = usePalette('default')
|
||||||
const setMinimalShellMode = useSetMinimalShellMode()
|
const setMinimalShellMode = useSetMinimalShellMode()
|
||||||
const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled()
|
const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled()
|
||||||
const {hasSession} = useSession()
|
const {hasSession, currentAccount} = useSession()
|
||||||
const {isDesktop} = useWebMediaQueries()
|
const {isDesktop} = useWebMediaQueries()
|
||||||
|
|
||||||
|
const augmentedQuery = React.useMemo(() => {
|
||||||
|
return augmentSearchQuery(query || '', {did: currentAccount?.did})
|
||||||
|
}, [query, currentAccount])
|
||||||
|
|
||||||
const onPageSelected = React.useCallback(
|
const onPageSelected = React.useCallback(
|
||||||
(index: number) => {
|
(index: number) => {
|
||||||
setMinimalShellMode(false)
|
setMinimalShellMode(false)
|
||||||
|
@ -338,7 +343,7 @@ export function SearchScreenInner({
|
||||||
)}
|
)}
|
||||||
initialPage={0}>
|
initialPage={0}>
|
||||||
<View>
|
<View>
|
||||||
<SearchScreenPostResults query={query} />
|
<SearchScreenPostResults query={augmentedQuery} />
|
||||||
</View>
|
</View>
|
||||||
<View>
|
<View>
|
||||||
<SearchScreenUserResults query={query} />
|
<SearchScreenUserResults query={query} />
|
||||||
|
|
Loading…
Reference in New Issue