mirror of
https://github.com/element-hq/element-web
synced 2024-11-23 17:56:01 +03:00
Location sharing - extract isSelfLocation util (#8279)
* extract isSelfLocation into utils Signed-off-by: Kerry Archibald <kerrya@element.io> * replace use of isSelfLocation Signed-off-by: Kerry Archibald <kerrya@element.io>
This commit is contained in:
parent
aecd71ad15
commit
b760ec9392
5 changed files with 99 additions and 68 deletions
|
@ -17,11 +17,6 @@ limitations under the License.
|
|||
import React from 'react';
|
||||
import maplibregl from 'maplibre-gl';
|
||||
import { MatrixEvent } from 'matrix-js-sdk/src/models/event';
|
||||
import {
|
||||
M_ASSET,
|
||||
LocationAssetType,
|
||||
ILocationContent,
|
||||
} from 'matrix-js-sdk/src/@types/location';
|
||||
import { ClientEvent, IClientWellKnown } from 'matrix-js-sdk/src/client';
|
||||
|
||||
import { IBodyProps } from "./IBodyProps";
|
||||
|
@ -33,6 +28,7 @@ import {
|
|||
createMapWithCoords,
|
||||
getLocationShareErrorMessage,
|
||||
LocationShareError,
|
||||
isSelfLocation,
|
||||
} from '../../../utils/location';
|
||||
import LocationViewDialog from '../location/LocationViewDialog';
|
||||
import TooltipTarget from '../elements/TooltipTarget';
|
||||
|
@ -132,12 +128,6 @@ export default class MLocationBody extends React.Component<IBodyProps, IState> {
|
|||
}
|
||||
}
|
||||
|
||||
export function isSelfLocation(locationContent: ILocationContent): boolean {
|
||||
const asset = M_ASSET.findIn(locationContent) as { type: string };
|
||||
const assetType = asset?.type ?? LocationAssetType.Self;
|
||||
return assetType == LocationAssetType.Self;
|
||||
}
|
||||
|
||||
export const LocationBodyFallbackContent: React.FC<{ event: MatrixEvent, error: Error }> = ({ error, event }) => {
|
||||
const errorType = error?.message as LocationShareError;
|
||||
const message = `${_t('Unable to load map')}: ${getLocationShareErrorMessage(errorType)}`;
|
||||
|
|
|
@ -15,6 +15,7 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
export * from './findMapStyleUrl';
|
||||
export * from './isSelfLocation';
|
||||
export * from './locationEventGeoUri';
|
||||
export * from './LocationShareErrors';
|
||||
export * from './map';
|
||||
|
|
23
src/utils/location/isSelfLocation.ts
Normal file
23
src/utils/location/isSelfLocation.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { ILocationContent, LocationAssetType, M_ASSET } from "matrix-js-sdk/src/@types/location";
|
||||
|
||||
export const isSelfLocation = (locationContent: ILocationContent): boolean => {
|
||||
const asset = M_ASSET.findIn(locationContent) as { type: string };
|
||||
const assetType = asset?.type ?? LocationAssetType.Self;
|
||||
return assetType == LocationAssetType.Self;
|
||||
};
|
|
@ -17,21 +17,11 @@ limitations under the License.
|
|||
import React from 'react';
|
||||
import { mount } from "enzyme";
|
||||
import { mocked } from 'jest-mock';
|
||||
import { makeLocationContent } from "matrix-js-sdk/src/content-helpers";
|
||||
import {
|
||||
M_ASSET,
|
||||
LocationAssetType,
|
||||
ILocationContent,
|
||||
M_LOCATION,
|
||||
M_TIMESTAMP,
|
||||
} from "matrix-js-sdk/src/@types/location";
|
||||
import { TEXT_NODE_TYPE } from "matrix-js-sdk/src/@types/extensible_events";
|
||||
import { LocationAssetType } from "matrix-js-sdk/src/@types/location";
|
||||
import maplibregl from 'maplibre-gl';
|
||||
import { logger } from 'matrix-js-sdk/src/logger';
|
||||
|
||||
import MLocationBody, {
|
||||
isSelfLocation,
|
||||
} from "../../../../src/components/views/messages/MLocationBody";
|
||||
import MLocationBody from "../../../../src/components/views/messages/MLocationBody";
|
||||
import MatrixClientContext from "../../../../src/contexts/MatrixClientContext";
|
||||
import { RoomPermalinkCreator } from "../../../../src/utils/permalinks/Permalinks";
|
||||
import { MediaEventHelper } from "../../../../src/utils/MediaEventHelper";
|
||||
|
@ -44,51 +34,6 @@ jest.mock("../../../../src/utils/WellKnownUtils", () => ({
|
|||
}));
|
||||
|
||||
describe("MLocationBody", () => {
|
||||
describe("isSelfLocation", () => {
|
||||
it("Returns true for a full m.asset event", () => {
|
||||
const content = makeLocationContent("", '0');
|
||||
expect(isSelfLocation(content)).toBe(true);
|
||||
});
|
||||
|
||||
it("Returns true for a missing m.asset", () => {
|
||||
const content = {
|
||||
body: "",
|
||||
msgtype: "m.location",
|
||||
geo_uri: "",
|
||||
[M_LOCATION.name]: { uri: "" },
|
||||
[TEXT_NODE_TYPE.name]: "",
|
||||
[M_TIMESTAMP.name]: 0,
|
||||
// Note: no m.asset!
|
||||
};
|
||||
expect(isSelfLocation(content as ILocationContent)).toBe(true);
|
||||
});
|
||||
|
||||
it("Returns true for a missing m.asset type", () => {
|
||||
const content = {
|
||||
body: "",
|
||||
msgtype: "m.location",
|
||||
geo_uri: "",
|
||||
[M_LOCATION.name]: { uri: "" },
|
||||
[TEXT_NODE_TYPE.name]: "",
|
||||
[M_TIMESTAMP.name]: 0,
|
||||
[M_ASSET.name]: {
|
||||
// Note: no type!
|
||||
},
|
||||
};
|
||||
expect(isSelfLocation(content as ILocationContent)).toBe(true);
|
||||
});
|
||||
|
||||
it("Returns false for an unknown asset type", () => {
|
||||
const content = makeLocationContent(
|
||||
undefined, /* text */
|
||||
"geo:foo",
|
||||
0,
|
||||
undefined, /* description */
|
||||
"org.example.unknown" as unknown as LocationAssetType);
|
||||
expect(isSelfLocation(content)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('<MLocationBody>', () => {
|
||||
describe('with error', () => {
|
||||
const mockClient = {
|
||||
|
|
72
test/utils/location/isSelfLocation-test.ts
Normal file
72
test/utils/location/isSelfLocation-test.ts
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { TEXT_NODE_TYPE } from "matrix-js-sdk/src/@types/extensible_events";
|
||||
import {
|
||||
ILocationContent,
|
||||
LocationAssetType,
|
||||
M_ASSET,
|
||||
M_LOCATION,
|
||||
M_TIMESTAMP,
|
||||
} from "matrix-js-sdk/src/@types/location";
|
||||
import { makeLocationContent } from "matrix-js-sdk/src/content-helpers";
|
||||
|
||||
import { isSelfLocation } from "../../../src/utils/location";
|
||||
|
||||
describe("isSelfLocation", () => {
|
||||
it("Returns true for a full m.asset event", () => {
|
||||
const content = makeLocationContent("", '0');
|
||||
expect(isSelfLocation(content)).toBe(true);
|
||||
});
|
||||
|
||||
it("Returns true for a missing m.asset", () => {
|
||||
const content = {
|
||||
body: "",
|
||||
msgtype: "m.location",
|
||||
geo_uri: "",
|
||||
[M_LOCATION.name]: { uri: "" },
|
||||
[TEXT_NODE_TYPE.name]: "",
|
||||
[M_TIMESTAMP.name]: 0,
|
||||
// Note: no m.asset!
|
||||
};
|
||||
expect(isSelfLocation(content as ILocationContent)).toBe(true);
|
||||
});
|
||||
|
||||
it("Returns true for a missing m.asset type", () => {
|
||||
const content = {
|
||||
body: "",
|
||||
msgtype: "m.location",
|
||||
geo_uri: "",
|
||||
[M_LOCATION.name]: { uri: "" },
|
||||
[TEXT_NODE_TYPE.name]: "",
|
||||
[M_TIMESTAMP.name]: 0,
|
||||
[M_ASSET.name]: {
|
||||
// Note: no type!
|
||||
},
|
||||
};
|
||||
expect(isSelfLocation(content as ILocationContent)).toBe(true);
|
||||
});
|
||||
|
||||
it("Returns false for an unknown asset type", () => {
|
||||
const content = makeLocationContent(
|
||||
undefined, /* text */
|
||||
"geo:foo",
|
||||
0,
|
||||
undefined, /* description */
|
||||
"org.example.unknown" as unknown as LocationAssetType);
|
||||
expect(isSelfLocation(content)).toBe(false);
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue