# Source: src/js/collections/maps/VectorFilters.js

    'use strict';

    define(
      [
        'jquery',
        'underscore',
        'backbone',
        'models/maps/VectorFilter'
      ],
      function (
        $,
        _,
        Backbone,
        VectorFilter
      ) {

        /**
         * @class VectorFilters
         * @classdesc A VectorFilters collection is a set of conditions used to show or hide
         * features of a vector layer on a map.
         * @class VectorFilters
         * @classcategory Collections/Maps
         * @extends Backbone.Collection
         * @since 2.18.0
         * @constructor
         */
        var VectorFilters = Backbone.Collection.extend(
          /** @lends VectorFilters.prototype */ {

            /**
            * The class/model that this collection contains.
            * @type {Backbone.Model}
            */
            model: VectorFilter,

            /**
             * This function is used to determine if a feature should be shown or hidden based
             * on the current filters.
             * @param {Object} properties The properties of the feature to be filtered.
             * (See the 'properties' attribute of {@link Feature#defaults}.)
             * @returns {boolean} Returns true if the feature passes all of the filters.
             */
            featureIsVisible: function (properties) {
              try {
                if (!properties) {
                  properties = {};
                }
                let visible = true;
                this.each(function (filter) {
                  visible = visible && filter.featureIsVisible(properties);
                });
                return visible;
              }
              catch (error) {
                console.log(
                  'There was an error filtering a feature in a VectorFilters collection' +
                  '. Error details: ' + error + '. The feature will be visible.'
                );
                return true;
              }
            }

          }
        );

        return VectorFilters;

      }
    );