Handle error when switching mode

This commit is contained in:
jos 2016-09-29 14:26:20 +02:00
parent 873d5f8ae2
commit 1bcc6382aa
4 changed files with 23 additions and 8 deletions

View File

@ -33,11 +33,10 @@ export default class TextMode extends Component {
h('div', {class: 'jsoneditor-vertical-menu-separator'}), h('div', {class: 'jsoneditor-vertical-menu-separator'}),
this.props.options.modes && h(ModeButton, { this.props.options.modes && h(ModeButton, {
open: this.state.modeMenuOpen,
modes: this.props.options.modes, modes: this.props.options.modes,
mode: this.props.mode, mode: this.props.mode,
onMode: this.props.onMode, onMode: this.props.onMode,
onClick: this.handleShowModeMenu onError: this.handleError
}) })
]), ]),
@ -92,7 +91,7 @@ export default class TextMode extends Component {
} }
/** @private */ /** @private */
handleError (err) { handleError = (err) => {
if (this.props.options && this.props.options.onError) { if (this.props.options && this.props.options.onError) {
this.props.options.onError(err) this.props.options.onError(err)
} }

View File

@ -101,7 +101,8 @@ export default class TreeMode extends Component {
this.props.options.modes && h(ModeButton, { this.props.options.modes && h(ModeButton, {
modes: this.props.options.modes, modes: this.props.options.modes,
mode: this.props.mode, mode: this.props.mode,
onMode: this.props.onMode onMode: this.props.onMode,
onError: this.handleError
}) })
]) ])
} }
@ -199,6 +200,16 @@ export default class TreeMode extends Component {
this.emitOnChange (actions, revert) this.emitOnChange (actions, revert)
} }
/** @private */
handleError = (err) => {
if (this.props.options && this.props.options.onError) {
this.props.options.onError(err)
}
else {
console.error(err)
}
}
/** /**
* Emit an onChange event when there is a listener for it. * Emit an onChange event when there is a listener for it.
* @param {JSONPatch} patch * @param {JSONPatch} patch

View File

@ -12,7 +12,7 @@ export default class ModeButton extends Component {
} }
/** /**
* @param {{modes: string[], mode: string, onMode: function}} props * @param {{modes: string[], mode: string, onMode: function, onError: function}} props
* @param state * @param state
* @return {*} * @return {*}
*/ */

View File

@ -3,7 +3,7 @@ import { toCapital } from '../utils/stringUtils'
export default class ModeMenu extends Component { export default class ModeMenu extends Component {
/** /**
* @param {{open, modes, mode, onMode}} props * @param {{open, modes, mode, onMode, onError}} props
* @param {Obect} state * @param {Obect} state
* @return {JSX.Element} * @return {JSX.Element}
*/ */
@ -15,9 +15,14 @@ export default class ModeMenu extends Component {
class: 'jsoneditor-menu-button jsoneditor-type-modes' + class: 'jsoneditor-menu-button jsoneditor-type-modes' +
((mode === props.mode) ? ' jsoneditor-selected' : ''), ((mode === props.mode) ? ' jsoneditor-selected' : ''),
onClick: () => { onClick: () => {
try {
props.onMode(mode) props.onMode(mode)
this.setState({ open: false }) this.setState({ open: false })
} }
catch (err) {
props.onError(err)
}
}
}, toCapital(mode)) }, toCapital(mode))
}) })