-
Notifications
You must be signed in to change notification settings - Fork 0
/
emitActions.js
33 lines (27 loc) · 1.28 KB
/
emitActions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import createAction from '@f/create-action'
import { put } from 'redux-saga/effects'
import generateDefaultCallName from './generateDefaultCallName'
import generateWrappedFunctionName from './generateWrappedFunctionName'
import createBooleanCallHandler from './createBooleanCallHandler'
function hasDefaultToString (fn) {
return typeof fn === 'function' && fn.toString().indexOf('function') !== -1
}
export function toActionPutter (actionCreator) {
function * actionPutter (value) {
yield put(actionCreator(value))
}
const overrideWrapped = hasDefaultToString(actionCreator) ? false : `${actionCreator}`
actionPutter.displayName = generateWrappedFunctionName(actionPutter, actionCreator, overrideWrapped)
return actionPutter
}
export function createEmitActions (successAction, errorAction) {
function emitActions (fn) {
successAction = successAction || createAction(`${generateDefaultCallName(fn)}_SUCCESS`)
errorAction = errorAction || createAction(`${generateDefaultCallName(fn)}_ERROR`)
const booleanCallHandler = createBooleanCallHandler(toActionPutter(successAction), toActionPutter(errorAction))
return booleanCallHandler(fn)
}
return emitActions
}
export const emitActions = createEmitActions(/* default fallback when we know fn */)
export default emitActions