@randy.tarampi/jsx
Version:
Some common JSX components for www.randytarampi.ca
130 lines (104 loc) • 5.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.ConnectedMappedPosts = exports.connectMappedPosts = exports.MAPPED_POSTS_FETCHING_POSTS_PER_PAGE = exports.MAPPED_POSTS_FETCH_DEBOUNCE_DELAY = void 0;
var _debounce2 = _interopRequireDefault(require("lodash/debounce"));
var _js = require("@randy.tarampi/js");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactRedux = require("react-redux");
var _actions = require("../actions");
var _mappedPosts = require("../components/mappedPosts");
var _data = require("../data");
var _selectors = require("../data/selectors");
var _util = require("../util");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var getBasePostsSelectorForType = function getBasePostsSelectorForType(type) {
switch (type) {
case _js.Photo.type:
case _js.Gallery.type:
return _selectors.selectors.getPhotoPosts;
case _js.Post.type:
return _selectors.selectors.getWordPosts;
default:
return _selectors.selectors.getPosts;
}
};
var MAPPED_POSTS_FETCH_DEBOUNCE_DELAY = 500;
exports.MAPPED_POSTS_FETCH_DEBOUNCE_DELAY = MAPPED_POSTS_FETCH_DEBOUNCE_DELAY;
var MAPPED_POSTS_FETCHING_POSTS_PER_PAGE = 32;
exports.MAPPED_POSTS_FETCHING_POSTS_PER_PAGE = MAPPED_POSTS_FETCHING_POSTS_PER_PAGE;
var connectMappedPosts = (0, _reactRedux.connect)(function (state, ownProps) {
var isLoadingUrlSelector = (0, _data.createIsLoadingUrlSelector)();
var errorForUrlSelector = (0, _data.createGetErrorForUrlSelector)();
var _ownProps$type = ownProps.type,
type = _ownProps$type === void 0 ? "global" : _ownProps$type,
fetchUrl = ownProps.fetchUrl;
var _ref = ownProps.match && ownProps.match.params || ownProps,
filter = _ref.filter,
filterValue = _ref.filterValue;
var mapState = _selectors.selectors.getMap(state, ownProps.id);
var _ref2 = mapState ? mapState.toJS() : {},
center = _ref2.center,
heading = _ref2.heading,
mapType = _ref2.type,
tilt = _ref2.tilt,
zoom = _ref2.zoom,
bounds = _ref2.bounds;
var props = {
isLoading: isLoadingUrlSelector(state, fetchUrl),
error: errorForUrlSelector(state, fetchUrl),
defaultCenter: center,
defaultHeading: heading,
defaultMapTypeId: mapType,
defaultTilt: tilt,
defaultZoom: zoom,
currentBounds: bounds,
currentCenter: center,
currentHeading: heading,
currentTilt: tilt,
currentZoom: zoom
};
var postsFilters = [_util.generateFilterFunctionForFilterName.location()];
if (filter) {
postsFilters.push(_util.generateFilterFunctionForFilterName[filter](filterValue));
}
if (bounds) {
postsFilters.push(_util.generateFilterFunctionForFilterName.boundingBox(bounds.north, bounds.east, bounds.south, bounds.west));
}
postsFilters.push(_util.generateTransformFunctionForTransformName.location(undefined, 0.0004));
var postsSelector = (0, _selectors.createComplexPostsSelector)(postsFilters, [getBasePostsSelectorForType(type)]);
props.posts = postsSelector(state);
return props;
}, function (dispatch, _ref3) {
var fetchUrl = _ref3.fetchUrl,
type = _ref3.type,
match = _ref3.match,
fetchPostsParams = _ref3.fetchPostsParams,
id = _ref3.id;
return {
fetchPosts: (0, _debounce2["default"])(function (passedParams) {
var searchParams = _objectSpread(_objectSpread(_objectSpread({}, match && match.params), fetchPostsParams), {}, {
perPage: MAPPED_POSTS_FETCHING_POSTS_PER_PAGE
}, passedParams);
return dispatch((0, _actions.fetchPostsForMapCreator)(id, fetchUrl, type, searchParams));
}, MAPPED_POSTS_FETCH_DEBOUNCE_DELAY)
};
});
exports.connectMappedPosts = connectMappedPosts;
var ConnectedMappedPosts = connectMappedPosts(_mappedPosts.MappedPostsComponent);
exports.ConnectedMappedPosts = ConnectedMappedPosts;
ConnectedMappedPosts.propTypes = {
id: _propTypes["default"].string.isRequired,
fetchUrl: _propTypes["default"].string.isRequired,
type: _propTypes["default"].oneOf([_js.Post.type, _js.Photo.type])
};
ConnectedMappedPosts.defaultProps = {
id: "map-posts",
fetchUrl: "/posts"
};
var _default = ConnectedMappedPosts;
exports["default"] = _default;