diff --git a/packages/chat/src/components/messageContextMenu.tsx b/packages/chat/src/components/messageContextMenu.tsx index dcbc707..fb7d6ff 100644 --- a/packages/chat/src/components/messageContextMenu.tsx +++ b/packages/chat/src/components/messageContextMenu.tsx @@ -11,6 +11,8 @@ import { ContextMenuTrigger, Drawer, DrawerContent, + DrawerDescription, + DrawerTitle, DrawerTrigger, useIsMobile, } from "@tensamin/ui"; @@ -41,6 +43,12 @@ type MenuComponents = { SubContent: (props: { children: ReactNode }) => ReactElement; }; +function blurActiveElement() { + if (document.activeElement instanceof HTMLElement) { + document.activeElement.blur(); + } +} + const desktopMenuComponents: MenuComponents = { Content: ContextMenuContent, Group: ContextMenuGroup, @@ -51,10 +59,20 @@ const desktopMenuComponents: MenuComponents = { SubContent: ContextMenuSubContent, }; -function getMobileMenuComponents(onClose: () => void): MenuComponents { +function getMobileMenuComponents({ + description, + onClose, + title, +}: { + description: string; + onClose: () => void; + title: string; +}): MenuComponents { return { Content: ({ className, children }) => ( + {title} + {description}
{children}
), @@ -62,6 +80,7 @@ function getMobileMenuComponents(onClose: () => void): MenuComponents { Item: ({ children, className, disabled, onClick, variant = "default" }) => { async function handleClick() { await onClick?.(); + blurActiveElement(); onClose(); } @@ -86,8 +105,9 @@ function getMobileMenuComponents(onClose: () => void): MenuComponents { Sub: ({ children }) =>
{children}
, SubTrigger: ({ children, onClick }) => { async function handleClick() { - await onClick?.(); + blurActiveElement(); onClose(); + await onClick?.(); } return ( @@ -198,11 +218,23 @@ export default function MessageContextMenu({ ); const [mainDrawerOpen, setMainDrawerOpen] = useState(false); const [reactionDrawerOpen, setReactionDrawerOpen] = useState(false); - const mainDrawerComponents = getMobileMenuComponents(() => - setMainDrawerOpen(false), + const mainDrawerComponents = useMemo( + () => + getMobileMenuComponents({ + description: "Actions available for this message.", + onClose: () => setMainDrawerOpen(false), + title: "Message actions", + }), + [], ); - const reactionDrawerComponents = getMobileMenuComponents(() => - setReactionDrawerOpen(false), + const reactionDrawerComponents = useMemo( + () => + getMobileMenuComponents({ + description: "Choose a reaction to add to this message.", + onClose: () => setReactionDrawerOpen(false), + title: "Add reaction", + }), + [], ); if (isMobile) { @@ -221,7 +253,13 @@ export default function MessageContextMenu({ - + Add reaction + + Choose a reaction to add to this message. + +
+ +