Create a layer state map instead of an array of uids

This commit is contained in:
Frederic Junod
2018-12-19 10:49:50 +01:00
parent 016d738269
commit a4fe067aad

View File

@@ -1,7 +1,6 @@
/** /**
* @module ol/renderer/Map * @module ol/renderer/Map
*/ */
import {includes} from '../array.js';
import {abstract, getUid} from '../util.js'; import {abstract, getUid} from '../util.js';
import Disposable from '../Disposable.js'; import Disposable from '../Disposable.js';
import {listen, unlistenByKey} from '../events.js'; import {listen, unlistenByKey} from '../events.js';
@@ -258,9 +257,9 @@ class MapRenderer extends Disposable {
*/ */
removeUnusedLayerRenderers_(map, frameState) { removeUnusedLayerRenderers_(map, frameState) {
if (frameState) { if (frameState) {
const layersUids = getLayersUids(frameState.layerStatesArray); const layerStatesMap = getLayerStatesMap(frameState.layerStatesArray);
for (const layerKey in this.layerRenderers_) { for (const layerKey in this.layerRenderers_) {
if (!includes(layersUids, layerKey)) { if (!(layerKey in layerStatesMap)) {
this.removeLayerRendererByKey_(layerKey).dispose(); this.removeLayerRendererByKey_(layerKey).dispose();
} }
} }
@@ -304,12 +303,13 @@ function expireIconCache(map, frameState) {
/** /**
* @param {Array<import("../layer/Layer.js").State>} layerStatesArray Layer states array. * @param {Array<import("../layer/Layer.js").State>} layerStatesArray Layer states array.
* @return {Array<string>} Layers uid. * @return {Object<string, import("../layer/Layer.js").State>} States mapped by layer uid.
*/ */
function getLayersUids(layerStatesArray) { function getLayerStatesMap(layerStatesArray) {
return layerStatesArray.map(function(state) { return layerStatesArray.reduce(function(acc, state) {
return getUid(state.layer); acc[getUid(state.layer)] = state;
}); return acc;
}, {});
} }
/** /**