shlink-web-client/src/short-urls/reducers/shortUrlVisits.js

51 lines
1.4 KiB
JavaScript
Raw Normal View History

2018-07-29 20:25:22 +03:00
import ShlinkApiClient from '../../api/ShlinkApiClient';
import { curry } from 'ramda';
2018-07-29 20:25:22 +03:00
const GET_SHORT_URL_VISITS_START = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_START';
const GET_SHORT_URL_VISITS_ERROR = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_ERROR';
const GET_SHORT_URL_VISITS = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS';
const initialState = {
shortUrl: {},
2018-07-29 20:25:22 +03:00
visits: [],
loading: false,
error: false
};
export default function dispatch (state = initialState, action) {
switch (action.type) {
case GET_SHORT_URL_VISITS_START:
return {
...state,
loading: true
};
case GET_SHORT_URL_VISITS_ERROR:
return {
...state,
loading: false,
error: true
};
case GET_SHORT_URL_VISITS:
return {
shortUrl: action.shortUrl,
2018-07-29 20:25:22 +03:00
visits: action.visits,
loading: false,
error: false
};
default:
return state;
}
}
export const _getShortUrlVisits = (ShlinkApiClient, shortCode, dates) => dispatch => {
2018-07-29 20:25:22 +03:00
dispatch({ type: GET_SHORT_URL_VISITS_START });
Promise.all([
ShlinkApiClient.getShortUrlVisits(shortCode, dates),
ShlinkApiClient.getShortUrl(shortCode)
])
.then(([visits, shortUrl]) => dispatch({ visits, shortUrl, type: GET_SHORT_URL_VISITS }))
.catch(() => dispatch({ type: GET_SHORT_URL_VISITS_ERROR }));
2018-07-29 20:25:22 +03:00
};
export const getShortUrlVisits = curry(_getShortUrlVisits)(ShlinkApiClient);