diff --git a/src/components/common/messaging/bars/ReplyBar.tsx b/src/components/common/messaging/bars/ReplyBar.tsx index a327f161..1b83430d 100644 --- a/src/components/common/messaging/bars/ReplyBar.tsx +++ b/src/components/common/messaging/bars/ReplyBar.tsx @@ -3,6 +3,7 @@ import { File, XCircle } from "@styled-icons/boxicons-solid"; import { observer } from "mobx-react-lite"; import { SYSTEM_USER_ID } from "revolt.js"; import { Channel } from "revolt.js/dist/maps/Channels"; +import { Message } from "revolt.js/dist/maps/Messages"; import styled from "styled-components"; import { Text } from "preact-i18n"; @@ -14,6 +15,8 @@ import { getRenderer } from "../../../../lib/renderer/Singleton"; import { dispatch, getState } from "../../../../redux"; import { Reply } from "../../../../redux/reducers/queue"; +import { useClient } from "../../../../context/revoltjs/RevoltClient"; + import IconButton from "../../../ui/IconButton"; import Markdown from "../../../markdown/Markdown"; @@ -78,22 +81,29 @@ const Base = styled.div` // ! FIXME: Move to global config const MAX_REPLIES = 4; export default observer(({ channel, replies, setReplies }: Props) => { + const client = useClient(); + useEffect(() => { - return internalSubscribe( - "ReplyBar", - "add", - (id) => - replies.length < MAX_REPLIES && - !replies.find((x) => x.id === id) && - setReplies([ - ...replies, - { - id: id as string, - mention: getState().sectionToggle.mention ?? false, - }, - ]), - ); - }, [replies, setReplies]); + return internalSubscribe("ReplyBar", "add", (_message) => { + const message = _message as Message; + if ( + replies.length >= MAX_REPLIES || + replies.find((x) => x.id === message._id) + ) + return; + + setReplies([ + ...replies, + { + id: message._id, + mention: + message.author_id === client.user!._id + ? false + : getState().sectionToggle.mention ?? false, + }, + ]); + }); + }, [replies, setReplies, client.user]); const renderer = getRenderer(channel); if (renderer.state !== "RENDER") return null; @@ -153,34 +163,36 @@ export default observer(({ channel, replies, setReplies }: Props) => { - { - let state = false; - setReplies( - replies.map((_, i) => { - if (i === index) { - state = !_.mention; - return { - ..._, - mention: !_.mention, - }; - } + {message.author_id !== client.user!._id && ( + { + let state = false; + setReplies( + replies.map((_, i) => { + if (i === index) { + state = !_.mention; + return { + ..._, + mention: !_.mention, + }; + } - return _; - }), - ); + return _; + }), + ); - dispatch({ - type: "SECTION_TOGGLE_SET", - id: "mention", - state, - }); - }}> - - {" "} - {reply.mention ? "ON" : "OFF"} - - + dispatch({ + type: "SECTION_TOGGLE_SET", + id: "mention", + state, + }); + }}> + + {" "} + {reply.mention ? "ON" : "OFF"} + + + )} setReplies( diff --git a/src/lib/ContextMenus.tsx b/src/lib/ContextMenus.tsx index 70e0a6a7..610cd6cd 100644 --- a/src/lib/ContextMenus.tsx +++ b/src/lib/ContextMenus.tsx @@ -79,7 +79,7 @@ type Action = | { action: "retry_message"; message: QueuedMessage } | { action: "cancel_message"; message: QueuedMessage } | { action: "mention"; user: string } - | { action: "reply_message"; id: string } + | { action: "reply_message"; target: Message } | { action: "quote_message"; content: string } | { action: "edit_message"; id: string } | { action: "delete_message"; target: Message } @@ -247,7 +247,7 @@ function ContextMenus(props: Props) { case "reply_message": { - internalEmit("ReplyBar", "add", data.id); + internalEmit("ReplyBar", "add", data.target); } break; @@ -702,7 +702,7 @@ function ContextMenus(props: Props) { if (message && !queued) { generateAction({ action: "reply_message", - id: message._id, + target: message, }); if (