diff --git a/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.jsx b/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.jsx index 8ed027d1..003557e6 100644 --- a/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.jsx +++ b/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.jsx @@ -1,9 +1,42 @@ +import { useState } from "react"; import { useTranslation } from "react-i18next"; import clsx from "clsx"; import styles from "./MessageContainer.module.scss"; - +import { MessageSubMenuContainer } from "./message_sub_menu_container/MessageSubMenuContainer"; +import { useMessage } from "@logics_common"; export const MessageContainer = ({ messages, status, category, created_at }) => { const { t } = useTranslation(); + const { + sendMessage, + updateMessageInputValue, + } = useMessage(); + + const [is_hovered, setIsHovered] = useState(false); + const [is_locked, setIsLocked] = useState(false); + + const resendFunction = () => { + sendMessage(messages.original); + }; + const editFunction = () => { + updateMessageInputValue(messages.original); + }; + + + const handleMouseEnter = () => { + if (!is_locked) { + setIsHovered(true); + } + }; + + const handleMouseLeave = () => { + setIsHovered(false); + setIsLocked(false); + }; + + const lockHoverState = () => { + setIsHovered(false); + setIsLocked(true); + }; const is_translated_exist = messages.translated.length >= 1; const is_pending = status === "pending"; @@ -16,18 +49,31 @@ export const MessageContainer = ({ messages, status, category, created_at }) => }); return ( -
{created_at}
-{category_text}
- {is_sent_message && is_pending && } -{messages.original}
- } +{created_at}
+{category_text}
+ {is_sent_message && is_pending && } +{messages.original}
+ } +Press and hold to send
; +}; diff --git a/src-ui/app/main_page/main_section/message_container/log_box/message_container/message_sub_menu_container/MessageSubMenuContainer.module.scss b/src-ui/app/main_page/main_section/message_container/log_box/message_container/message_sub_menu_container/MessageSubMenuContainer.module.scss new file mode 100644 index 00000000..30b436b1 --- /dev/null +++ b/src-ui/app/main_page/main_section/message_container/log_box/message_container/message_sub_menu_container/MessageSubMenuContainer.module.scss @@ -0,0 +1,45 @@ +// ******************* ******************* +// ******************* Express in "em" not "rem" ******************* +// ******************* ******************* +.container { +} +.resend_button { + background-color: var(--dark_825_color); + position: relative; + height: 100%; + width: 3.8em; +} + +.send_message_svg { + position: absolute; + top: 58%; + left: 50%; + transform: translate(-50%, -50%); + width: 2.2em; + color: var(--dark_400_color); +} +.refresh_svg { + position: absolute; + top: 36%; + left: 42%; + transform: translate(-50%, -50%); + width: 1.8em; + color: var(--sent_400_color); + filter: drop-shadow(0.2em 0.2em 0 var(--dark_825_color)); +} + +.tooltip_title { + font-size: 1.2rem; + color: var(--dark_basic_text_color); +} + +.hold_progress_bar { + position: absolute; + top: 10%; + left: 50%; + transform: translate(-50%, -50%); + width: 0%; + height: 0.4em; + background-color: var(--sent_400_color); + transition: none; +} \ No newline at end of file diff --git a/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx b/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx index 6875b0a3..80c5cc83 100644 --- a/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx +++ b/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx @@ -7,10 +7,14 @@ import { store } from "@store"; import { scrollToBottom } from "@utils"; export const MessageInputBox = () => { - const [input_value, setInputValue] = useState(""); const [message_history, setMessageHistory] = useState([]); const [history_index, setHistoryIndex] = useState(-1); - const { sendMessage, currentMessageLogs } = useMessage(); + const { + sendMessage, + currentMessageLogs, + currentMessageInputValue, + updateMessageInputValue, + } = useMessage(); const { currentEnableAutoClearMessageInputBox } = useEnableAutoClearMessageInputBox(); const { currentSendMessageButtonType } = useSendMessageButtonType(); @@ -27,11 +31,11 @@ export const MessageInputBox = () => { const onSubmitFunction = (e) => { e.preventDefault(); - if (!input_value.trim()) return setInputValue(""); + if (!currentMessageInputValue.data.trim()) return updateMessageInputValue(""); - sendMessage(input_value); + sendMessage(currentMessageInputValue.data); - if (currentEnableAutoClearMessageInputBox.data) setInputValue(""); + if (currentEnableAutoClearMessageInputBox.data) updateMessageInputValue(""); setTimeout(() => { scrollToBottom(store.log_box_ref); @@ -41,7 +45,7 @@ export const MessageInputBox = () => { }; const onChangeFunction = (e) => { - setInputValue(e.currentTarget.value); + updateMessageInputValue(e.currentTarget.value); }; const onKeyDownFunction = (e) => { @@ -57,7 +61,7 @@ export const MessageInputBox = () => { if (history_index + 1 < message_history.length) { const new_index = history_index + 1; setHistoryIndex(new_index); - setInputValue(message_history[message_history.length - 1 - new_index]); + updateMessageInputValue(message_history[message_history.length - 1 - new_index]); } } @@ -83,7 +87,7 @@ export const MessageInputBox = () => { className={styles.message_box_input_area} onChange={onChangeFunction} placeholder="Input Textfield" - value={input_value} + value={currentMessageInputValue.data} onKeyDown={onKeyDownFunction} />