update and fix messanger
This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
||||
ContextMenuSeparator,
|
||||
ContextMenuTrigger
|
||||
} from '@/components/ui/context-menu';
|
||||
import { suppressChatDragSelection } from '@/hooks/use-chat-drag-selection';
|
||||
import type { ChatMessage } from '@/lib/api';
|
||||
import { QUICK_REACTIONS, canDeleteMessage, canEditMessage, getMessageCopyText } from '@/lib/chat-message-utils';
|
||||
import { cn } from '@/lib/utils';
|
||||
@@ -47,8 +48,17 @@ export function ChatMessageContextMenu({
|
||||
const copyText = getMessageCopyText(message, visibleText);
|
||||
const disabled = message.isDeleted;
|
||||
|
||||
function runMenuAction(action?: () => void) {
|
||||
suppressChatDragSelection();
|
||||
action?.();
|
||||
}
|
||||
|
||||
return (
|
||||
<ContextMenu>
|
||||
<ContextMenu
|
||||
onOpenChange={(open) => {
|
||||
if (open) suppressChatDragSelection(800);
|
||||
}}
|
||||
>
|
||||
<ContextMenuTrigger asChild>{children}</ContextMenuTrigger>
|
||||
<ContextMenuContent className="min-w-[240px]">
|
||||
{!disabled ? (
|
||||
@@ -59,7 +69,7 @@ export function ChatMessageContextMenu({
|
||||
key={emoji}
|
||||
type="button"
|
||||
className="flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-lg transition hover:bg-[#eef1f6]"
|
||||
onClick={() => onToggleReaction?.(emoji)}
|
||||
onClick={() => runMenuAction(() => onToggleReaction?.(emoji))}
|
||||
>
|
||||
{emoji}
|
||||
</button>
|
||||
@@ -69,22 +79,35 @@ export function ChatMessageContextMenu({
|
||||
</>
|
||||
) : null}
|
||||
{onReply && !disabled ? (
|
||||
<ContextMenuItem onClick={onReply}>
|
||||
<ContextMenuItem
|
||||
onSelect={(event) => {
|
||||
event.preventDefault();
|
||||
runMenuAction(onReply);
|
||||
}}
|
||||
>
|
||||
<Reply className="h-4 w-4" />
|
||||
Ответить
|
||||
</ContextMenuItem>
|
||||
) : null}
|
||||
{editable ? (
|
||||
<ContextMenuItem onClick={onEdit}>
|
||||
<ContextMenuItem
|
||||
onSelect={(event) => {
|
||||
event.preventDefault();
|
||||
runMenuAction(onEdit);
|
||||
}}
|
||||
>
|
||||
<Pencil className="h-4 w-4" />
|
||||
Изменить
|
||||
</ContextMenuItem>
|
||||
) : null}
|
||||
{copyText ? (
|
||||
<ContextMenuItem
|
||||
onClick={() => {
|
||||
void navigator.clipboard.writeText(copyText);
|
||||
onCopy?.();
|
||||
onSelect={(event) => {
|
||||
event.preventDefault();
|
||||
runMenuAction(() => {
|
||||
void navigator.clipboard.writeText(copyText);
|
||||
onCopy?.();
|
||||
});
|
||||
}}
|
||||
>
|
||||
<Copy className="h-4 w-4" />
|
||||
@@ -92,13 +115,24 @@ export function ChatMessageContextMenu({
|
||||
</ContextMenuItem>
|
||||
) : null}
|
||||
{onForward && !disabled && !message.isEncrypted ? (
|
||||
<ContextMenuItem onClick={onForward}>
|
||||
<ContextMenuItem
|
||||
onSelect={(event) => {
|
||||
event.preventDefault();
|
||||
runMenuAction(onForward);
|
||||
}}
|
||||
>
|
||||
<Forward className="h-4 w-4" />
|
||||
Переслать
|
||||
</ContextMenuItem>
|
||||
) : null}
|
||||
{deletable ? (
|
||||
<ContextMenuItem className="text-red-600 data-[highlighted]:bg-red-50 data-[highlighted]:text-red-700" onClick={onDelete}>
|
||||
<ContextMenuItem
|
||||
className="text-red-600 data-[highlighted]:bg-red-50 data-[highlighted]:text-red-700"
|
||||
onSelect={(event) => {
|
||||
event.preventDefault();
|
||||
runMenuAction(onDelete);
|
||||
}}
|
||||
>
|
||||
<Trash2 className="h-4 w-4" />
|
||||
Удалить
|
||||
</ContextMenuItem>
|
||||
@@ -106,7 +140,12 @@ export function ChatMessageContextMenu({
|
||||
{onSelect && !disabled ? (
|
||||
<>
|
||||
<ContextMenuSeparator />
|
||||
<ContextMenuItem onClick={onSelect}>
|
||||
<ContextMenuItem
|
||||
onSelect={(event) => {
|
||||
event.preventDefault();
|
||||
runMenuAction(onSelect);
|
||||
}}
|
||||
>
|
||||
<CheckCircle2 className="h-4 w-4" />
|
||||
Выделить
|
||||
</ContextMenuItem>
|
||||
|
||||
Reference in New Issue
Block a user