@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
59 lines • 1.87 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
/* eslint-disable @repo/internal/react/no-class-components */
import React from 'react';
import { isSafeUrl } from '@atlaskit/adf-schema';
import { LazyLoadedDatasourceRenderFailedAnalyticsWrapper } from '@atlaskit/link-datasource';
import { setSelectedCardAppearance } from '../pm-plugins/doc';
export class DatasourceErrorBoundary extends React.Component {
constructor(...args) {
super(...args);
_defineProperty(this, "state", {
isError: false,
error: null
});
}
static getDerivedStateFromError(error) {
return {
isError: true,
error
};
}
componentDidCatch(error) {
if (this.props.handleError) {
this.props.handleError();
}
// prevent re-render children with error
if (this.state.isError) {
this.setState({
isError: true,
error
});
}
}
render() {
const {
url,
unsupportedComponent: UnsupportedComponent,
view,
datasourceModalType,
datasourceId
} = this.props;
if (this.state.isError) {
if (url && isSafeUrl(url)) {
return /*#__PURE__*/React.createElement(LazyLoadedDatasourceRenderFailedAnalyticsWrapper, {
datasourceId: datasourceId,
error: this.state.error
}, setSelectedCardAppearance('inline', undefined)(view.state, view.dispatch));
} else {
const unsupportedComponent = UnsupportedComponent ? /*#__PURE__*/React.createElement(UnsupportedComponent, null) : null;
return /*#__PURE__*/React.createElement(LazyLoadedDatasourceRenderFailedAnalyticsWrapper, {
datasourceModalType: datasourceModalType,
datasourceId: datasourceId,
error: this.state.error
}, unsupportedComponent);
}
} else {
return this.props.children;
}
}
}