MSC3531 - Implementing message hiding pending moderation (#7518)
Signed-off-by: David Teller <davidt@element.io>
This commit is contained in:
parent
c612014936
commit
6b870ba1a9
17 changed files with 345 additions and 22 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue