UNPKG

@atlaskit/editor-plugin-tasks-and-decisions

Version:

Tasks and decisions plugin for @atlaskit/editor-core

78 lines 2.7 kB
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');