"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { Button, Icon, IconName, TextareaAutoResize } from "@/components/ui"; import styles from "./MessageInput.module.scss"; interface MessageInputProps { onSend: (message: string) => void; disabled?: boolean; onDisabledClick?: () => void; } export default function MessageInput({ onSend, disabled = false, onDisabledClick, }: MessageInputProps) { const t = useTranslations("Chat"); const [message, setMessage] = useState(""); const handleSend = () => { if (message.trim() && !disabled) { onSend(message.trim()); setMessage(""); } }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { // If disabled (e.g., zero balance), open refill modal instead of sending if (!e.ctrlKey && disabled) { e.preventDefault(); onDisabledClick?.(); return; } 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} />
{/* Capture clicks when disabled to open refill modal */} {disabled && typeof onDisabledClick === "function" && (
)}
); }