[Chat] Message context menu fixes (#10314)

This commit is contained in:
Samuel Newman
2026-04-21 09:24:46 -07:00
committed by GitHub
parent 18052f08e0
commit 0df1d6f53e
4 changed files with 25 additions and 11 deletions
+18 -7
View File
@@ -54,7 +54,7 @@ import {HITSLOP_10} from '#/lib/constants'
import {useHaptics} from '#/lib/haptics'
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
import {logger} from '#/logger'
import {atoms as a, platform, tokens, useTheme} from '#/alf'
import {atoms as a, flatten, platform, tokens, useTheme} from '#/alf'
import {
Context,
ItemContext,
@@ -527,7 +527,8 @@ export function AuxiliaryView({
}
})
const menuContext = useMemo(() => ({align}), [align])
const xOffset = (flatten(style)?.marginLeft as number) ?? 0
const menuContext = useMemo(() => ({align, xOffset}), [align, xOffset])
const onLayout = useCallback(() => {
if (!measurement) return
@@ -655,7 +656,8 @@ export function Outer({
[context.measurement, frame.height, insets, translationSV],
)
const menuContext = useMemo(() => ({align}), [align])
const xOffset = (flatten(style)?.marginLeft as number) ?? 0
const menuContext = useMemo(() => ({align, xOffset}), [align, xOffset])
if (!context.isOpen || !context.measurement) return null
@@ -763,7 +765,7 @@ export function Item({
onOut: onPressOut,
} = useInteractionState()
const id = useId()
const {align} = useContextMenuMenuContext()
const {align, xOffset: menuXOffset} = useContextMenuMenuContext()
const {close, measurement, registerHoverable} = context
@@ -779,8 +781,8 @@ export function Item({
const xOffset = position
? position.x
: align === 'left'
? measurement.x
: measurement.x + measurement.width - layout.width
? measurement.x + menuXOffset
: measurement.x + measurement.width - layout.width - menuXOffset
registerHoverable(
id,
@@ -796,7 +798,16 @@ export function Item({
},
)
},
[id, measurement, registerHoverable, close, onPress, align, position],
[
id,
measurement,
registerHoverable,
close,
onPress,
align,
menuXOffset,
position,
],
)
const itemContext = useMemo(
+1
View File
@@ -65,6 +65,7 @@ export type ContextType = {
export type MenuContextType = {
align: 'left' | 'right'
xOffset: number
}
export type ItemContextType = {
+6 -3
View File
@@ -33,7 +33,7 @@ export function EmojiReactionPicker({
const t = useTheme()
const isFromSelf = message.sender?.did === currentAccount?.did
const {measurement, close} = useContextMenuContext()
const {align} = useContextMenuMenuContext()
const {align, xOffset} = useContextMenuMenuContext()
const [layout, setLayout] = useState({width: 0, height: 0})
const {width: screenWidth} = useWindowDimensions()
@@ -44,12 +44,15 @@ export function EmojiReactionPicker({
const position = useMemo(() => {
return {
x: align === 'left' ? 12 : screenWidth - layout.width - 12,
x:
align === 'left'
? (measurement?.x ?? 0) + xOffset
: (measurement?.x ?? 0) + (measurement?.width ?? 0) - layout.width,
y: (measurement?.y ?? 0) - tokens.space.xs - layout.height,
height: layout.height,
width: layout.width,
}
}, [measurement, align, screenWidth, layout])
}, [measurement, align, xOffset, screenWidth, layout])
const limitReacted = hasReachedReactionLimit(message, currentAccount?.did)
-1
View File
@@ -29,7 +29,6 @@ let MessageItemEmbed = ({
<View
style={[
!isFromSelf && a.ml_sm,
t.atoms.bg,
native({
flexBasis: 0,
width: Math.min(screen.width, 600) / 1.4,