MSC3531 - Implementing message hiding pending moderation (#7518)

Signed-off-by: David Teller <davidt@element.io>
This commit is contained in:
David Teller 2022-01-17 16:04:37 +01:00 committed by GitHub
parent c612014936
commit 6b870ba1a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 345 additions and 22 deletions

View file

@ -250,7 +250,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
private scrollPanel = createRef<ScrollPanel>();
private readonly showTypingNotificationsWatcherRef: string;
private eventNodes: Record<string, HTMLElement>;
private eventTiles: Record<string, EventTile> = {};
// A map of <callId, CallEventGrouper>
private callEventGroupers = new Map<string, CallEventGrouper>();
@ -324,11 +324,18 @@ export default class MessagePanel extends React.Component<IProps, IState> {
/* get the DOM node representing the given event */
public getNodeForEventId(eventId: string): HTMLElement {
if (!this.eventNodes) {
if (!this.eventTiles) {
return undefined;
}
return this.eventNodes[eventId];
return this.eventTiles[eventId]?.ref?.current;
}
public getTileForEventId(eventId: string): EventTile {
if (!this.eventTiles) {
return undefined;
}
return this.eventTiles[eventId];
}
/* return true if the content is fully scrolled down right now; else false.
@ -429,7 +436,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
}
public scrollToEventIfNeeded(eventId: string): void {
const node = this.eventNodes[eventId];
const node = this.getNodeForEventId(eventId);
if (node) {
node.scrollIntoView({
block: "nearest",
@ -584,8 +591,6 @@ export default class MessagePanel extends React.Component<IProps, IState> {
}
}
private getEventTiles(): ReactNode[] {
this.eventNodes = {};
let i;
// first figure out which is the last event in the list which we're
@ -776,7 +781,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
<TileErrorBoundary key={mxEv.getTxnId() || eventId} mxEvent={mxEv}>
<EventTile
as="li"
ref={this.collectEventNode.bind(this, eventId)}
ref={this.collectEventTile.bind(this, eventId)}
alwaysShowTimestamps={this.props.alwaysShowTimestamps}
mxEvent={mxEv}
continuation={continuation}
@ -909,8 +914,8 @@ export default class MessagePanel extends React.Component<IProps, IState> {
return receiptsByEvent;
}
private collectEventNode = (eventId: string, node: EventTile): void => {
this.eventNodes[eventId] = node?.ref?.current;
private collectEventTile = (eventId: string, node: EventTile): void => {
this.eventTiles[eventId] = node;
};
// once dynamic content in the events load, make the scrollPanel check the