diff --git a/src/components/notes/ImproveTextModal.tsx b/src/components/notes/ImproveTextModal.tsx new file mode 100644 index 0000000..3850689 --- /dev/null +++ b/src/components/notes/ImproveTextModal.tsx @@ -0,0 +1,162 @@ +import React, { useState, useEffect } from "react"; +import { Icon } from "@iconify/react"; + +interface ImproveTextModalProps { + isOpen: boolean; + onClose: () => void; + onApply: (improvedText: string) => void; + originalText: string; + improvedText: string; + isLoading?: boolean; + hasError?: boolean; + errorMessage?: string; +} + +export const ImproveTextModal: React.FC = ({ + isOpen, + onClose, + onApply, + originalText, + improvedText, + isLoading = false, + hasError = false, + errorMessage, +}) => { + const [localImprovedText, setLocalImprovedText] = useState(improvedText); + + useEffect(() => { + if (isOpen) { + setLocalImprovedText(improvedText); + } + }, [isOpen, improvedText]); + + const handleApply = () => { + if (!localImprovedText.trim()) { + return; + } + onApply(localImprovedText); + onClose(); + }; + + useEffect(() => { + const handleEscape = (e: KeyboardEvent) => { + if (e.key === "Escape" && isOpen) { + onClose(); + } + }; + + if (isOpen) { + document.addEventListener("keydown", handleEscape); + } + + return () => document.removeEventListener("keydown", handleEscape); + }, [isOpen, onClose]); + + if (!isOpen) return null; + + return ( +
+
e.stopPropagation()} + > +
+

Улучшенный текст

+ + × + +
+
+ {isLoading ? ( +
+
+

Улучшаю текст через ИИ...

+
+ ) : hasError ? ( +
+ +

+ Не удалось улучшить текст +

+

+ {errorMessage || "Произошла ошибка при улучшении текста. Проверьте настройки AI или попробуйте еще раз."} +

+
+ ) : ( + <> +
+

+ Оригинальный текст: +

+
+ {originalText || "(пусто)"} +
+
+ +
+

+ Улучшенный текст: +

+