UNPKG

@randy.tarampi/jsx

Version:

Some common JSX components for www.randytarampi.ca

194 lines (156 loc) 9.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getNewestFetchedPostDateForSearchTypeAndPostType = exports.getOldestFetchedPostDateForSearchTypeAndPostType = exports.getNewestAvailablePostDateForSearchTypeAndPostType = exports.getOldestAvailablePostDateForSearchTypeAndPostType = exports.getNewestPostForBoundingBox = exports.getOldestPostForBoundingBox = exports.getNewestPost = exports.getOldestPost = exports.getPostsSortedByDateForBoundingBox = exports.getWordPostsSortedByDate = exports.getPhotoPostsSortedByDate = exports.getPostsSortedByDate = exports.getWordPosts = exports.getPhotoPosts = exports.getPostsForBoundingBox = exports.createFilteredPostsSelector = exports.getPosts = exports["default"] = exports.postsReducer = void 0; var _js = require("@randy.tarampi/js"); var _immutable = require("immutable"); var _constants = require("redux-persist/constants"); var _reselect = require("reselect"); var _fetchPosts = require("../actions/posts/fetchPosts"); 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 postSearchTypes = ["blog", "map"]; var postSearchMetadata = ["oldest", "newest", "oldestFetched", "newestFetched"]; var initialState = (0, _immutable.Map)(_objectSpread({ posts: (0, _immutable.Map)() }, postSearchMetadata.reduce(function (metadata, metadatum) { metadata[metadatum] = (0, _immutable.fromJS)(postSearchTypes.reduce(function (metadatum, searchType) { metadatum[searchType] = {}; return metadatum; }, {})); return metadata; }, {}))); var postsReducer = function postsReducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; var action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case _constants.REHYDRATE: { if (action.payload.posts) { var updatedState = state; var loadedPosts = state.get("posts"); if (loadedPosts instanceof _immutable.Set) { updatedState = updatedState.set("posts", loadedPosts.reduce(function (mappedPosts, post) { return mappedPosts.set(post.uid, post); }, (0, _immutable.Map)())); } postSearchTypes.forEach(function (searchType) { postSearchMetadata.forEach(function (searchMetadata) { if (updatedState.hasIn([searchMetadata, searchType])) { updatedState = state.setIn([searchMetadata, searchType], buildOldestOrNewestPostMeta(action.payload.posts.toJS(), searchMetadata)); } }); }); return updatedState; } return state; } case _fetchPosts.FETCHING_POSTS_SUCCESS: { if (action.payload.posts) { var _updatedState = state; action.payload.posts.forEach(function (post) { _updatedState = _updatedState.setIn(["posts", post.uid], post); }); if (action.payload.searchParams.tags) { return _updatedState; } postSearchMetadata.forEach(function (searchMetadata) { if (_updatedState.hasIn([searchMetadata, action.payload.searchType])) { _updatedState = _updatedState.setIn([searchMetadata, action.payload.searchType], buildOldestOrNewestPostMeta(action.payload, searchMetadata)); } }); return _updatedState; } return state; } default: return state; } }; exports.postsReducer = postsReducer; var buildOldestOrNewestPostMeta = function buildOldestOrNewestPostMeta(payload, key) { return payload[key] ? (0, _immutable.Map)(Object.keys(payload[key]).reduce(function (keyest, keyestKey) { keyest[keyestKey] = (0, _js.castDatePropertyToDateTime)(payload[key][keyestKey]); return keyest; }, {})) : (0, _immutable.Map)(); }; var _default = postsReducer; exports["default"] = _default; var getPosts = function getPosts(state) { return state.get("posts").toList(); }; exports.getPosts = getPosts; var createFilteredPostsSelector = function createFilteredPostsSelector() { for (var _len = arguments.length, filterOrSelectors = new Array(_len), _key = 0; _key < _len; _key++) { filterOrSelectors[_key] = arguments[_key]; } return filterOrSelectors.length > 1 ? _reselect.createSelector.apply(void 0, filterOrSelectors) : _reselect.createSelector.apply(void 0, [getPosts].concat(filterOrSelectors)); }; exports.createFilteredPostsSelector = createFilteredPostsSelector; var getPostsForBoundingBox = function getPostsForBoundingBox(state, north, east, south, west) { return (0, _js.filterPostsForBoundingBox)(getPosts(state), north, east, south, west); }; exports.getPostsForBoundingBox = getPostsForBoundingBox; var getPhotoPosts = createFilteredPostsSelector(function (posts) { return posts.filter(function (post) { return post instanceof _js.Photo || post instanceof _js.Gallery; }); }); exports.getPhotoPosts = getPhotoPosts; var getWordPosts = createFilteredPostsSelector(function (posts) { return posts.filter(function (post) { return post instanceof _js.Post; }); }); exports.getWordPosts = getWordPosts; var getPostsSortedByDate = createFilteredPostsSelector(function (posts) { return posts.sort(_js.sortPostsByDate); }); exports.getPostsSortedByDate = getPostsSortedByDate; var getPhotoPostsSortedByDate = createFilteredPostsSelector(getPhotoPosts, function (posts) { return posts.sort(_js.sortPostsByDate); }); exports.getPhotoPostsSortedByDate = getPhotoPostsSortedByDate; var getWordPostsSortedByDate = createFilteredPostsSelector(getWordPosts, function (posts) { return posts.sort(_js.sortPostsByDate); }); exports.getWordPostsSortedByDate = getWordPostsSortedByDate; var getPostsSortedByDateForBoundingBox = createFilteredPostsSelector(getPostsForBoundingBox, function (posts) { return posts.sort(_js.sortPostsByDate); }); exports.getPostsSortedByDateForBoundingBox = getPostsSortedByDateForBoundingBox; var getOldestPost = createFilteredPostsSelector(getPostsSortedByDate, function (sortedPosts) { return sortedPosts.last(); }); exports.getOldestPost = getOldestPost; var getNewestPost = createFilteredPostsSelector(getPostsSortedByDate, function (sortedPosts) { return sortedPosts.first(); }); exports.getNewestPost = getNewestPost; var getOldestPostForBoundingBox = createFilteredPostsSelector(getPostsSortedByDateForBoundingBox, function (sortedPosts) { return sortedPosts.last(); }); exports.getOldestPostForBoundingBox = getOldestPostForBoundingBox; var getNewestPostForBoundingBox = createFilteredPostsSelector(getPostsSortedByDateForBoundingBox, function (sortedPosts) { return sortedPosts.first(); }); exports.getNewestPostForBoundingBox = getNewestPostForBoundingBox; var getOldestAvailablePostDateForSearchTypeAndPostType = function getOldestAvailablePostDateForSearchTypeAndPostType(state, searchType, postType) { return state.getIn(["oldest", searchType, postType]); }; exports.getOldestAvailablePostDateForSearchTypeAndPostType = getOldestAvailablePostDateForSearchTypeAndPostType; var getNewestAvailablePostDateForSearchTypeAndPostType = function getNewestAvailablePostDateForSearchTypeAndPostType(state, searchType, postType) { return state.getIn(["newest", searchType, postType]); }; exports.getNewestAvailablePostDateForSearchTypeAndPostType = getNewestAvailablePostDateForSearchTypeAndPostType; var getOldestFetchedPostDateForSearchTypeAndPostType = function getOldestFetchedPostDateForSearchTypeAndPostType(state, searchType, postType) { return state.getIn(["oldestFetched", searchType, postType]); }; exports.getOldestFetchedPostDateForSearchTypeAndPostType = getOldestFetchedPostDateForSearchTypeAndPostType; var getNewestFetchedPostDateForSearchTypeAndPostType = function getNewestFetchedPostDateForSearchTypeAndPostType(state, searchType, postType) { return state.getIn(["newestFetched", searchType, postType]); }; exports.getNewestFetchedPostDateForSearchTypeAndPostType = getNewestFetchedPostDateForSearchTypeAndPostType;