69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
import {
|
|
NEW_THROWN_ERR,
|
|
NEW_THROWN_ERR_BATCH,
|
|
NEW_SPEC_ERR,
|
|
NEW_AUTH_ERR,
|
|
CLEAR
|
|
} from "./actions"
|
|
|
|
import reject from "lodash/reject"
|
|
|
|
import Im, { fromJS, List } from "immutable"
|
|
|
|
import transformErrors from "./error-transformers/hook"
|
|
|
|
let DEFAULT_ERROR_STRUCTURE = {
|
|
// defaults
|
|
line: 0,
|
|
level: "error",
|
|
message: "Unknown error"
|
|
}
|
|
|
|
export default function(system) {
|
|
return {
|
|
[NEW_THROWN_ERR]: (state, { payload }) => {
|
|
let error = Object.assign(DEFAULT_ERROR_STRUCTURE, payload, {type: "thrown"})
|
|
return state
|
|
.update("errors", errors => (errors || List()).push( fromJS( error )) )
|
|
.update("errors", errors => transformErrors(errors, system.getSystem()))
|
|
},
|
|
|
|
[NEW_THROWN_ERR_BATCH]: (state, { payload }) => {
|
|
payload = payload.map(err => {
|
|
return fromJS(Object.assign(DEFAULT_ERROR_STRUCTURE, err, { type: "thrown" }))
|
|
})
|
|
return state
|
|
.update("errors", errors => (errors || List()).concat( fromJS( payload )) )
|
|
.update("errors", errors => transformErrors(errors, system.getSystem()))
|
|
},
|
|
|
|
[NEW_SPEC_ERR]: (state, { payload }) => {
|
|
let error = fromJS(payload)
|
|
error = error.set("type", "spec")
|
|
return state
|
|
.update("errors", errors => (errors || List()).push( fromJS(error)).sortBy(err => err.get("line")) )
|
|
.update("errors", errors => transformErrors(errors, system.getSystem()))
|
|
},
|
|
|
|
[NEW_AUTH_ERR]: (state, { payload }) => {
|
|
let error = fromJS(Object.assign({}, payload))
|
|
|
|
error = error.set("type", "auth")
|
|
return state
|
|
.update("errors", errors => (errors || List()).push( fromJS(error)) )
|
|
.update("errors", errors => transformErrors(errors, system.getSystem()))
|
|
},
|
|
|
|
[CLEAR]: (state, { payload }) => {
|
|
if(!payload) {
|
|
return
|
|
}
|
|
// TODO: Rework, to use immutable only, no need for lodash
|
|
let newErrors = Im.fromJS(reject((state.get("errors") || List()).toJS(), payload))
|
|
return state.merge({
|
|
errors: newErrors
|
|
})
|
|
}
|
|
}
|
|
}
|