@randy.tarampi/jsx
Version:
Some common JSX components for www.randytarampi.ca
194 lines (156 loc) • 9.09 kB
JavaScript
;
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;