Naimikan/angular-mapboxgl-directive

View on GitHub
src/directives/glCenter.js

Summary

Maintainability
A
0 mins
Test Coverage
angular.module('mapboxgl-directive').directive('glCenter', ['Utils', 'mapboxglConstants', function (Utils, mapboxglConstants) {
    function mapboxGlCenterDirectiveLink (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('glCenter', function (center, oldCenter) {
                Utils.validateAndFormatCenter(center).then(function (newCenter) {
                    if (newCenter) {
                        if (angular.isDefined(oldCenter) && center !== oldCenter) {
                            map.flyTo({ center: newCenter });
                        } else {
                            map.setCenter(newCenter);
                        }
                    } else {
                        throw new Error('Invalid center');
                    }
                }).catch(function (error) {
                    map.setCenter(mapboxglConstants.map.defaultCenter);

                    throw new Error(error.code + ' / ' + error.message);
                });
            }, true);
        });
    }

    var directive = {
        restrict: 'A',
        scope: false,
        replace: false,
        require: '?^mapboxgl',
        link: mapboxGlCenterDirectiveLink
    };

    return directive;
}]);