mirror of
https://github.com/element-hq/element-web
synced 2024-11-24 02:05:45 +03:00
Use UnstableValue for all location constants (#7388)
This commit is contained in:
parent
fc58ce7ed2
commit
1c6a7646fa
3 changed files with 35 additions and 19 deletions
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import maplibregl from 'maplibre-gl';
|
import maplibregl from 'maplibre-gl';
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
import { LOCATION_EVENT_TYPE } from 'matrix-js-sdk/src/@types/location';
|
||||||
|
|
||||||
import SdkConfig from '../../../SdkConfig';
|
import SdkConfig from '../../../SdkConfig';
|
||||||
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
||||||
|
@ -41,17 +42,15 @@ export default class MLocationBody extends React.Component<IBodyProps, IState> {
|
||||||
// events - so folks can read their old chat history correctly.
|
// events - so folks can read their old chat history correctly.
|
||||||
// https://github.com/matrix-org/matrix-doc/issues/3516
|
// https://github.com/matrix-org/matrix-doc/issues/3516
|
||||||
const content = this.props.mxEvent.getContent();
|
const content = this.props.mxEvent.getContent();
|
||||||
const uri = content['org.matrix.msc3488.location'] ?
|
const loc = content[LOCATION_EVENT_TYPE.name];
|
||||||
content['org.matrix.msc3488.location'].uri :
|
const uri = loc ? loc.uri : content['geo_uri'];
|
||||||
content['geo_uri'];
|
|
||||||
|
|
||||||
this.coords = this.parseGeoUri(uri);
|
this.coords = this.parseGeoUri(uri);
|
||||||
this.state = {
|
this.state = {
|
||||||
error: undefined,
|
error: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.description =
|
this.description = loc?.description ?? content['body'];
|
||||||
content['org.matrix.msc3488.location']?.description ?? content['body'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseGeoUri = (uri: string): GeolocationCoordinates => {
|
private parseGeoUri = (uri: string): GeolocationCoordinates => {
|
||||||
|
|
|
@ -18,6 +18,7 @@ import React, { createRef } from 'react';
|
||||||
import { EventType, MsgType } from "matrix-js-sdk/src/@types/event";
|
import { EventType, MsgType } from "matrix-js-sdk/src/@types/event";
|
||||||
import { Relations } from 'matrix-js-sdk/src/models/relations';
|
import { Relations } from 'matrix-js-sdk/src/models/relations';
|
||||||
import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls";
|
import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls";
|
||||||
|
import { LOCATION_EVENT_TYPE } from 'matrix-js-sdk/src/@types/location';
|
||||||
|
|
||||||
import * as sdk from '../../../index';
|
import * as sdk from '../../../index';
|
||||||
import SettingsStore from "../../../settings/SettingsStore";
|
import SettingsStore from "../../../settings/SettingsStore";
|
||||||
|
@ -127,8 +128,10 @@ export default class MessageEvent extends React.Component<IProps> implements IMe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((type && type === "org.matrix.msc3488.location") ||
|
if (
|
||||||
(type && type === EventType.RoomMessage && msgtype && msgtype === MsgType.Location)) {
|
LOCATION_EVENT_TYPE.matches(type) ||
|
||||||
|
(type === EventType.RoomMessage && msgtype === MsgType.Location)
|
||||||
|
) {
|
||||||
// TODO: tidy this up once location sharing is out of labs
|
// TODO: tidy this up once location sharing is out of labs
|
||||||
if (SettingsStore.getValue("feature_location_share")) {
|
if (SettingsStore.getValue("feature_location_share")) {
|
||||||
BodyType = sdk.getComponent('messages.MLocationBody');
|
BodyType = sdk.getComponent('messages.MLocationBody');
|
||||||
|
|
|
@ -19,9 +19,9 @@ import { MatrixEvent, IEventRelation } from "matrix-js-sdk/src/models/event";
|
||||||
import { Room } from "matrix-js-sdk/src/models/room";
|
import { Room } from "matrix-js-sdk/src/models/room";
|
||||||
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
|
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
|
||||||
import { RelationType } from 'matrix-js-sdk/src/@types/event';
|
import { RelationType } from 'matrix-js-sdk/src/@types/event';
|
||||||
import { MsgType } from "matrix-js-sdk/src/@types/event";
|
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls";
|
import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls";
|
||||||
|
import { makeLocationContent } from "matrix-js-sdk/src/content-helpers";
|
||||||
|
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
import { MatrixClientPeg } from '../../../MatrixClientPeg';
|
import { MatrixClientPeg } from '../../../MatrixClientPeg';
|
||||||
|
@ -505,19 +505,33 @@ export default class MessageComposer extends React.Component<IProps, IState> {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
private shareLocation = (uri: string, ts: number, type: LocationShareType, description: string): boolean => {
|
private textForLocation = (
|
||||||
|
uri: string,
|
||||||
|
ts: number,
|
||||||
|
description: string | null,
|
||||||
|
): string => {
|
||||||
|
const date = new Date(ts).toISOString();
|
||||||
|
// TODO: translation, as soon as we've re-worded this better
|
||||||
|
if (description) {
|
||||||
|
return `${description} at ${uri} as of ${date}`;
|
||||||
|
} else {
|
||||||
|
return `Location at ${uri} as of ${date}`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private shareLocation = (
|
||||||
|
uri: string,
|
||||||
|
ts: number,
|
||||||
|
_type: LocationShareType,
|
||||||
|
description: string | null,
|
||||||
|
): boolean => {
|
||||||
if (!uri) return false;
|
if (!uri) return false;
|
||||||
try {
|
try {
|
||||||
const text = `${description ? description : 'Location'} at ${uri} as of ${new Date(ts).toISOString()}`;
|
const text = this.textForLocation(uri, ts, description);
|
||||||
// noinspection ES6MissingAwait - we don't care if it fails, it'll get queued.
|
MatrixClientPeg.get().sendMessage(
|
||||||
MatrixClientPeg.get().sendMessage(this.props.room.roomId, {
|
this.props.room.roomId,
|
||||||
"body": text,
|
makeLocationContent(text, uri, ts, description),
|
||||||
"msgtype": MsgType.Location,
|
);
|
||||||
"geo_uri": uri,
|
|
||||||
"org.matrix.msc3488.location": { uri, description },
|
|
||||||
"org.matrix.msc3488.ts": ts,
|
|
||||||
// TODO: MSC1767 fallbacks for text & thumbnail
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error("Error sending location:", e);
|
logger.error("Error sending location:", e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue