src/directives/glFilter.js
angular.module('mapboxgl-directive').directive('glFilter', [function () {
function mapboxGlFilterDirectiveLink (scope, element, attrs, controller) {
if (!controller) {
throw new Error('Invalid angular-mapboxgl-directive controller');
}
var mapboxglScope = controller.getMapboxGlScope();
controller.getMap().then(function (map) {
mapboxglScope.$watch('glFilter', function (filter) {
if (angular.isDefined(filter)) {
if (Object.prototype.toString.call(filter) === Object.prototype.toString.call({})) {
if (angular.isDefined(filter.layerId) && angular.isDefined(filter.filter) && angular.isArray(filter.filter)) {
map.setFilter(filter.layerId, filter.filter);
} else {
throw new Error('Invalid filter parameter');
}
} else if (Object.prototype.toString.call(filter) === Object.prototype.toString.call([])) {
filter.map(function (eachFilter) {
if (angular.isDefined(eachFilter.layerId) && angular.isDefined(eachFilter.filter) && angular.isArray(eachFilter.filter)) {
map.setFilter(eachFilter.layerId, eachFilter.filter);
} else {
throw new Error('Invalid filter parameter');
}
});
} else {
throw new Error('Invalid filter parameter');
}
}
}, true);
});
}
var directive = {
restrict: 'A',
scope: false,
replace: false,
require: '?^mapboxgl',
link: mapboxGlFilterDirectiveLink
};
return directive;
}]);