diff --git a/web/client/components/data/identify/Identify.jsx b/web/client/components/data/identify/Identify.jsx index cdbecb0bcb..618af5b805 100644 --- a/web/client/components/data/identify/Identify.jsx +++ b/web/client/components/data/identify/Identify.jsx @@ -57,7 +57,8 @@ const Identify = React.createClass({ bodyClassName: React.PropTypes.string, asPanel: React.PropTypes.bool, headerGlyph: React.PropTypes.string, - closeGlyph: React.PropTypes.string + closeGlyph: React.PropTypes.string, + allowMultiselection: React.PropTypes.bool }, getDefaultProps() { return { @@ -103,12 +104,15 @@ const Identify = React.createClass({ bodyClassName: "panel-body", asPanel: true, headerGlyph: "info-sign", - closeGlyph: "" + closeGlyph: "", + allowMultiselection: false }; }, componentWillReceiveProps(newProps) { if (this.needsRefresh(newProps)) { - this.props.purgeResults(); + if (!newProps.point.modifiers || newProps.point.modifiers.ctrl !== true || !newProps.allowMultiselection) { + this.props.purgeResults(); + } const queryableLayers = newProps.layers.filter(newProps.queryableLayersFilter); queryableLayers.forEach((layer) => { const {url, request, metadata} = this.props.buildRequest(layer, newProps); diff --git a/web/client/components/data/identify/__tests__/Identify-test.jsx b/web/client/components/data/identify/__tests__/Identify-test.jsx index f047bfc439..7f00afc8fa 100644 --- a/web/client/components/data/identify/__tests__/Identify-test.jsx +++ b/web/client/components/data/identify/__tests__/Identify-test.jsx @@ -199,6 +199,27 @@ describe('Identify', () => { expect(spyPurgeResults.calls.length).toEqual(2); }); + it('creates the Identify component does not purge if multiselection enabled', () => { + const testHandlers = { + purgeResults: () => {} + }; + + const spyPurgeResults = expect.spyOn(testHandlers, 'purgeResults'); + + const identify = ReactDOM.render( + true} + enabled={true} layers={[{}, {}]} {...testHandlers} buildRequest={() => ({})} + multiSelection={true} + />, + document.getElementById("container") + ); + identify.setProps({point: {pixel: {x: 1, y: 1}, modifiers: {ctrl: false}}}); + expect(spyPurgeResults.calls.length).toEqual(1); + identify.setProps({point: {pixel: {x: 1, y: 1}, modifiers: {ctrl: true}}}); + expect(spyPurgeResults.calls.length).toEqual(1); + }); + it('creates the Identify component uses custom viewer', () => { const Viewer = (props) => {props.responses.length}; const identify = ReactDOM.render( diff --git a/web/client/components/map/leaflet/Map.jsx b/web/client/components/map/leaflet/Map.jsx index 93077109fa..973e29e63c 100644 --- a/web/client/components/map/leaflet/Map.jsx +++ b/web/client/components/map/leaflet/Map.jsx @@ -106,6 +106,11 @@ let LeafletMap = React.createClass({ latlng: { lat: event.latlng.lat, lng: event.latlng.lng + }, + modifiers: { + alt: event.originalEvent.altKey, + ctrl: event.originalEvent.ctrlKey, + shift: event.originalEvent.shiftKey } }); } diff --git a/web/client/components/map/leaflet/__tests__/Map-test.jsx b/web/client/components/map/leaflet/__tests__/Map-test.jsx index fa7a746bf1..24e906b173 100644 --- a/web/client/components/map/leaflet/__tests__/Map-test.jsx +++ b/web/client/components/map/leaflet/__tests__/Map-test.jsx @@ -152,10 +152,12 @@ describe('LeafletMap', () => { expect(spy.calls[0].arguments.length).toEqual(1); expect(spy.calls[0].arguments[0].pixel).toExist(); expect(spy.calls[0].arguments[0].latlng).toExist(); + expect(spy.calls[0].arguments[0].modifiers).toExist(); + expect(spy.calls[0].arguments[0].modifiers.alt).toEqual(false); + expect(spy.calls[0].arguments[0].modifiers.ctrl).toEqual(false); + expect(spy.calls[0].arguments[0].modifiers.shift).toEqual(false); done(); }, 600); - - }); it('check if the map changes when receive new props', () => { diff --git a/web/client/components/map/openlayers/Map.jsx b/web/client/components/map/openlayers/Map.jsx index 7b4e3ca8d8..00e6baff17 100644 --- a/web/client/components/map/openlayers/Map.jsx +++ b/web/client/components/map/openlayers/Map.jsx @@ -135,6 +135,11 @@ var OpenlayersMap = React.createClass({ latlng: { lat: coords[1], lng: tLng + }, + modifiers: { + alt: event.originalEvent.altKey, + ctrl: event.originalEvent.ctrlKey, + shift: event.originalEvent.shiftKey } }); }