redux-map-gl
Version:
Simplify react-map-gl and redux
74 lines (58 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends3 = require('babel-runtime/helpers/extends');
var _extends4 = _interopRequireDefault(_extends3);
exports.createViewportReducer = createViewportReducer;
exports.default = enhanceReducer;
var _immutable = require('immutable');
var _types = require('./types');
var _types2 = _interopRequireDefault(_types);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var identityReducer = function identityReducer(state) {
return state;
};
/**
* viewportReducer can be used directly as a reducer rather than an enhancer
* @param {[type]} defaults [description]
* @param {[Object]} defaults = {} defaults for the initial state
* @param {[String]} key = 'viewport' The key which the state should be stored under
* @return {Function} A viewport reducer
*/
function createViewportReducer(defaults, key) {
return enhanceReducer(identityReducer, defaults, key);
}
/**
* Enhance a reducer by adding support for managing react-map-gl state.
* @param {Function} reducer The reducer to enhance
* @param {[Object]} defaults = {} defaults for the initial state
* @param {[String]} key = 'viewport' The key which the state should be stored under
* @return {Function} An enhanced reducer
*/
function enhanceReducer(reducer) {
var defaults = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var key = arguments.length <= 2 || arguments[2] === undefined ? 'viewport' : arguments[2];
var initialState = (0, _defineProperty3.default)({}, key, (0, _immutable.fromJS)((0, _extends4.default)({
latitude: 0,
longitude: 0,
bearing: 0,
zoom: 1,
isDragging: false,
startDragLngLat: undefined
}, defaults)));
return function () {
var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
var action = arguments[1];
switch (action.type) {
case _types2.default.CHANGE_VIEWPORT:
{
return (0, _extends4.default)({}, state, (0, _defineProperty3.default)({}, key, state[key].merge(action.payload.mapState)));
}
default:
return reducer(state, action);
}
};
}