@atlaskit/editor-plugin-tasks-and-decisions
Version:
Tasks and decisions plugin for @atlaskit/editor-core
78 lines • 2.7 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import React, { Component } from 'react';
import { FabricElementsAnalyticsContext } from '@atlaskit/analytics-namespaced-context';
import { ResourcedTaskItem } from '@atlaskit/task-decision';
// eslint-disable-next-line @repo/internal/react/no-class-components
export default class TaskItemWithProviders extends Component {
constructor(...args) {
super(...args);
_defineProperty(this, "state", {
resolvedContextProvider: undefined
});
// Storing the mounted state is an anti-pattern, however the asynchronous state
// updates via `updateContextIdentifierProvider` means we may be dismounted before
// it receives a response.
// Since we can't cancel the Promise we store the mounted state to avoid state
// updates when no longer suitable.
_defineProperty(this, "mounted", false);
}
componentDidMount() {
this.mounted = true;
this.updateContextIdentifierProvider(this.props);
}
componentDidUpdate(prevProps) {
if (this.props.contextIdentifierProvider !== prevProps.contextIdentifierProvider) {
this.updateContextIdentifierProvider(this.props);
}
}
componentWillUnmount() {
this.mounted = false;
}
async updateContextIdentifierProvider(props) {
if (props.contextIdentifierProvider) {
try {
const resolvedContextProvider = await props.contextIdentifierProvider;
if (this.mounted) {
this.setState({
resolvedContextProvider
});
}
} catch (err) {
// eslint-disable-line no-unused-vars
if (this.mounted) {
this.setState({
resolvedContextProvider: undefined
});
}
}
} else {
this.setState({
resolvedContextProvider: undefined
});
}
}
render() {
const {
contextIdentifierProvider: _contextIdentifierProvider,
...otherProps
} = this.props;
const {
objectId
} = this.state.resolvedContextProvider || {};
const userContext = objectId ? 'edit' : 'new';
return /*#__PURE__*/React.createElement(FabricElementsAnalyticsContext
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
, {
data: {
userContext
}
}, /*#__PURE__*/React.createElement(ResourcedTaskItem
// Ignored via go/ees005
// eslint-disable-next-line react/jsx-props-no-spreading
, _extends({}, otherProps, {
objectAri: objectId
})));
}
}
_defineProperty(TaskItemWithProviders, "displayName", 'TaskItemWithProviders');