Tweak advanced search UI for better localization (#11266)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {platform} from '#/alf'
|
import {platform} from '#/alf'
|
||||||
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
||||||
@@ -19,11 +19,12 @@ export function FromDropdown({
|
|||||||
const {t: l} = useLingui()
|
const {t: l} = useLingui()
|
||||||
|
|
||||||
const options: {value: FromFilter; label: string}[] = [
|
const options: {value: FromFilter; label: string}[] = [
|
||||||
{value: 'anyone', label: l`Anyone`},
|
{value: 'anyone', label: l`No author filter`},
|
||||||
{value: 'following', label: l`People I follow`},
|
{value: 'following', label: l`People I follow`},
|
||||||
{value: 'me', label: l`Me`},
|
{value: 'me', label: l`Me`},
|
||||||
]
|
]
|
||||||
const currentLabel = options.find(o => o.value === value)?.label ?? l`Anyone`
|
const currentLabel =
|
||||||
|
options.find(o => o.value === value)?.label ?? l`No author filter`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu.Root>
|
<Menu.Root>
|
||||||
@@ -45,19 +46,25 @@ export function FromDropdown({
|
|||||||
)}
|
)}
|
||||||
</Menu.Trigger>
|
</Menu.Trigger>
|
||||||
<Menu.Outer>
|
<Menu.Outer>
|
||||||
<Menu.LabelText>
|
<Menu.Item
|
||||||
<Trans>Filter by author</Trans>
|
label={options[0].label}
|
||||||
</Menu.LabelText>
|
onPress={() => onChange(options[0].value)}>
|
||||||
|
<Menu.ItemText>{options[0].label}</Menu.ItemText>
|
||||||
|
<Menu.ItemRadio selected={value === options[0].value} />
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Divider />
|
||||||
<Menu.Group>
|
<Menu.Group>
|
||||||
{options.map(option => (
|
{options.map((option, index) =>
|
||||||
<Menu.Item
|
index === 0 ? null : (
|
||||||
key={option.value}
|
<Menu.Item
|
||||||
label={option.label}
|
key={option.value}
|
||||||
onPress={() => onChange(option.value)}>
|
label={option.label}
|
||||||
<Menu.ItemText>{option.label}</Menu.ItemText>
|
onPress={() => onChange(option.value)}>
|
||||||
<Menu.ItemRadio selected={value === option.value} />
|
<Menu.ItemText>{option.label}</Menu.ItemText>
|
||||||
</Menu.Item>
|
<Menu.ItemRadio selected={value === option.value} />
|
||||||
))}
|
</Menu.Item>
|
||||||
|
),
|
||||||
|
)}
|
||||||
</Menu.Group>
|
</Menu.Group>
|
||||||
</Menu.Outer>
|
</Menu.Outer>
|
||||||
</Menu.Root>
|
</Menu.Root>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {platform} from '#/alf'
|
import {platform} from '#/alf'
|
||||||
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
||||||
@@ -19,16 +19,17 @@ export function MediaDropdown({
|
|||||||
const {t: l} = useLingui()
|
const {t: l} = useLingui()
|
||||||
|
|
||||||
const options: {value: MediaFilter; label: string}[] = [
|
const options: {value: MediaFilter; label: string}[] = [
|
||||||
{value: 'all', label: l`All posts`},
|
{value: 'all', label: l`No media filter`},
|
||||||
{value: 'media', label: l`Only posts with media`},
|
{value: 'media', label: l`Only posts with media`},
|
||||||
{value: 'video', label: l`Only posts with videos`},
|
{value: 'video', label: l`Only posts with videos`},
|
||||||
]
|
]
|
||||||
const currentLabel =
|
const currentLabel =
|
||||||
options.find(o => o.value === value)?.label ?? l`All posts`
|
options.find(o => o.value === value)?.label ?? l`No media filter`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu.Root>
|
<Menu.Root>
|
||||||
<Menu.Trigger label={l`Filter by media (currently: ${currentLabel})`}>
|
<Menu.Trigger
|
||||||
|
label={l`Filter search by media (currently: ${currentLabel})`}>
|
||||||
{({props}) => (
|
{({props}) => (
|
||||||
<Button
|
<Button
|
||||||
{...props}
|
{...props}
|
||||||
@@ -46,19 +47,25 @@ export function MediaDropdown({
|
|||||||
)}
|
)}
|
||||||
</Menu.Trigger>
|
</Menu.Trigger>
|
||||||
<Menu.Outer>
|
<Menu.Outer>
|
||||||
<Menu.LabelText>
|
<Menu.Item
|
||||||
<Trans>Filter by media</Trans>
|
label={options[0].label}
|
||||||
</Menu.LabelText>
|
onPress={() => onChange(options[0].value)}>
|
||||||
|
<Menu.ItemText>{options[0].label}</Menu.ItemText>
|
||||||
|
<Menu.ItemRadio selected={value === options[0].value} />
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Divider />
|
||||||
<Menu.Group>
|
<Menu.Group>
|
||||||
{options.map(option => (
|
{options.map((option, index) =>
|
||||||
<Menu.Item
|
index === 0 ? null : (
|
||||||
key={option.value}
|
<Menu.Item
|
||||||
label={option.label}
|
key={option.value}
|
||||||
onPress={() => onChange(option.value)}>
|
label={option.label}
|
||||||
<Menu.ItemText>{option.label}</Menu.ItemText>
|
onPress={() => onChange(option.value)}>
|
||||||
<Menu.ItemRadio selected={value === option.value} />
|
<Menu.ItemText>{option.label}</Menu.ItemText>
|
||||||
</Menu.Item>
|
<Menu.ItemRadio selected={value === option.value} />
|
||||||
))}
|
</Menu.Item>
|
||||||
|
),
|
||||||
|
)}
|
||||||
</Menu.Group>
|
</Menu.Group>
|
||||||
</Menu.Outer>
|
</Menu.Outer>
|
||||||
</Menu.Root>
|
</Menu.Root>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {platform} from '#/alf'
|
import {platform} from '#/alf'
|
||||||
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
||||||
@@ -19,11 +19,12 @@ export function RepliesDropdown({
|
|||||||
const {t: l} = useLingui()
|
const {t: l} = useLingui()
|
||||||
|
|
||||||
const options: {value: RepliesFilter; label: string}[] = [
|
const options: {value: RepliesFilter; label: string}[] = [
|
||||||
{value: 'all', label: l`Posts and replies`},
|
{value: 'all', label: l`No post filter`},
|
||||||
{value: 'none', label: l`No replies`},
|
{value: 'none', label: l`Only posts`},
|
||||||
{value: 'only', label: l`Only replies`},
|
{value: 'only', label: l`Only replies`},
|
||||||
]
|
]
|
||||||
const currentLabel = options.find(o => o.value === value)?.label ?? l`All`
|
const currentLabel =
|
||||||
|
options.find(o => o.value === value)?.label ?? l`No post filter`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu.Root>
|
<Menu.Root>
|
||||||
@@ -46,19 +47,25 @@ export function RepliesDropdown({
|
|||||||
)}
|
)}
|
||||||
</Menu.Trigger>
|
</Menu.Trigger>
|
||||||
<Menu.Outer>
|
<Menu.Outer>
|
||||||
<Menu.LabelText>
|
<Menu.Item
|
||||||
<Trans>Include these results</Trans>
|
label={options[0].label}
|
||||||
</Menu.LabelText>
|
onPress={() => onChange(options[0].value)}>
|
||||||
|
<Menu.ItemText>{options[0].label}</Menu.ItemText>
|
||||||
|
<Menu.ItemRadio selected={value === options[0].value} />
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Divider />
|
||||||
<Menu.Group>
|
<Menu.Group>
|
||||||
{options.map(option => (
|
{options.map((option, index) =>
|
||||||
<Menu.Item
|
index === 0 ? null : (
|
||||||
key={option.value}
|
<Menu.Item
|
||||||
label={option.label}
|
key={option.value}
|
||||||
onPress={() => onChange(option.value)}>
|
label={option.label}
|
||||||
<Menu.ItemText>{option.label}</Menu.ItemText>
|
onPress={() => onChange(option.value)}>
|
||||||
<Menu.ItemRadio selected={value === option.value} />
|
<Menu.ItemText>{option.label}</Menu.ItemText>
|
||||||
</Menu.Item>
|
<Menu.ItemRadio selected={value === option.value} />
|
||||||
))}
|
</Menu.Item>
|
||||||
|
),
|
||||||
|
)}
|
||||||
</Menu.Group>
|
</Menu.Group>
|
||||||
</Menu.Outer>
|
</Menu.Outer>
|
||||||
</Menu.Root>
|
</Menu.Root>
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export function useFilterFieldLabels(): Record<
|
|||||||
message: 'These URLs',
|
message: 'These URLs',
|
||||||
comment: 'Advanced search filter',
|
comment: 'Advanced search filter',
|
||||||
}),
|
}),
|
||||||
label: 'bsky.app atproto.com',
|
label: 'https://bsky.app https://atproto.com',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -390,7 +390,7 @@ function DialogInner({
|
|||||||
a.mb_sm,
|
a.mb_sm,
|
||||||
]}>
|
]}>
|
||||||
<Trans comment="Include search results with or without replies">
|
<Trans comment="Include search results with or without replies">
|
||||||
Include
|
Post type
|
||||||
</Trans>
|
</Trans>
|
||||||
</Text>
|
</Text>
|
||||||
<View style={[a.flex_row]}>
|
<View style={[a.flex_row]}>
|
||||||
@@ -406,7 +406,7 @@ function DialogInner({
|
|||||||
a.mb_sm,
|
a.mb_sm,
|
||||||
]}>
|
]}>
|
||||||
<Trans comment="Filter search results by a specific post author">
|
<Trans comment="Filter search results by a specific post author">
|
||||||
From
|
Author
|
||||||
</Trans>
|
</Trans>
|
||||||
</Text>
|
</Text>
|
||||||
<View style={[a.flex_row]}>
|
<View style={[a.flex_row]}>
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ export function SearchLanguageDropdown({
|
|||||||
}, [appLanguage, contentLanguages, primaryLanguage])
|
}, [appLanguage, contentLanguages, primaryLanguage])
|
||||||
|
|
||||||
const currentLanguageLabel =
|
const currentLanguageLabel =
|
||||||
languages.find(lang => lang.value === value)?.label ?? l`All languages`
|
languages.find(lang => lang.value === value)?.label ?? l`No language filter`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu.Root>
|
<Menu.Root>
|
||||||
@@ -88,12 +88,9 @@ export function SearchLanguageDropdown({
|
|||||||
)}
|
)}
|
||||||
</Menu.Trigger>
|
</Menu.Trigger>
|
||||||
<Menu.Outer>
|
<Menu.Outer>
|
||||||
<Menu.LabelText>
|
<Menu.Item label={l`No language filter`} onPress={() => onChange('')}>
|
||||||
<Trans>Filter search by language</Trans>
|
|
||||||
</Menu.LabelText>
|
|
||||||
<Menu.Item label={l`All languages`} onPress={() => onChange('')}>
|
|
||||||
<Menu.ItemText>
|
<Menu.ItemText>
|
||||||
<Trans>All languages</Trans>
|
<Trans>No language filter</Trans>
|
||||||
</Menu.ItemText>
|
</Menu.ItemText>
|
||||||
<Menu.ItemRadio selected={value === ''} />
|
<Menu.ItemRadio selected={value === ''} />
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
|
|||||||
Reference in New Issue
Block a user