UNPKG

@randy.tarampi/jsx

Version:

Some common JSX components for www.randytarampi.ca

84 lines (75 loc) 3.78 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 { createAction } from "redux-actions"; import fetchPosts from "../../api/fetchPosts"; import { isUrlStateLoading } from "../../data/api"; import selectors from "../../data/selectors"; import setError from "../error/setError"; export var FETCHING_POSTS_FAILURE = "FETCHING_POSTS_FAILURE"; export var FETCHING_POSTS_FAILURE_RECOVERY = "FETCHING_POSTS_FAILURE_RECOVERY"; export var FETCHING_POSTS_SUCCESS = "FETCHING_POSTS_SUCCESS"; export var FETCHING_POSTS_CANCELLED = "FETCHING_POSTS_CANCELLED"; export var FETCHING_POSTS = "FETCHING_POSTS"; export var FETCHING_POSTS_PER_PAGE = 8; export var fetchPostsCreator = function fetchPostsCreator(fetchUrl) { var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "global"; var searchParams = arguments.length > 2 ? arguments[2] : undefined; var searchType = arguments.length > 3 ? arguments[3] : undefined; return (dispatch, getState) => { var state = getState(); var urlState = selectors.getApiStateForUrl(state, fetchUrl); var loadedPosts = selectors.getPosts(state); var isLoading = isUrlStateLoading(urlState); if (type && type !== "global") { searchParams.type = type; } if (isLoading) { dispatch(fetchingPostsCancelled({ fetchUrl, searchParams, searchType, isLoading })); return Promise.resolve(); } dispatch(fetchingPosts({ fetchUrl, searchParams, searchType })); return fetchPosts(fetchUrl, searchParams).then(postsResponse => { dispatch(fetchingPostsSuccess(_objectSpread({ fetchUrl, searchParams, searchType }, postsResponse))); if ((!loadedPosts || !loadedPosts.size) && (!postsResponse || !postsResponse.posts || !postsResponse.posts.length)) { dispatch(setError(undefined, "ENOPOSTS")); } }).catch(error => { dispatch(fetchingPostsFailure({ searchParams, searchType, fetchUrl, error })); if (!loadedPosts || !loadedPosts.size) { dispatch(setError(error, "EFETCH")); } else { dispatch(fetchingPostsFailureRecovery({ fetchUrl, searchParams, searchType })); } throw error; }); }; }; export var fetchingPosts = createAction(FETCHING_POSTS); export var fetchingPostsCancelled = createAction(FETCHING_POSTS_CANCELLED); export var fetchingPostsSuccess = createAction(FETCHING_POSTS_SUCCESS); export var fetchingPostsFailure = createAction(FETCHING_POSTS_FAILURE); export var fetchingPostsFailureRecovery = createAction(FETCHING_POSTS_FAILURE_RECOVERY); export default fetchPostsCreator;