2018-08-12 19:49:57 +03:00
|
|
|
import { curry } from 'ramda';
|
2018-08-26 00:39:27 +03:00
|
|
|
import PropTypes from 'prop-types';
|
2018-12-18 12:14:25 +03:00
|
|
|
import { buildShlinkApiClientWithAxios as buildShlinkApiClient } from '../../api/ShlinkApiClientBuilder';
|
2018-07-29 20:25:22 +03:00
|
|
|
|
2018-08-26 11:49:23 +03:00
|
|
|
/* eslint-disable padding-line-between-statements, newline-after-var */
|
2018-09-08 09:49:49 +03:00
|
|
|
export const GET_SHORT_URL_VISITS_START = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_START';
|
|
|
|
export const GET_SHORT_URL_VISITS_ERROR = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS_ERROR';
|
|
|
|
export const GET_SHORT_URL_VISITS = 'shlink/shortUrlVisits/GET_SHORT_URL_VISITS';
|
2018-08-26 11:49:23 +03:00
|
|
|
/* eslint-enable padding-line-between-statements, newline-after-var */
|
2018-07-29 20:25:22 +03:00
|
|
|
|
2018-08-26 20:19:45 +03:00
|
|
|
export const shortUrlVisitsType = PropTypes.shape({
|
2018-08-26 00:39:27 +03:00
|
|
|
visits: PropTypes.array,
|
|
|
|
loading: PropTypes.bool,
|
|
|
|
error: PropTypes.bool,
|
2018-08-26 20:19:45 +03:00
|
|
|
});
|
2018-08-26 00:39:27 +03:00
|
|
|
|
2018-07-29 20:25:22 +03:00
|
|
|
const initialState = {
|
|
|
|
visits: [],
|
|
|
|
loading: false,
|
2018-08-26 00:39:27 +03:00
|
|
|
error: false,
|
2018-07-29 20:25:22 +03:00
|
|
|
};
|
|
|
|
|
2018-09-01 12:26:35 +03:00
|
|
|
export default function reducer(state = initialState, action) {
|
2018-07-29 20:25:22 +03:00
|
|
|
switch (action.type) {
|
|
|
|
case GET_SHORT_URL_VISITS_START:
|
|
|
|
return {
|
|
|
|
...state,
|
2018-08-26 00:39:27 +03:00
|
|
|
loading: true,
|
2018-07-29 20:25:22 +03:00
|
|
|
};
|
|
|
|
case GET_SHORT_URL_VISITS_ERROR:
|
|
|
|
return {
|
|
|
|
...state,
|
|
|
|
loading: false,
|
2018-08-26 00:39:27 +03:00
|
|
|
error: true,
|
2018-07-29 20:25:22 +03:00
|
|
|
};
|
|
|
|
case GET_SHORT_URL_VISITS:
|
|
|
|
return {
|
|
|
|
visits: action.visits,
|
|
|
|
loading: false,
|
2018-08-26 00:39:27 +03:00
|
|
|
error: false,
|
2018-07-29 20:25:22 +03:00
|
|
|
};
|
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-18 12:14:25 +03:00
|
|
|
export const _getShortUrlVisits = (buildShlinkApiClient, shortCode, dates) => async (dispatch, getState) => {
|
2018-07-29 20:25:22 +03:00
|
|
|
dispatch({ type: GET_SHORT_URL_VISITS_START });
|
|
|
|
|
2018-12-18 12:14:25 +03:00
|
|
|
const { selectedServer } = getState();
|
|
|
|
const shlinkApiClient = buildShlinkApiClient(selectedServer);
|
|
|
|
|
2018-09-01 12:26:35 +03:00
|
|
|
try {
|
|
|
|
const visits = await shlinkApiClient.getShortUrlVisits(shortCode, dates);
|
|
|
|
|
|
|
|
dispatch({ visits, type: GET_SHORT_URL_VISITS });
|
|
|
|
} catch (e) {
|
|
|
|
dispatch({ type: GET_SHORT_URL_VISITS_ERROR });
|
|
|
|
}
|
2018-07-29 20:25:22 +03:00
|
|
|
};
|
2018-08-26 00:39:27 +03:00
|
|
|
|
2018-12-18 12:14:25 +03:00
|
|
|
export const getShortUrlVisits = curry(_getShortUrlVisits)(buildShlinkApiClient);
|