diff --git a/src/components/map/TiledLayer.test.tsx b/src/components/map/TiledLayer.test.tsx index ba02f58..edcd89f 100644 --- a/src/components/map/TiledLayer.test.tsx +++ b/src/components/map/TiledLayer.test.tsx @@ -118,6 +118,56 @@ describe('The TiledLayer component ', () => { +`); + }); + test('is reinitialized if its key isObject updated', () => { + const { baseElement, rerender } = render( + + + + ); + rerender( + + + + ); + // screen.debug(); + expect(baseElement).toMatchInlineSnapshot(` + +
+ + + + {"provider":"osm","zoomLevel":11,"x":10,"y":5} + + + + + {"provider":"osm","zoomLevel":11,"x":10,"y":6} + + + + + {"provider":"osm","zoomLevel":11,"x":10,"y":7} + + + +
+ `); }); }); diff --git a/src/components/map/TiledLayer.tsx b/src/components/map/TiledLayer.tsx index d672b8e..5de7820 100644 --- a/src/components/map/TiledLayer.tsx +++ b/src/components/map/TiledLayer.tsx @@ -1,5 +1,5 @@ -import react, { useRef } from 'react'; -import { range } from 'lodash'; +import react, { useEffect, useRef } from 'react'; +import { range, isEqual } from 'lodash'; import { Rectangle, TileFactory, TileKeyObject } from './types'; import tileUri from './uris'; @@ -30,6 +30,11 @@ export const TiledLayer: react.FC = ( ) => { console.log(`Rendering TiledLayer: ${JSON.stringify(props)}`); const tiles = useRef({}); + const previousKeyObject = useRef(props.keyObject); + if (!isEqual(props.keyObject, previousKeyObject.current)) { + previousKeyObject.current = props.keyObject; + tiles.current = {}; + } range(props.viewPort.topLeft.y, props.viewPort.bottomRight.y + 1).map( (row) => {