import LinkIcon from 'ak-icon/glyph/editor/link'; import * as React from 'react'; import { PureComponent } from 'react'; import { analyticsDecorator as analytics } from '../../analytics'; import { HyperlinkState } from '../../plugins/hyperlink'; import Panel from '../Panel'; import TextInput from '../PanelTextInput'; import ToolbarButton from '../ToolbarButton'; import * as styles from './styles'; export interface Props { pluginState: HyperlinkState; } export interface State { active?: boolean; adding?: boolean; disabled?: boolean; } export default class ToolbarHyperlink extends PureComponent { state: State = {}; componentDidMount() { this.props.pluginState.subscribe(this.handlePluginStateChange); } componentWillUmount() { this.props.pluginState.unsubscribe(this.handlePluginStateChange); } render() { const { active, adding, disabled } = this.state; return ( } /> {!adding ? null :
}
); } private openLinkPanel = () => { this.setState({ adding: true }); } private closeLinkPanel = () => { this.setState({ adding: false }); } private handlePluginStateChange = (pluginState: HyperlinkState) => { this.setState({ active: pluginState.active, disabled: !pluginState.canAddLink }); } @analytics('atlassian.editor.format.hyperlink.button') private handleSubmit = (value: string) => { this.props.pluginState.addLink({ href: value }); this.closeLinkPanel(); } }