mirror of
https://github.com/element-hq/element-web
synced 2024-11-24 10:15:43 +03:00
Force refresh threads timeline
Fixes vector-im/element-web#18947 In the absence of a proper pending events / remote echo setup it seems fairly difficult to get the timeline to update Adding a temporary helper to force refresh the timeline and not swallow local events when sending a message from the thread sidebar
This commit is contained in:
parent
8cf891f9a4
commit
672dab1998
2 changed files with 14 additions and 3 deletions
|
@ -50,6 +50,7 @@ interface IState {
|
|||
@replaceableComponent("structures.ThreadView")
|
||||
export default class ThreadView extends React.Component<IProps, IState> {
|
||||
private dispatcherRef: string;
|
||||
private timelinePanelRef: React.RefObject<TimelinePanel> = React.createRef();
|
||||
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
|
@ -110,10 +111,13 @@ export default class ThreadView extends React.Component<IProps, IState> {
|
|||
|
||||
private updateThread = (thread?: Thread) => {
|
||||
if (thread) {
|
||||
this.setState({ thread });
|
||||
} else {
|
||||
this.forceUpdate();
|
||||
this.setState({
|
||||
thread,
|
||||
replyToEvent: thread.replyToEvent,
|
||||
});
|
||||
}
|
||||
|
||||
this.timelinePanelRef.current?.refreshTimeline();
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
|
@ -126,6 +130,7 @@ export default class ThreadView extends React.Component<IProps, IState> {
|
|||
>
|
||||
{ this.state.thread && (
|
||||
<TimelinePanel
|
||||
ref={this.timelinePanelRef}
|
||||
manageReadReceipts={false}
|
||||
manageReadMarkers={false}
|
||||
timelineSet={this.state?.thread?.timelineSet}
|
||||
|
|
|
@ -1179,6 +1179,12 @@ class TimelinePanel extends React.Component<IProps, IState> {
|
|||
this.setState(this.getEvents());
|
||||
}
|
||||
|
||||
// Force refresh the timeline before threads support pending events
|
||||
public refreshTimeline(): void {
|
||||
this.loadTimeline();
|
||||
this.reloadEvents();
|
||||
}
|
||||
|
||||
// get the list of events from the timeline window and the pending event list
|
||||
private getEvents(): Pick<IState, "events" | "liveEvents" | "firstVisibleEventIndex"> {
|
||||
const events: MatrixEvent[] = this.timelineWindow.getEvents();
|
||||
|
|
Loading…
Reference in a new issue