Files
socialhose-php/frontend/app/redux/utils/common.js
T
2022-12-09 08:36:26 -06:00

47 lines
1.4 KiB
JavaScript

import {createAction} from 'redux-actions'
import {addAlert} from '../modules/common/alerts'
export const tokenInject = (fn) =>
(dispatch, getState) =>
fn(dispatch, getState, getState().getIn(['common', 'auth', 'token']))
export const thunkAction = (actionName, actionMethod, emitPending = false, customPendingAction = false) => {
const fulfilledAction = createAction(`${actionName} fulfilled`)
const pendingAction = customPendingAction ||
createAction(`${actionName} pending`, (isPending, success) => ({isPending, success}))
return (...args) => {
return tokenInject((dispatch, getState, token) => {
const fulfilled = (...fArgs) => {
dispatch(fulfilledAction(...fArgs))
emitPending && dispatch(pendingAction(false, true))
}
const onError = (errors) => {
dispatch(addAlert(errors))
emitPending && dispatch(pendingAction(false, false))
}
emitPending && dispatch(pendingAction(true))
let result
try {
result = actionMethod(...args, {dispatch, getState, token, fulfilled})
} catch (e) {
console.error('Error in thunkAction()')
console.error(e)
throw e
}
if (result instanceof Promise) {
result.catch(onError)
}
return result
})
}
}
export const routerSelectLocationState = (state) => {
return state.get('routing').toJS()
}