From 021948c919ffeec364681c91ff1bc70ea7784d76 Mon Sep 17 00:00:00 2001 From: Eric Liu <45801973+waresnew@users.noreply.github.com> Date: Thu, 21 Mar 2024 19:39:26 -0400 Subject: [PATCH] WhoReacted: fix scroll jumping when rendering users (#2271) Co-authored-by: V --- src/plugins/whoReacted/index.tsx | 24 ++++++++++++++++++++---- src/utils/constants.ts | 4 ++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/plugins/whoReacted/index.tsx b/src/plugins/whoReacted/index.tsx index 6d994be1..b6036690 100644 --- a/src/plugins/whoReacted/index.tsx +++ b/src/plugins/whoReacted/index.tsx @@ -29,7 +29,7 @@ import { Message, ReactionEmoji, User } from "discord-types/general"; const UserSummaryItem = findComponentByCodeLazy("defaultRenderUser", "showDefaultAvatarsForNullUsers"); const AvatarStyles = findByPropsLazy("moreUsers", "emptyUser", "avatarContainer", "clickableAvatar"); - +let Scroll: any = null; const queue = new Queue(); let reactions: Record; @@ -91,7 +91,7 @@ function handleClickAvatar(event: React.MouseEvent) { export default definePlugin({ name: "WhoReacted", description: "Renders the avatars of users who reacted to a message", - authors: [Devs.Ven, Devs.KannaDev], + authors: [Devs.Ven, Devs.KannaDev, Devs.newwares], patches: [{ find: ",reactionRef:", @@ -105,7 +105,19 @@ export default definePlugin({ match: /(?<=CONNECTION_OPEN:function\(\){)(\i)={}/, replace: "$&;$self.reactions=$1" } - }], + }, + { + + find: "cleanAutomaticAnchor(){", + replacement: { + match: /this\.automaticAnchor=null,this\.messageFetchAnchor=null,/, + replace: "$&$self.setScrollObj(this)," + } + } + ], + setScrollObj(scroll: any) { + Scroll = scroll; + }, renderUsers(props: RootObject) { return props.message.reactions.length > 10 ? null : ( @@ -114,9 +126,13 @@ export default definePlugin({ ); }, - _renderUsers({ message, emoji, type }: RootObject) { const forceUpdate = useForceUpdater(); + React.useLayoutEffect(() => { // bc need to prevent autoscrolling + if (Scroll?.scrollCounter > 0) { + Scroll.setAutomaticAnchor(null); + } + }); React.useEffect(() => { const cb = (e: any) => { if (e.messageId === message.id) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index f609fa64..335ed5cc 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -413,6 +413,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({ Elvyra: { name: "Elvyra", id: 708275751816003615n, + }, + newwares: { + name: "newwares", + id: 421405303951851520n } } satisfies Record);