diff --git a/web/client/components/map/openlayers/__tests__/Layer-test.jsx b/web/client/components/map/openlayers/__tests__/Layer-test.jsx index 6b60c31280..17a6eec81c 100644 --- a/web/client/components/map/openlayers/__tests__/Layer-test.jsx +++ b/web/client/components/map/openlayers/__tests__/Layer-test.jsx @@ -401,6 +401,38 @@ describe('Openlayers layer', () => { expect(closed).toBe(true); }); + it('creates and overlay layer for openlayers map with onLink support', () => { + let container = document.createElement('div'); + container.id = 'ovcontainer'; + document.body.appendChild(container); + + let element = document.createElement('div'); + element.id = 'overlay-1'; + let linkElement = document.createElement('a'); + linkElement.className = 'link'; + element.appendChild(linkElement); + document.body.appendChild(element); + let clicked = false; + let options = { + id: 'overlay-1', + position: [13, 43], + onLink: () => { + clicked = true; + } + }; + // create layers + let layer = ReactDOM.render( + , document.getElementById('ovcontainer')); + + expect(layer).toExist(); + const overlayElement = document.getElementById('overlay-1-overlay'); + expect(overlayElement).toExist(); + const link = overlayElement.getElementsByClassName('link')[0]; + link.click(); + expect(clicked).toBe(true); + }); + it('creates and overlay layer for openlayers map with no data-reactid attributes', () => { let container = document.createElement('div'); container.id = 'ovcontainer'; diff --git a/web/client/components/map/openlayers/plugins/OverlayLayer.js b/web/client/components/map/openlayers/plugins/OverlayLayer.js index 8300067624..58709b8fc4 100644 --- a/web/client/components/map/openlayers/plugins/OverlayLayer.js +++ b/web/client/components/map/openlayers/plugins/OverlayLayer.js @@ -36,6 +36,12 @@ const cloneOriginalOverlay = (original, options) => { }; eventListener.add(close, 'click', onClose); } + if (options.onLink) { + let links = cloned.getElementsByTagName('a'); + for (let i = 0; i < links.length; i++) { + eventListener.add(links[i], 'click', options.onLink); + } + } return cloned; };