@randy.tarampi/jsx
Version:
Some common JSX components for www.randytarampi.ca
71 lines (65 loc) • 3.57 kB
JavaScript
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; }
import { Gallery, Photo, Post } from "@randy.tarampi/js";
import { DateTime } from "luxon";
import PropTypes from "prop-types";
import { connect } from "react-redux";
import { FETCHING_POSTS_PER_PAGE } from "../actions/posts/fetchPosts";
import { fetchPostsForBlogCreator } from "../actions/posts/fetchPostsForBlog";
import { DimensionsContainerWrappedPosts } from "../components/posts";
import { createGetErrorForUrlSelector, createIsLoadingUrlSelector } from "../data/api";
import { createComplexPostsSelector, getBasePostsSelectorForType, selectors } from "../data/selectors";
import { generateFilterFunctionForFilterName } from "../util";
export var connectPosts = connect((state, ownProps) => {
var searchType = "blog";
var isLoadingUrlSelector = createIsLoadingUrlSelector();
var errorForUrlSelector = createGetErrorForUrlSelector();
var {
type = "global",
fetchUrl
} = ownProps;
var {
filter,
filterValue
} = ownProps.match && ownProps.match.params || ownProps;
var oldestLoadedPostDateString = selectors.getOldestFetchedPostDateForSearchTypeAndPostType(state, searchType, type);
var oldestLoadedPostDate = oldestLoadedPostDateString && DateTime.fromISO(oldestLoadedPostDateString);
var props = {
isLoading: isLoadingUrlSelector(state, fetchUrl),
error: errorForUrlSelector(state, fetchUrl)
};
var postsFilters = [];
if (filter) {
postsFilters.push(generateFilterFunctionForFilterName[filter](filterValue));
} else if (oldestLoadedPostDate) {
postsFilters.push(generateFilterFunctionForFilterName.earlierThan(oldestLoadedPostDate));
}
var postsSelector = createComplexPostsSelector(postsFilters, [getBasePostsSelectorForType(type)]);
props.posts = postsSelector(state);
return props;
}, (dispatch, _ref) => {
var {
fetchUrl,
type,
match,
fetchPostsParams
} = _ref;
return {
fetchPosts: passedParams => {
var searchParams = _objectSpread(_objectSpread(_objectSpread({}, match && match.params), fetchPostsParams), {}, {
perPage: FETCHING_POSTS_PER_PAGE
}, passedParams);
return dispatch(fetchPostsForBlogCreator(fetchUrl, type, searchParams));
}
};
});
export var ConnectedPosts = connectPosts(DimensionsContainerWrappedPosts);
ConnectedPosts.propTypes = {
fetchUrl: PropTypes.string.isRequired,
type: PropTypes.oneOf([Post.type, Photo.type, Gallery.type])
};
ConnectedPosts.defaultProps = {
fetchUrl: "/posts"
};
export default ConnectedPosts;