mirror of
https://github.com/revoltchat/revite.git
synced 2024-12-26 23:42:11 -05:00
Moved reply mention disable into internal event handler
This commit is contained in:
parent
29ed48fa70
commit
5ab1773f01
2 changed files with 27 additions and 39 deletions
|
@ -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";
|
||||
|
@ -80,49 +81,36 @@ const Base = styled.div`
|
|||
// ! FIXME: Move to global config
|
||||
const MAX_REPLIES = 4;
|
||||
export default observer(({ channel, replies, setReplies }: Props) => {
|
||||
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]);
|
||||
|
||||
const client = useClient();
|
||||
|
||||
useEffect(() => {
|
||||
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;
|
||||
|
||||
const ids = replies.map((x) => x.id);
|
||||
const messages = renderer.messages.filter((x) => ids.includes(x._id));
|
||||
|
||||
useEffect(() => {
|
||||
let mentionsChanged = false;
|
||||
const modified = replies.map((reply) => {
|
||||
const message = messages.find((x) => reply.id === x._id);
|
||||
if (message?.author_id === client.user!._id && reply.mention) {
|
||||
mentionsChanged = true;
|
||||
return {
|
||||
...reply,
|
||||
mention: false,
|
||||
};
|
||||
}
|
||||
|
||||
return reply;
|
||||
});
|
||||
if (mentionsChanged) {
|
||||
setReplies(modified);
|
||||
}
|
||||
}, [replies, setReplies, client.user, messages]);
|
||||
|
||||
return (
|
||||
<div>
|
||||
{replies.map((reply, index) => {
|
||||
|
|
|
@ -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 }
|
||||
|
@ -246,7 +246,7 @@ function ContextMenus(props: Props) {
|
|||
|
||||
case "reply_message":
|
||||
{
|
||||
internalEmit("ReplyBar", "add", data.id);
|
||||
internalEmit("ReplyBar", "add", data.target);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -695,7 +695,7 @@ function ContextMenus(props: Props) {
|
|||
if (message && !queued) {
|
||||
generateAction({
|
||||
action: "reply_message",
|
||||
id: message._id,
|
||||
target: message,
|
||||
});
|
||||
|
||||
if (
|
||||
|
|
Loading…
Reference in a new issue