import axios from 'axios'; import cookie from 'js-cookie'; import { ADD_URL, LIST_URLS, UPDATE_URL_LIST, DELETE_URL, SHORTENER_LOADING, TABLE_LOADING, SHORTENER_ERROR, } from './actionTypes'; const addUrl = payload => ({ type: ADD_URL, payload }); const listUrls = payload => ({ type: LIST_URLS, payload }); const updateUrlList = payload => ({ type: UPDATE_URL_LIST, payload }); const deleteUrl = payload => ({ type: DELETE_URL, payload }); const showTableLoading = () => ({ type: TABLE_LOADING }); export const setShortenerFormError = payload => ({ type: SHORTENER_ERROR, payload, }); export const showShortenerLoading = () => ({ type: SHORTENER_LOADING }); export const createShortUrl = params => async dispatch => { try { const { data } = await axios.post('/api/url/submit', params, { headers: { Authorization: cookie.get('token') }, }); dispatch(addUrl(data)); } catch ({ response }) { dispatch(setShortenerFormError(response.data.error)); } }; export const getUrlsList = params => async (dispatch, getState) => { if (params) { dispatch(updateUrlList(params)); } dispatch(showTableLoading()); const { url } = getState(); const { list, ...queryParams } = url; const query = Object.keys(queryParams).reduce( (string, item) => `${string + item}=${queryParams[item]}&`, '?' ); try { const { data } = await axios.get(`/api/url/geturls${query}`, { headers: { Authorization: cookie.get('token') }, }); dispatch(listUrls(data)); } catch (error) { // } }; export const deleteShortUrl = params => async dispatch => { dispatch(showTableLoading()); try { await axios.post('/api/url/deleteurl', params, { headers: { Authorization: cookie.get('token') }, }); dispatch(deleteUrl(params.id)); } catch ({ response }) { dispatch(setShortenerFormError(response.data.error)); } };