Ensure maps show up in replies and threads, by creating unique IDs (#7568)

pull/21833/head
Andy Balaam 2022-01-18 13:33:53 +00:00 committed by GitHub
parent e1cdbe1e54
commit 47cbef2af2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 12 deletions

View File

@ -38,11 +38,18 @@ interface IState {
@replaceableComponent("views.messages.MLocationBody")
export default class MLocationBody extends React.Component<IBodyProps, IState> {
private coords: GeolocationCoordinates;
private bodyId: string;
private markerId: string;
constructor(props: IBodyProps) {
super(props);
const randomString = Math.random().toString(16).slice(2, 10);
const idSuffix = `${props.mxEvent.getId()}_${randomString}`;
this.bodyId = `mx_MLocationBody_${idSuffix}`;
this.markerId = `mx_MLocationBody_marker_${idSuffix}`;
this.coords = parseGeoUri(locationEventGeoUri(this.props.mxEvent));
this.state = {
error: undefined,
};
@ -56,20 +63,12 @@ export default class MLocationBody extends React.Component<IBodyProps, IState> {
createMap(
this.coords,
false,
this.getBodyId(),
this.getMarkerId(),
this.bodyId,
this.markerId,
(e: Error) => this.setState({ error: e }),
);
}
private getBodyId = () => {
return `mx_MLocationBody_${this.props.mxEvent.getId()}`;
};
private getMarkerId = () => {
return `mx_MLocationBody_marker_${this.props.mxEvent.getId()}`;
};
private onClick = (
event: React.MouseEvent<HTMLDivElement, MouseEvent>,
) => {
@ -93,8 +92,8 @@ export default class MLocationBody extends React.Component<IBodyProps, IState> {
render(): React.ReactElement<HTMLDivElement> {
return <LocationBodyContent
mxEvent={this.props.mxEvent}
bodyId={this.getBodyId()}
markerId={this.getMarkerId()}
bodyId={this.bodyId}
markerId={this.markerId}
error={this.state.error}
tooltip={_t("Expand map")}
onClick={this.onClick}