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} />