WhoReacted: fix scroll jumping when rendering users (#2271)
Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
		
							parent
							
								
									3e332a6062
								
							
						
					
					
						commit
						021948c919
					
				
					 2 changed files with 24 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -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<string, ReactionCacheEntry>;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +91,7 @@ function handleClickAvatar(event: React.MouseEvent<HTMLElement, 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({
 | 
			
		|||
            </ErrorBoundary>
 | 
			
		||||
        );
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -413,6 +413,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({
 | 
			
		|||
    Elvyra: {
 | 
			
		||||
        name: "Elvyra",
 | 
			
		||||
        id: 708275751816003615n,
 | 
			
		||||
    },
 | 
			
		||||
    newwares: {
 | 
			
		||||
        name: "newwares",
 | 
			
		||||
        id: 421405303951851520n
 | 
			
		||||
    }
 | 
			
		||||
} satisfies Record<string, Dev>);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue