diff --git a/external/lang b/external/lang index 8755aa48..1ed190cd 160000 --- a/external/lang +++ b/external/lang @@ -1 +1 @@ -Subproject commit 8755aa48b2173f1f509e8fe6edaccc5ac32601f5 +Subproject commit 1ed190cd12a9a99b3e57a626118a65c1424cb194 diff --git a/src/lib/renderer/Singleton.ts b/src/lib/renderer/Singleton.ts index 7f51fe56..bf83bd2e 100644 --- a/src/lib/renderer/Singleton.ts +++ b/src/lib/renderer/Singleton.ts @@ -23,6 +23,7 @@ export class ChannelRenderer { stale = false; fetching = false; scrollPosition = 0; + scrollAnchored = false; constructor(channel: Channel) { this.channel = channel; @@ -31,6 +32,7 @@ export class ChannelRenderer { channel: false, currentRenderer: false, scrollPosition: false, + scrollAnchored: false, }); this.receive = this.receive.bind(this); diff --git a/src/pages/channels/messaging/MessageArea.tsx b/src/pages/channels/messaging/MessageArea.tsx index 3577c967..acf2268b 100644 --- a/src/pages/channels/messaging/MessageArea.tsx +++ b/src/pages/channels/messaging/MessageArea.tsx @@ -173,7 +173,16 @@ export const MessageArea = observer(({ channel }: Props) => { if (message) return; if (renderer.state === "RENDER") { runInAction(() => (renderer.fetching = true)); - setScrollState({ type: "ScrollTop", y: renderer.scrollPosition }); + + console.log(renderer.scrollAnchored); + if (renderer.scrollAnchored) { + setScrollState({ type: "ScrollToBottom" }); + } else { + setScrollState({ + type: "ScrollTop", + y: renderer.scrollPosition, + }); + } } else { renderer.init(); } @@ -254,6 +263,12 @@ export const MessageArea = observer(({ channel }: Props) => { if (atBottom(100)) { renderer.loadBottom(current!); } + + if (atBottom()) { + renderer.scrollAnchored = true; + } else { + renderer.scrollAnchored = false; + } } current.addEventListener("scroll", onScroll);