feat: lazy resolver (#4249)

* default to empty `ImmutableMap` when grabbing op metadata
* pass `errors` into JsonSchema components
* Account for Immutable data structure in JavaScriptonSchema...
    ...and create empty Lists instead of Maps by default.
* Pass ImmutableList through to JsonSchema child components
* Add lazy resolving spec state extensions
* TEMPORARY: disable conventional resolved spec
* WIP
* Use resolveSubtree in Operation display
* Freebie: short-circuit Markdown component if it is given plaintext
* NEW DEFAULT BEHAVIOR: `defaultModelsExpandDepth: 1` does not expand individual models
* Render faked Model expander to trigger resolution
* Baseline support for Editor lifecycles
* Display operation summaries before the operation is resolved
* Test migrations
* WIP
* Swagger2 TIO Body params
* a bit of cleanup
* Debounce string param inputs
* Reach into unresolved operation for deprecated flag, if available
* Fire subtree request outside of render
* Remove debugging flags
* Fix logical errors in spec statePlugins
* TODOs become TODONEs!
* Migrate deeplinking feature to non-resolved spec action
* ESLint fixes
This commit is contained in:
kyle
2018-02-23 01:12:53 -08:00
committed by GitHub
parent 54ed39d69f
commit ecf688171f
23 changed files with 359 additions and 97 deletions

View File

@@ -4,12 +4,11 @@ import {
NEW_SPEC_ERR,
NEW_SPEC_ERR_BATCH,
NEW_AUTH_ERR,
CLEAR
CLEAR,
CLEAR_BY,
} from "./actions"
import reject from "lodash/reject"
import Im, { fromJS, List } from "immutable"
import { fromJS, List } from "immutable"
import transformErrors from "./error-transformers/hook"
@@ -65,11 +64,34 @@ export default function(system) {
},
[CLEAR]: (state, { payload }) => {
if(!payload) {
return
if(!payload || !state.get("errors")) {
return state
}
// TODO: Rework, to use immutable only, no need for lodash
let newErrors = Im.fromJS(reject((state.get("errors") || List()).toJS(), payload))
let newErrors = state.get("errors")
.filter(err => {
return err.keySeq().every(k => {
const errValue = err.get(k)
const filterValue = payload[k]
if(!filterValue) return true
return errValue !== filterValue
})
})
return state.merge({
errors: newErrors
})
},
[CLEAR_BY]: (state, { payload }) => {
if(!payload || typeof payload !== "function") {
return state
}
let newErrors = state.get("errors")
.filter(err => {
return payload(err)
})
return state.merge({
errors: newErrors
})