UNPKG

@atlaskit/editor-plugin-code-block

Version:

Code block plugin for @atlaskit/editor-core

62 lines 2.64 kB
import React, { useCallback } from 'react'; import { useIntl } from 'react-intl'; import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks'; import { codeBlockButtonMessages } from '@atlaskit/editor-common/messages'; import AkFlag, { FlagGroup } from '@atlaskit/flag'; import StatusErrorIcon from '@atlaskit/icon/core/status-error'; import { ACTIONS } from '../pm-plugins/actions'; import { pluginKey } from '../pm-plugins/plugin-key'; const FormatCodeErrorFlagItem = ({ formatCodeError }) => { const { formatMessage } = useIntl(); return /*#__PURE__*/React.createElement(AkFlag, { description: formatMessage(formatCodeError.languageSource === 'auto-detected' ? codeBlockButtonMessages.formatCodeFailedAutoDetectedDescription : codeBlockButtonMessages.formatCodeFailedDescription), icon: /*#__PURE__*/React.createElement(StatusErrorIcon, { color: "var(--ds-icon-danger, #C9372C)", label: "" }), id: formatCodeError.localId, title: formatMessage(codeBlockButtonMessages.formatCodeFailed) }); }; export const FormatCodeErrorFlag = ({ api }) => { const { formatCodeErrors } = useSharedPluginStateWithSelector(api, ['codeBlock'], states => { var _states$codeBlockStat, _states$codeBlockStat2; return { formatCodeErrors: (_states$codeBlockStat = (_states$codeBlockStat2 = states.codeBlockState) === null || _states$codeBlockStat2 === void 0 ? void 0 : _states$codeBlockStat2.formatCodeErrors) !== null && _states$codeBlockStat !== void 0 ? _states$codeBlockStat : {} }; }); const onDismissed = useCallback(localId => { var _api$core, _api$core2; api === null || api === void 0 ? void 0 : (_api$core = api.core) === null || _api$core === void 0 ? void 0 : _api$core.actions.execute(({ tr }) => { tr.setMeta(pluginKey, { type: ACTIONS.CLEAR_FORMAT_CODE_ERROR, data: { localId } }); return tr; }); api === null || api === void 0 ? void 0 : (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions.focus(); }, [api]); const onFlagGroupDismissed = useCallback(localId => onDismissed(String(localId)), [onDismissed]); const activeFormatCodeErrors = Object.values(formatCodeErrors); if (activeFormatCodeErrors.length === 0) { return null; } return /*#__PURE__*/React.createElement(FlagGroup, { onDismissed: onFlagGroupDismissed }, activeFormatCodeErrors.map(formatCodeError => /*#__PURE__*/React.createElement(FormatCodeErrorFlagItem, { formatCodeError: formatCodeError, key: formatCodeError.localId }))); };