From ee659f97c4af963c337ee783dc972e7f17c4c827 Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Tue, 23 Jan 2018 00:03:31 -0800 Subject: [PATCH] error reporting for craft operations --- web/app/cad/craft/craftPlugin.js | 14 +---- web/app/cad/dom/components/wizard/Wizard.jsx | 56 ++++++++++++------- web/app/cad/dom/components/wizard/Wizard.less | 7 +++ .../dom/components/wizard/WizardManager.jsx | 2 +- 4 files changed, 47 insertions(+), 32 deletions(-) create mode 100644 web/app/cad/dom/components/wizard/Wizard.less diff --git a/web/app/cad/craft/craftPlugin.js b/web/app/cad/craft/craftPlugin.js index d4122e24..30bdd091 100644 --- a/web/app/cad/craft/craftPlugin.js +++ b/web/app/cad/craft/craftPlugin.js @@ -41,23 +41,13 @@ export function activate({bus, services}) { let op = services.operation.registry[request.type]; if (!op) return `unknown operation ${request.type}`; - let result; - try { - result = op.run(services.cadRegistry, request.params); - } catch (err) { - return err; - } + let result = op.run(services.cadRegistry, request.params); services.cadRegistry.update(result.outdated, result.created); - return undefined; } function modify(request) { - let errors = modifyInternal(request); - if (errors !== undefined) { - // return errors; - throw 'not implemented, should reported by a wizard'; - } + modifyInternal(request); bus.updateState(TOKENS.MODIFICATIONS, ({history, pointer}) => { diff --git a/web/app/cad/dom/components/wizard/Wizard.jsx b/web/app/cad/dom/components/wizard/Wizard.jsx index ce6dd2b6..340c8934 100644 --- a/web/app/cad/dom/components/wizard/Wizard.jsx +++ b/web/app/cad/dom/components/wizard/Wizard.jsx @@ -11,11 +11,16 @@ import Button from 'ui/components/controls/Button'; import ButtonGroup from 'ui/components/controls/ButtonGroup'; import FaceSelectionControl from './FaceSelectionControl'; import {CURRENT_SELECTION} from "../../../craft/wizard/wizardPlugin"; +import {isTCADError} from "../../../../utils/errors"; + +import ls from './Wizard.less'; + export default class Wizard extends React.Component { constructor({initialState, metadata, previewer}, {services: {selection}}) { super(); + this.state = {hasError: false}; this.params = {}; metadata.forEach(([name, type, v]) => { @@ -31,19 +36,9 @@ export default class Wizard extends React.Component { this.preview = previewer(this.params); } - shouldComponentUpdate() { - // all controls are unmanaged and they should keep their state - // if the wizard manager gets updated when a new wizard appears - return false; - } - render() { - let {left, title, metadata, onOK, onCancel} = this.props; - let onClose = () => { - this.onClose(); - onCancel(); - }; - return + let {left, title, metadata} = this.props; + return {metadata.map(([name, type, , params], index) => { return @@ -52,19 +47,42 @@ export default class Wizard extends React.Component { } )} -