UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

87 lines (85 loc) 2.42 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; /* eslint-disable @repo/internal/react/no-class-components */ import { PureComponent } from 'react'; import { fg } from '@atlaskit/platform-feature-flags'; // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any export class WithProviders extends PureComponent { constructor(props) { super(props); _defineProperty(this, "mounted", false); // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any _defineProperty(this, "handleProviderIfMounted", (name, provider) => { if (!this.mounted) { return; } this.handleProvider(name, provider); }); // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any _defineProperty(this, "handleProvider", (name, provider) => { this.setState(({ providers }) => { return { providers: { ...providers, [name]: provider } }; }); }); this.mounted = false; // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any const _providers = {}; this.props.providers.forEach(name => { if (fg('platform_editor_react18_phase2_v2')) { const providerPromise = props.providerFactory.subscribe(name, this.handleProviderIfMounted); _providers[name] = providerPromise; } else { _providers[name] = undefined; } }); this.state = { providers: _providers }; } componentDidMount() { this.mounted = true; } // Ignored via go/ees005 // eslint-disable-next-line react/no-unsafe UNSAFE_componentWillMount() { if (!fg('platform_editor_react18_phase2_v2')) { const { providers, providerFactory } = this.props; providers.forEach(name => { providerFactory.subscribe(name, this.handleProvider); }); } } componentWillUnmount() { const { providers, providerFactory } = this.props; providers.forEach(name => { providerFactory.unsubscribe(name, this.handleProvider); }); } render() { const { state, props } = this; const { renderNode } = props; return renderNode(state.providers); } } _defineProperty(WithProviders, "displayName", 'WithProviders');