Fix autofocusing Emoji reaction picker search (#10599)

This commit is contained in:
Samuel Newman
2026-05-22 23:07:47 +03:00
committed by GitHub
parent 96ae32b78e
commit 66d37f55b4
4 changed files with 20 additions and 1 deletions
+1
View File
@@ -98,6 +98,7 @@ export function Outer({
}: React.PropsWithChildren<{ }: React.PropsWithChildren<{
showCancel?: boolean showCancel?: boolean
style?: StyleProp<ViewStyle> style?: StyleProp<ViewStyle>
onCloseAutoFocus?: (event: Event) => void
}>) { }>) {
const context = useMenuContext() const context = useMenuContext()
const {_} = useLingui() const {_} = useLingui()
+5
View File
@@ -181,9 +181,13 @@ export function Trigger({
export function Outer({ export function Outer({
children, children,
style, style,
onCloseAutoFocus,
}: React.PropsWithChildren<{ }: React.PropsWithChildren<{
showCancel?: boolean showCancel?: boolean
style?: StyleProp<ViewStyle> style?: StyleProp<ViewStyle>
onCloseAutoFocus?: React.ComponentProps<
typeof DropdownMenu.Content
>['onCloseAutoFocus']
}>) { }>) {
const t = useTheme() const t = useTheme()
const {reduceMotionEnabled} = useA11y() const {reduceMotionEnabled} = useA11y()
@@ -195,6 +199,7 @@ export function Outer({
collisionPadding={{left: 5, right: 5, bottom: 5}} collisionPadding={{left: 5, right: 5, bottom: 5}}
loop loop
aria-label="Test" aria-label="Test"
onCloseAutoFocus={onCloseAutoFocus}
className="dropdown-menu-transform-origin dropdown-menu-constrain-size"> className="dropdown-menu-transform-origin dropdown-menu-constrain-size">
<View <View
style={[ style={[
+13 -1
View File
@@ -68,7 +68,19 @@ function MenuInner({
return expanded ? ( return expanded ? (
<EmojiPicker.Picker keepOpenWhenShiftHeld={false} /> <EmojiPicker.Picker keepOpenWhenShiftHeld={false} />
) : ( ) : (
<Menu.Outer style={[a.rounded_full]}> <Menu.Outer
style={[a.rounded_full]}
onCloseAutoFocus={evt => {
// If something has already taken focus (e.g. emoji-mart's search
// input when swapping to the full picker), don't let Radix restore
// focus to the trigger and steal it back.
if (
document.activeElement &&
document.activeElement !== document.body
) {
evt.preventDefault()
}
}}>
<View style={[a.flex_row, a.gap_xs]}> <View style={[a.flex_row, a.gap_xs]}>
{['❤️', '👍', '😆', '👀', '😢'].map(emoji => { {['❤️', '👍', '😆', '👀', '😢'].map(emoji => {
const alreadyReacted = hasAlreadyReacted( const alreadyReacted = hasAlreadyReacted(
+1
View File
@@ -217,6 +217,7 @@ let MessageItem = ({
const avatar = const avatar =
profile && moderationOpts ? ( profile && moderationOpts ? (
<Link <Link
style={[a.rounded_full]}
label={l`${createSanitizedDisplayName(profile)}s avatar`} label={l`${createSanitizedDisplayName(profile)}s avatar`}
accessibilityHint={l`Opens this profile`} accessibilityHint={l`Opens this profile`}
to={makeProfileLink({ to={makeProfileLink({