feat(ux): enhance media-type switching experience in RequestBodyEditor (#6837)
* feat(ux): enhance media-type switching experience in RequestBodyEditor 1. When canceling the try-out mode the request body will be reset to its initial state. 2. When the user switches the media-type in the try-out mode, the experience is as follows: - If the user did edit the request body the body wont be touched and only media type is updated. This is to ensure that user content is NEVER accidentally overwritten with a default value. - If the user did not edit the request body it is safe to be replaced by the default value of the target media-type. Multiple example needed some care in order to allow the retain example value to function properly * fix(test): workaround cypress issue that can't be reproduced manually * test: added new feature to ensure enhanced user editing flow Signed-off-by: mathis-m <mathis.michel@outlook.de>
This commit is contained in:
@@ -75,30 +75,29 @@ export default class Parameters extends Component {
|
||||
}
|
||||
|
||||
onChangeMediaType = ({ value, pathMethod }) => {
|
||||
let { specSelectors, specActions, oas3Selectors, oas3Actions } = this.props
|
||||
let targetMediaType = value
|
||||
let currentMediaType = oas3Selectors.requestContentType(...pathMethod)
|
||||
let schemaPropertiesMatch = specSelectors.isMediaTypeSchemaPropertiesEqual(pathMethod, currentMediaType, targetMediaType)
|
||||
if (!schemaPropertiesMatch) {
|
||||
oas3Actions.clearRequestBodyValue({ pathMethod })
|
||||
let { specActions, oas3Selectors, oas3Actions } = this.props
|
||||
const userHasEditedBody = oas3Selectors.hasUserEditedBody(...pathMethod)
|
||||
const shouldRetainRequestBodyValue = oas3Selectors.shouldRetainRequestBodyValue(...pathMethod)
|
||||
oas3Actions.setRequestContentType({ value, pathMethod })
|
||||
oas3Actions.initRequestBodyValidateError({ pathMethod })
|
||||
if (!userHasEditedBody) {
|
||||
if(!shouldRetainRequestBodyValue) {
|
||||
oas3Actions.setRequestBodyValue({ value: undefined, pathMethod })
|
||||
}
|
||||
specActions.clearResponse(...pathMethod)
|
||||
specActions.clearRequest(...pathMethod)
|
||||
specActions.clearValidateParams(pathMethod)
|
||||
}
|
||||
oas3Actions.setRequestContentType({ value, pathMethod })
|
||||
oas3Actions.initRequestBodyValidateError({ pathMethod })
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
let {
|
||||
onTryoutClick,
|
||||
onCancelClick,
|
||||
parameters,
|
||||
allowTryItOut,
|
||||
tryItOutEnabled,
|
||||
specPath,
|
||||
|
||||
fn,
|
||||
getComponent,
|
||||
getConfigs,
|
||||
@@ -131,6 +130,7 @@ export default class Parameters extends Component {
|
||||
}, {}))
|
||||
.reduce((acc, x) => acc.concat(x), [])
|
||||
|
||||
const retainRequestBodyValueFlagForOperation = (f) => oas3Actions.setRetainRequestBodyValueFlag({ value: f, pathMethod })
|
||||
return (
|
||||
<div className="opblock-section">
|
||||
<div className="opblock-section-header">
|
||||
@@ -155,7 +155,13 @@ export default class Parameters extends Component {
|
||||
</div>
|
||||
)}
|
||||
{allowTryItOut ? (
|
||||
<TryItOutButton enabled={tryItOutEnabled} onCancelClick={onCancelClick} onTryoutClick={onTryoutClick} />
|
||||
<TryItOutButton
|
||||
isOAS3={specSelectors.isOAS3()}
|
||||
hasUserEditedBody={oas3Selectors.hasUserEditedBody(...pathMethod)}
|
||||
enabled={tryItOutEnabled}
|
||||
onCancelClick={this.props.onCancelClick}
|
||||
onTryoutClick={onTryoutClick}
|
||||
onResetClick={() => oas3Actions.setRequestBodyValue({ value: undefined, pathMethod })}/>
|
||||
) : null}
|
||||
</div>
|
||||
{this.state.parametersVisible ? <div className="parameters-container">
|
||||
@@ -219,6 +225,8 @@ export default class Parameters extends Component {
|
||||
</div>
|
||||
<div className="opblock-description-wrapper">
|
||||
<RequestBody
|
||||
setRetainRequestBodyValueFlag={retainRequestBodyValueFlagForOperation}
|
||||
userHasEditedBody={oas3Selectors.hasUserEditedBody(...pathMethod)}
|
||||
specPath={specPath.slice(0, -1).push("requestBody")}
|
||||
requestBody={requestBody}
|
||||
requestBodyValue={oas3Selectors.requestBodyValue(...pathMethod)}
|
||||
|
||||
Reference in New Issue
Block a user