in with the new
This commit is contained in:
68
src/core/plugins/err/reducers.js
Normal file
68
src/core/plugins/err/reducers.js
Normal file
@@ -0,0 +1,68 @@
|
||||
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
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user