1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-08-09 08:42:50 +03:00

LLS: fix jumpy maximised map (#8387)

* add maxzoom to map fit bounds

Signed-off-by: Kerry Archibald <kerrya@element.io>

* take snapshot of bounds at center on dialog open

Signed-off-by: Kerry Archibald <kerrya@element.io>
This commit is contained in:
Kerry
2022-04-21 18:56:11 +02:00
committed by GitHub
parent 86419b1925
commit 399ac618c7
4 changed files with 46 additions and 6 deletions

View File

@@ -24,6 +24,7 @@ import {
RoomMember,
getBeaconInfoIdentifier,
} from 'matrix-js-sdk/src/matrix';
import maplibregl from 'maplibre-gl';
import BeaconViewDialog from '../../../../src/components/views/beacon/BeaconViewDialog';
import {
@@ -58,6 +59,8 @@ describe('<BeaconViewDialog />', () => {
getVisibleRooms: jest.fn().mockReturnValue([]),
});
const mockMap = new maplibregl.Map();
// make fresh rooms every time
// as we update room state
const setupRoom = (stateEvents: MatrixEvent[] = []): Room => {
@@ -88,6 +91,8 @@ describe('<BeaconViewDialog />', () => {
beforeEach(() => {
jest.spyOn(OwnBeaconStore.instance, 'getLiveBeaconIds').mockRestore();
jest.clearAllMocks();
});
it('renders a map with markers', () => {
@@ -151,6 +156,31 @@ describe('<BeaconViewDialog />', () => {
expect(component.find('BeaconMarker').length).toEqual(2);
});
it('does not update bounds or center on changing beacons', () => {
const room = setupRoom([defaultEvent]);
const beacon = room.currentState.beacons.get(getBeaconInfoIdentifier(defaultEvent));
beacon.addLocations([location1]);
const component = getComponent();
expect(component.find('BeaconMarker').length).toEqual(1);
const anotherBeaconEvent = makeBeaconInfoEvent(bobId,
roomId,
{ isLive: true },
'$bob-room1-1',
);
act(() => {
// emits RoomStateEvent.BeaconLiveness
room.currentState.setStateEvents([anotherBeaconEvent]);
});
component.setProps({});
// two markers now!
expect(mockMap.setCenter).toHaveBeenCalledTimes(1);
expect(mockMap.fitBounds).toHaveBeenCalledTimes(1);
});
it('renders a fallback when no live beacons remain', () => {
const onFinished = jest.fn();
const room = setupRoom([defaultEvent]);

View File

@@ -125,7 +125,7 @@ describe('<Map />', () => {
const bounds = { north: 51, south: 50, east: 42, west: 41 };
getComponent({ bounds });
expect(mockMap.fitBounds).toHaveBeenCalledWith(new maplibregl.LngLatBounds([bounds.west, bounds.south],
[bounds.east, bounds.north]), { padding: 100 });
[bounds.east, bounds.north]), { padding: 100, maxZoom: 15 });
});
it('handles invalid bounds', () => {