From 7382979dff2dfbd2a9d185765f59d27ac873e7de Mon Sep 17 00:00:00 2001 From: gofnnp Date: Thu, 31 Jul 2025 14:12:36 +0400 Subject: [PATCH] edits-31-07 dashboard new messages, Enter - send & ctrl + Enter - \n, payment success button fix --- src/app/[locale]/(core)/page.module.scss | 1 + .../(payment)/payment/success/Metrics.tsx | 8 +++--- .../chat/MessageInput/MessageInput.tsx | 25 +++++++++++++++++++ .../NewMessagesSection.module.scss | 3 +++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/app/[locale]/(core)/page.module.scss b/src/app/[locale]/(core)/page.module.scss index 6465f91..7f581db 100644 --- a/src/app/[locale]/(core)/page.module.scss +++ b/src/app/[locale]/(core)/page.module.scss @@ -2,4 +2,5 @@ display: flex; flex-direction: column; gap: 24px; + position: relative; } diff --git a/src/app/[locale]/(payment)/payment/success/Metrics.tsx b/src/app/[locale]/(payment)/payment/success/Metrics.tsx index eb12a63..75ad095 100644 --- a/src/app/[locale]/(payment)/payment/success/Metrics.tsx +++ b/src/app/[locale]/(payment)/payment/success/Metrics.tsx @@ -30,7 +30,7 @@ export default function Metrics({ // Yandex Metrica useEffect(() => { - const interval = setInterval(() => { + const timeout = setTimeout(() => { if ( typeof window.ym === "function" && typeof window.klaviyo === "object" && @@ -49,18 +49,18 @@ export default function Metrics({ window.ym(95799066, "reachGoal", "PaymentSuccess", {}, () => { // deleteYm() - setIsButtonVisible(true); }); } catch (e) { // eslint-disable-next-line no-console console.error("YM error:", e); } finally { - clearInterval(interval); + clearTimeout(timeout); + setIsButtonVisible(true); } } }, 200); - return () => clearInterval(interval); + return () => clearTimeout(timeout); }, []); return ( diff --git a/src/components/domains/chat/MessageInput/MessageInput.tsx b/src/components/domains/chat/MessageInput/MessageInput.tsx index 4f38d5f..eac5336 100644 --- a/src/components/domains/chat/MessageInput/MessageInput.tsx +++ b/src/components/domains/chat/MessageInput/MessageInput.tsx @@ -22,12 +22,37 @@ export default function MessageInput({ onSend }: MessageInputProps) { } }; + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter") { + if (e.ctrlKey) { + // Ctrl + Enter - добавляем перенос строки + e.preventDefault(); + const target = e.target as HTMLTextAreaElement; + const start = target.selectionStart; + const end = target.selectionEnd; + const newValue = + message.substring(0, start) + "\n" + message.substring(end); + setMessage(newValue); + + // Устанавливаем курсор после переноса строки + setTimeout(() => { + target.selectionStart = target.selectionEnd = start + 1; + }, 0); + } else { + // Enter без Ctrl - отправляем сообщение + e.preventDefault(); + handleSend(); + } + } + }; + return (
setMessage(e.target.value)} placeholder={t("message_input_placeholder")} + onKeyDown={handleKeyDown} maxRows={5} />