Remove workaround for Array.prototype.includes

This commit is contained in:
Tim Schaub
2022-07-26 17:57:41 -06:00
parent 14133a05a8
commit 44289a3a31
10 changed files with 75 additions and 65 deletions
+35 -25
View File
@@ -4,12 +4,13 @@
import Collection from '../Collection.js';
import CollectionEventType from '../CollectionEventType.js';
import Event from '../events/Event.js';
import Feature from '../Feature.js';
import Interaction from './Interaction.js';
import VectorLayer from '../layer/Vector.js';
import {TRUE} from '../functions.js';
import {clear} from '../obj.js';
import {createEditingStyle} from '../style/Style.js';
import {extend, includes} from '../array.js';
import {extend} from '../array.js';
import {getUid} from '../util.js';
import {never, shiftKeyOnly, singleClick} from '../events/condition.js';
@@ -26,11 +27,9 @@ const SelectEventType = {
};
/**
* A function that takes an {@link module:ol/Feature~Feature} or
* {@link module:ol/render/Feature~RenderFeature} and an
* {@link module:ol/layer/Layer~Layer} and returns `true` if the feature may be
* A function that takes an {@link module:ol/Feature~Feature} and returns `true` if the feature may be
* selected or `false` otherwise.
* @typedef {function(import("../Feature.js").FeatureLike, import("../layer/Layer.js").default<import("../source/Source").default>):boolean} FilterFunction
* @typedef {function(import("../Feature.js").default, import("../layer/Layer.js").default<import("../source/Source").default>):boolean} FilterFunction
*/
/**
@@ -258,7 +257,7 @@ class Select extends Interaction {
} else {
const layers = options.layers;
layerFilter = function (layer) {
return includes(layers, layer);
return layers.includes(layer);
};
}
} else {
@@ -281,7 +280,7 @@ class Select extends Interaction {
}
/**
* @param {import("../Feature.js").FeatureLike} feature Feature.
* @param {import("../Feature.js").default} feature Feature.
* @param {import("../layer/Layer.js").default} layer Layer.
* @private
*/
@@ -310,7 +309,7 @@ class Select extends Interaction {
/**
* Returns the associated {@link module:ol/layer/Vector~VectorLayer vector layer} of
* a selected feature.
* @param {import("../Feature.js").FeatureLike} feature Feature
* @param {import("../Feature.js").default} feature Feature
* @return {import('../layer/Vector.js').default} Layer.
* @api
*/
@@ -451,7 +450,7 @@ class Select extends Interaction {
}
/**
* @param {import("../Feature.js").FeatureLike} feature Feature.
* @param {import("../Feature.js").default} feature Feature.
* @private
*/
removeFeatureLayerAssociation_(feature) {
@@ -475,8 +474,17 @@ class Select extends Interaction {
const set = !add && !remove && !toggle;
const map = mapBrowserEvent.map;
const features = this.getFeatures();
/**
* @type {Array<import("../Feature.js").default>}
*/
const deselected = [];
/**
* @type {Array<import("../Feature.js").default>}
*/
const selected = [];
if (set) {
// Replace the currently selected feature(s) with the feature(s) at the
// pixel, or clear the selected feature(s) if there is no feature at
@@ -490,11 +498,12 @@ class Select extends Interaction {
* @return {boolean|undefined} Continue to iterate over the features.
*/
function (feature, layer) {
if (this.filter_(feature, layer)) {
this.addFeatureLayerAssociation_(feature, layer);
selected.push(feature);
return !this.multi_;
if (!(feature instanceof Feature) || !this.filter_(feature, layer)) {
return;
}
this.addFeatureLayerAssociation_(feature, layer);
selected.push(feature);
return !this.multi_;
}.bind(this),
{
layerFilter: this.layerFilter_,
@@ -525,19 +534,20 @@ class Select extends Interaction {
* @return {boolean|undefined} Continue to iterate over the features.
*/
function (feature, layer) {
if (this.filter_(feature, layer)) {
if ((add || toggle) && !includes(features.getArray(), feature)) {
this.addFeatureLayerAssociation_(feature, layer);
selected.push(feature);
} else if (
(remove || toggle) &&
includes(features.getArray(), feature)
) {
deselected.push(feature);
this.removeFeatureLayerAssociation_(feature);
}
return !this.multi_;
if (!(feature instanceof Feature) || !this.filter_(feature, layer)) {
return;
}
if ((add || toggle) && !features.getArray().includes(feature)) {
this.addFeatureLayerAssociation_(feature, layer);
selected.push(feature);
} else if (
(remove || toggle) &&
features.getArray().includes(feature)
) {
deselected.push(feature);
this.removeFeatureLayerAssociation_(feature);
}
return !this.multi_;
}.bind(this),
{
layerFilter: this.layerFilter_,