UNPKG

@randy.tarampi/jsx

Version:

Some common JSX components for www.randytarampi.ca

107 lines (92 loc) 6.32 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 { castDatePropertyToDateTime, filterPostsForBoundingBox, Gallery, Photo, Post, sortPostsByDate } from "@randy.tarampi/js"; import { fromJS, Map, Set } from "immutable"; import { REHYDRATE } from "redux-persist/constants"; import { createSelector } from "reselect"; import { FETCHING_POSTS_SUCCESS } from "../actions/posts/fetchPosts"; var postSearchTypes = ["blog", "map"]; var postSearchMetadata = ["oldest", "newest", "oldestFetched", "newestFetched"]; var initialState = Map(_objectSpread({ posts: Map() }, postSearchMetadata.reduce((metadata, metadatum) => { metadata[metadatum] = fromJS(postSearchTypes.reduce((metadatum, searchType) => { metadatum[searchType] = {}; return metadatum; }, {})); return metadata; }, {}))); export 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 REHYDRATE: { if (action.payload.posts) { var updatedState = state; var loadedPosts = state.get("posts"); if (loadedPosts instanceof Set) { updatedState = updatedState.set("posts", loadedPosts.reduce((mappedPosts, post) => mappedPosts.set(post.uid, post), Map())); } postSearchTypes.forEach(searchType => { postSearchMetadata.forEach(searchMetadata => { if (updatedState.hasIn([searchMetadata, searchType])) { updatedState = state.setIn([searchMetadata, searchType], buildOldestOrNewestPostMeta(action.payload.posts.toJS(), searchMetadata)); } }); }); return updatedState; } return state; } case FETCHING_POSTS_SUCCESS: { if (action.payload.posts) { var _updatedState = state; action.payload.posts.forEach(post => { _updatedState = _updatedState.setIn(["posts", post.uid], post); }); if (action.payload.searchParams.tags) { return _updatedState; } postSearchMetadata.forEach(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; } }; var buildOldestOrNewestPostMeta = (payload, key) => payload[key] ? Map(Object.keys(payload[key]).reduce((keyest, keyestKey) => { keyest[keyestKey] = castDatePropertyToDateTime(payload[key][keyestKey]); return keyest; }, {})) : Map(); export default postsReducer; export var getPosts = state => state.get("posts").toList(); export 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 ? createSelector(...filterOrSelectors) : createSelector(getPosts, ...filterOrSelectors); }; export var getPostsForBoundingBox = (state, north, east, south, west) => filterPostsForBoundingBox(getPosts(state), north, east, south, west); export var getPhotoPosts = createFilteredPostsSelector(posts => posts.filter(post => post instanceof Photo || post instanceof Gallery)); export var getWordPosts = createFilteredPostsSelector(posts => posts.filter(post => post instanceof Post)); export var getPostsSortedByDate = createFilteredPostsSelector(posts => posts.sort(sortPostsByDate)); export var getPhotoPostsSortedByDate = createFilteredPostsSelector(getPhotoPosts, posts => posts.sort(sortPostsByDate)); export var getWordPostsSortedByDate = createFilteredPostsSelector(getWordPosts, posts => posts.sort(sortPostsByDate)); export var getPostsSortedByDateForBoundingBox = createFilteredPostsSelector(getPostsForBoundingBox, posts => posts.sort(sortPostsByDate)); export var getOldestPost = createFilteredPostsSelector(getPostsSortedByDate, sortedPosts => sortedPosts.last()); export var getNewestPost = createFilteredPostsSelector(getPostsSortedByDate, sortedPosts => sortedPosts.first()); export var getOldestPostForBoundingBox = createFilteredPostsSelector(getPostsSortedByDateForBoundingBox, sortedPosts => sortedPosts.last()); export var getNewestPostForBoundingBox = createFilteredPostsSelector(getPostsSortedByDateForBoundingBox, sortedPosts => sortedPosts.first()); export var getOldestAvailablePostDateForSearchTypeAndPostType = (state, searchType, postType) => state.getIn(["oldest", searchType, postType]); export var getNewestAvailablePostDateForSearchTypeAndPostType = (state, searchType, postType) => state.getIn(["newest", searchType, postType]); export var getOldestFetchedPostDateForSearchTypeAndPostType = (state, searchType, postType) => state.getIn(["oldestFetched", searchType, postType]); export var getNewestFetchedPostDateForSearchTypeAndPostType = (state, searchType, postType) => state.getIn(["newestFetched", searchType, postType]);