import { actions } from './redux-ajax.constants'; import { AjaxSubmitRequestData, ReduxAjaxAction, ReduxAjaxParams } from './redux-ajax.type'; /** * Set request parameters. * * @param {object} data - Request params. * @param {string} data.requestId - Request ID. * @param {string} [data.method] - HTTP method. * @param {string} [data.url] - URL to call. * @param {object} [data.headers] - Request headers. * @returns {Action} Action. * * @example * store.dispatch(setRequestParams({ * requestId: 'someId', * method: 'PUT', * url: '/some/endpoint/accepting/ajax/request', * headers: {Authorization: 'Bearer some-token'} * })); */ export const setRequestParams = (data: ReduxAjaxParams & { requestId: string }) => ({ type: actions.AJAX_REQUEST_SET_REQUEST_PARAMS, data }); /** * Set status to failure and fill error. * * @param {object} data - Failure data. * @returns {Action} Action. * @example * store.dispatch(submitFailure({requestId: 'someId', error: data.response.error})); */ export const submitFailure = (data: { requestId: string; error: object }) => ({ type: actions.AJAX_REQUEST_FAILURE, data }); /** * Set status to success and fill response. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @param {object} data.response - Request response to put in the store. * @returns {Action} Action. * @example * store.dispatch(submitSuccess({requestId: 'someId', response: data.response})); */ export const submitSuccess = ({ requestId, response = {} }: { requestId: string; response?: object }) => ({ type: actions.AJAX_REQUEST_SUCCESS, data: { requestId, response } }); /** * Announce that the request is handled. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @returns {Action} Action. * @example * store.dispatch(submitComplete({requestId: 'someId'})); */ export const submitComplete = ({ requestId }: { requestId: string }) => ({ type: actions.AJAX_REQUEST_COMPLETE, data: { requestId } }); /** * Set status to pending. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @returns {Action} Action. * @example * store.dispatch(submitPending({requestId: 'someId'})); */ export const submitPending = (data: { requestId: string }) => ({ type: actions.AJAX_REQUEST_PENDING, data }); /** * Reset status and response/error. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @returns {Action} Action. * @example * store.dispatch(submitReset({requestId: 'someId'})); */ export const submitReset = (data: { requestId: string }) => ({ type: actions.AJAX_REQUEST_RESET, data }); /** * Reset status and response/error. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @returns {Action} Action. * @example * store.dispatch(submitReset({requestId: 'someId'})); */ export const submitResponseReset = (data: { requestId: string }) => ({ type: actions.AJAX_REQUEST_RESPONSE_RESET, data }); /** * Submit a request. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @param {boolean} [data.isCached] - Do not re-fetch a request with this requestID if we have a response. * @param {Function} [data.transformData] - Transform the body before being sent. * @param {object} [data.requestContent] - Request parameters. * @returns {Action} Action. * @example * store.dispatch(submitRequest({ * requestId: 'someId', * requestContent: {url: '/test', method: 'get'}, * transformData: (body) => JSON.stringify(body) * })); */ export const submitRequest = ({ transformData, ...params }: { requestId: string } & AjaxSubmitRequestData): ReduxAjaxAction => ({ type: actions.AJAX_REQUEST_INTENTED, data: { transformData, ...params } }); /** * Abort a request. * * @param {object} data - Request body data. * @param {string} data.requestId - Request ID. * @returns {Action} Action. * @example * store.dispatch(abortRequest({ * requestId: 'someId', * })); */ export const abortRequest = (data: { requestId: string }) => ({ type: actions.AJAX_REQUEST_ABORT, data });