all files / mapbox-gl-draw/src/lib/ features_at.js

96.15% Statements 25/26
87.5% Branches 7/8
100% Functions 4/4
100% Lines 20/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37               456×   456×   456× 15470×   456×   143×     456× 456× 456× 142× 142× 141× 141×     456×    
const sortFeatures = require('./sort_features');
const mapEventToBoundingBox = require('./map_event_to_bounding_box');
const Constants = require('../constants');
const StringSet = require('./string_set');
 
const META_TYPES = [
  Constants.meta.FEATURE,
  Constants.meta.MIDPOINT,
  Constants.meta.VERTEX
];
 
// Requires either event or bbox
module.exports = function(event, bbox, ctx) {
  Iif (ctx.map === null) return [];
 
  const box = (event) ? mapEventToBoundingBox(event, ctx.options.clickBuffer) : bbox;
 
  const queryParams = {};
  if (ctx.options.styles) queryParams.layers = ctx.options.styles.map(s => s.id);
 
  const features = ctx.map.queryRenderedFeatures(box, queryParams)
    .filter((feature) => {
      return META_TYPES.indexOf(feature.properties.meta) !== -1;
    });
 
  const featureIds = new StringSet();
  const uniqueFeatures = [];
  features.forEach((feature) => {
    const featureId = feature.properties.id;
    if (featureIds.has(featureId)) return;
    featureIds.add(featureId);
    uniqueFeatures.push(feature);
  });
 
  return sortFeatures(uniqueFeatures);
};