mirror of
https://github.com/DOI-DO/j40-cejst-2.git
synced 2025-08-03 19:44:18 -07:00
Add Zoom/Lat/Lng to the URL (#293)
* mandatory eslint fix * Addresses #286 - Adding lat/lng to the URL * setting zoom on map load * adding integration tests for zoom
This commit is contained in:
parent
11d13e034e
commit
27d9472326
4 changed files with 54 additions and 27 deletions
15
client/cypress/e2e/latlngurl.spec.js
Normal file
15
client/cypress/e2e/latlngurl.spec.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
// / <reference types="Cypress" />
|
||||||
|
|
||||||
|
describe('LatLng Test', () => {
|
||||||
|
it('Checks that as the map zooms the lat/lng coordinates in the URL update', () => {
|
||||||
|
cy.visit('http://localhost:8000/en/cejst?flags=mb');
|
||||||
|
cy.url().should('include', '#3');
|
||||||
|
cy.get('.mapboxgl-ctrl-zoom-in > .mapboxgl-ctrl-icon').click();
|
||||||
|
cy.url().should('include', '#4');
|
||||||
|
cy.getMap().then((map) => {
|
||||||
|
cy.panTo(map, [-77.9, 35.04]);
|
||||||
|
cy.url().should('include', '#4/35.04/-77.9');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -1,27 +1,23 @@
|
||||||
// ***********************************************
|
/* MAP */
|
||||||
// This example commands.js shows you how to
|
|
||||||
// create various custom commands and overwrite
|
// For some interactions, we need access to the underlying map
|
||||||
// existing commands.
|
// Below adapted from https://github.com/codeforcologne/edelgard-map
|
||||||
//
|
Cypress.Commands.add('getMap', () => {
|
||||||
// For more comprehensive examples of custom
|
return cy.window().its('mapboxGlMap');
|
||||||
// commands please read more here:
|
});
|
||||||
// https://on.cypress.io/custom-commands
|
|
||||||
// ***********************************************
|
Cypress.Commands.add('waitForMove', (map) => {
|
||||||
//
|
return new Cypress.Promise((resolve) => {
|
||||||
//
|
map.on('moveend', resolve);
|
||||||
// -- This is a parent command --
|
});
|
||||||
// Cypress.Commands.add('login', (email, password) => { ... })
|
});
|
||||||
//
|
|
||||||
//
|
Cypress.Commands.add('panTo', (map, lngLat) => {
|
||||||
// -- This is a child command --
|
map.panTo(lngLat);
|
||||||
// Cypress.Commands.add('drag', { prevSubject: 'element'},
|
cy.waitForMove(map);
|
||||||
// (subject, options) => { ... })
|
});
|
||||||
//
|
|
||||||
//
|
Cypress.Commands.add('getMapCanvas', () => {
|
||||||
// -- This is a dual command --
|
return cy.get('.mapboxgl-canvas');
|
||||||
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'},
|
});
|
||||||
// (subject, options) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This will overwrite an existing command --
|
|
||||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
|
||||||
|
|
|
@ -14,6 +14,13 @@ import ReactDOM from 'react-dom';
|
||||||
import 'mapbox-gl/dist/mapbox-gl.css';
|
import 'mapbox-gl/dist/mapbox-gl.css';
|
||||||
import * as styles from './mapboxMap.module.scss';
|
import * as styles from './mapboxMap.module.scss';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
Cypress?: object;
|
||||||
|
mapboxGlMap: Map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type ClickEvent = mapboxgl.MapMouseEvent & mapboxgl.EventData;
|
type ClickEvent = mapboxgl.MapMouseEvent & mapboxgl.EventData;
|
||||||
|
|
||||||
const MapboxMap = () => {
|
const MapboxMap = () => {
|
||||||
|
@ -33,6 +40,7 @@ const MapboxMap = () => {
|
||||||
minZoom: constants.GLOBAL_MIN_ZOOM,
|
minZoom: constants.GLOBAL_MIN_ZOOM,
|
||||||
maxZoom: constants.GLOBAL_MAX_ZOOM,
|
maxZoom: constants.GLOBAL_MAX_ZOOM,
|
||||||
maxBounds: constants.GLOBAL_MAX_BOUNDS as LngLatBoundsLike,
|
maxBounds: constants.GLOBAL_MAX_BOUNDS as LngLatBoundsLike,
|
||||||
|
hash: true, // Adds hash of zoom/lat/long to the url
|
||||||
});
|
});
|
||||||
// disable map rotation using right click + drag
|
// disable map rotation using right click + drag
|
||||||
initialMap.dragRotate.disable();
|
initialMap.dragRotate.disable();
|
||||||
|
@ -40,6 +48,14 @@ const MapboxMap = () => {
|
||||||
// disable map rotation using touch rotation gesture
|
// disable map rotation using touch rotation gesture
|
||||||
initialMap.touchZoomRotate.disableRotation();
|
initialMap.touchZoomRotate.disableRotation();
|
||||||
|
|
||||||
|
setZoom(initialMap.getZoom());
|
||||||
|
|
||||||
|
initialMap.on('load', () => {
|
||||||
|
if (window.Cypress) {
|
||||||
|
window.mapboxGlMap = initialMap;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
initialMap.on('click', handleClick);
|
initialMap.on('click', handleClick);
|
||||||
initialMap.addControl(new NavigationControl({showCompass: false}), 'top-left');
|
initialMap.addControl(new NavigationControl({showCompass: false}), 'top-left');
|
||||||
map.current = initialMap;
|
map.current = initialMap;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue