Seems that hierarchical error handling works..
TreeTable component seems to work too. Edit is half-way through. Create / delete are TBD.
This commit is contained in:
parent
79ea9e1897
commit
5e4c86f626
24 changed files with 9967 additions and 261 deletions
67
client/src/lib/error-handling.js
Normal file
67
client/src/lib/error-handling.js
Normal file
|
@ -0,0 +1,67 @@
|
|||
'use strict';
|
||||
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
function withErrorHandling(target) {
|
||||
const inst = target.prototype;
|
||||
|
||||
const contextTypes = target.contextTypes || {};
|
||||
contextTypes.parentErrorHandler = PropTypes.object;
|
||||
target.contextTypes = contextTypes;
|
||||
|
||||
const childContextTypes = target.childContextTypes || {};
|
||||
childContextTypes.parentErrorHandler = PropTypes.object;
|
||||
target.childContextTypes = childContextTypes;
|
||||
|
||||
const existingGetChildContext = inst.getChildContext;
|
||||
if (existingGetChildContext) {
|
||||
inst.getChildContext = function() {
|
||||
const childContext = (this::existingGetChildContext)();
|
||||
childContext.parentErrorHandler = this;
|
||||
return childContext;
|
||||
}
|
||||
} else {
|
||||
inst.getChildContext = function() {
|
||||
return {
|
||||
parentErrorHandler: this
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function handleError(that, error) {
|
||||
let errorHandled;
|
||||
if (that.errorHandler) {
|
||||
errorHandled = that.errorHandler(error);
|
||||
}
|
||||
|
||||
if (!errorHandled && that.context.parentErrorHandler) {
|
||||
errorHandled = handleError(that.context.parentErrorHandler, error);
|
||||
}
|
||||
|
||||
if (!errorHandled) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
function withAsyncErrorHandler(target, name, descriptor) {
|
||||
let fn = descriptor.value;
|
||||
|
||||
descriptor.value = async function () {
|
||||
try {
|
||||
await fn.apply(this, arguments)
|
||||
} catch (error) {
|
||||
handleError(this, error);
|
||||
}
|
||||
};
|
||||
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
|
||||
export {
|
||||
withErrorHandling,
|
||||
withAsyncErrorHandler
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue