UNPKG

@randy.tarampi/jsx

Version:

Some common JSX components for www.randytarampi.ca

71 lines (65 loc) 3.57 kB
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;