package/src/actions/api.js (122 lines of code) (raw):
import { createAction } from 'redux-actions'
import { rotationAnglesSelector } from '@/selectors/canvas'
import { pageImageUrlSelector } from '@/selectors/document'
import { markupSelector } from '@/selectors/markup'
import { fieldsSelector } from '@/selectors/model'
import { primaryLanguageSelector } from '@/selectors/ocr'
import { getApi } from '@/services/api'
const FEATURE_NAME = 'API'
const requestAttempt = createAction(
`${FEATURE_NAME}/REQUEST_ATTEMPT`
)
const requestSuccess = createAction(
`${FEATURE_NAME}/REQUEST_SUCCESS`
)
const resetDefault = createAction(
`${FEATURE_NAME}/RESET_DEFAULT`
)
const requestFailure = createAction(
`${FEATURE_NAME}/REQUEST_FAILURE`,
(requestId, error) => ({
requestId,
error
})
)
export const createRequestAction = (requestId, actionCreator) => {
const requestActionCreator = (...args) => async (dispatch, getState) => {
try {
dispatch(requestAttempt(requestId))
const result = await actionCreator(...args)(dispatch, getState)
dispatch(requestSuccess(requestId))
return result
} catch (error) {
dispatch(requestFailure(requestId, error.message))
throw error
}
}
requestActionCreator.toString = () => requestId
return requestActionCreator
}
const save = createRequestAction(
'save',
() => (dispatch, getState) => {
const state = getState()
const markup = markupSelector(state)
const rotationAngles = rotationAnglesSelector(state)
const language = primaryLanguageSelector(state)
return getApi().save(markup, rotationAngles, language)
}
)
const saveMarkup = createRequestAction(
'saveMarkup',
() => (dispatch, getState) => {
const state = getState()
const markup = markupSelector(state)
const rotationAngles = rotationAnglesSelector(state)
const language = primaryLanguageSelector(state)
const fields = fieldsSelector(state)
return getApi().saveMarkup(markup, rotationAngles, language, fields)
}
)
const ocrText = createRequestAction(
'ocrText',
(engine, coordinates) => (dispatch, getState) => {
const state = getState()
const pageImageUrl = pageImageUrlSelector(state)
const language = primaryLanguageSelector(state)
return getApi().ocrText(
engine,
pageImageUrl,
coordinates,
language
)
}
)
const omrArea = createRequestAction(
'omrArea',
(coordinates) => (dispatch, getState) => {
const state = getState()
const pageImageUrl = pageImageUrlSelector(state)
return getApi().omrArea(
pageImageUrl,
coordinates
)
}
)
const detectTables = createRequestAction(
'detectTables',
(selectedAreaCoords) => (dispatch, getState) => {
const state = getState()
const pageImageUrl = pageImageUrlSelector(state)
return getApi().detectTables(
pageImageUrl,
selectedAreaCoords
)
}
)
const ocrTable = createRequestAction(
'ocrTable',
(engine, table) => (dispatch, getState) => {
const state = getState()
const pageImageUrl = pageImageUrlSelector(state)
const language = primaryLanguageSelector(state)
return getApi().ocrTable(
engine,
pageImageUrl,
table,
language
)
}
)
export {
detectTables,
ocrTable,
ocrText,
omrArea,
resetDefault,
requestAttempt,
requestSuccess,
requestFailure,
save,
saveMarkup
}