Naimikan/angular-mapboxgl-directive

View on GitHub
src/directives/glFilter.js

Summary

Maintainability
B
6 hrs
Test Coverage
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;
}]);