update and fix messanger

This commit is contained in:
lendry
2026-06-26 00:16:17 +03:00
parent b0ea87e898
commit 4e78a81eb1
14 changed files with 898 additions and 125 deletions

View File

@@ -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>