mirror of https://github.com/vector-im/riot-web
Fix: Ensure links to events scroll the correct events into view (#8250)
Co-authored-by: Janne Mareike Koschinski <jannemk@element.io>pull/21833/head
parent
16dc05e2b0
commit
e54eb81626
|
@ -1175,12 +1175,33 @@ class TimelinePanel extends React.Component<IProps, IState> {
|
|||
"messagePanel didn't load");
|
||||
return;
|
||||
}
|
||||
|
||||
const doScroll = () => {
|
||||
if (eventId) {
|
||||
this.messagePanel.current.scrollToEvent(eventId, pixelOffset,
|
||||
offsetBase);
|
||||
debuglog("TimelinePanel scrolling to eventId " + eventId);
|
||||
this.messagePanel.current.scrollToEvent(
|
||||
eventId,
|
||||
pixelOffset,
|
||||
offsetBase,
|
||||
);
|
||||
} else {
|
||||
debuglog("TimelinePanel scrolling to bottom");
|
||||
this.messagePanel.current.scrollToBottom();
|
||||
}
|
||||
};
|
||||
|
||||
// Ensure the correct scroll position pre render, if the messages have already been loaded to DOM, to
|
||||
// avoid it jumping around
|
||||
doScroll();
|
||||
|
||||
// Ensure the correct scroll position post render for correct behaviour.
|
||||
//
|
||||
// requestAnimationFrame runs our code immediately after the DOM update but before the next repaint.
|
||||
//
|
||||
// If the messages have just been loaded for the first time, this ensures we'll repeat setting the
|
||||
// correct scroll position after React has re-rendered the TimelinePanel and MessagePanel and updated
|
||||
// the DOM.
|
||||
window.requestAnimationFrame(doScroll);
|
||||
|
||||
if (this.props.sendReadReceiptOnLoad) {
|
||||
this.sendReadReceipt();
|
||||
|
|
Loading…
Reference in New Issue