UNPKG

@atlaskit/editor-plugin-paste-options-toolbar

Version:

Paste options toolbar for @atlaskit/editor-core

151 lines 5.25 kB
import { ACTION, ACTION_SUBJECT, EVENT_TYPE, INPUT_METHOD, PasteContents, PasteTypes } from '@atlaskit/editor-common/analytics'; import { withAnalytics } from '@atlaskit/editor-common/editor-analytics'; import { PastePluginActionTypes as ActionTypes } from '../editor-actions/actions'; import { createCommand } from '../pm-plugins/plugin-factory'; import { formatMarkdown, formatPlainText, formatRichText } from '../pm-plugins/util/format-handlers'; import { pasteOptionsPluginKey, ToolbarDropdownOption } from '../types/types'; export const showToolbar = (lastContentPasted, selectedOption, showLegacyOptions = true, pasteAncestorNodeNames = []) => { const commandAction = _editorState => { var _lastContentPasted$te; return { type: ActionTypes.SHOW_PASTE_OPTIONS, data: { selectedOption, plaintext: (_lastContentPasted$te = lastContentPasted.text) !== null && _lastContentPasted$te !== void 0 ? _lastContentPasted$te : '', isPlainText: lastContentPasted.isPlainText, richTextSlice: lastContentPasted.pastedSlice, pasteStartPos: lastContentPasted.pasteStartPos, pasteEndPos: lastContentPasted.pasteEndPos, showLegacyOptions, pasteAncestorNodeNames } }; }; return createCommand(commandAction); }; export const changeToPlainText = () => { const plaintextTransformer = (tr, state) => { const pluginState = pasteOptionsPluginKey.getState(state); if (pluginState.selectedOption === ToolbarDropdownOption.PlainText) { return tr; } return formatPlainText(tr, pluginState); }; const commandAction = _editorState => { return { type: ActionTypes.CHANGE_FORMAT, data: { selectedOption: ToolbarDropdownOption.PlainText } }; }; return createCommand(commandAction, plaintextTransformer); }; export const changeToPlainTextWithAnalytics = (editorAnalyticsAPI, sliceSize, invokedFrom) => () => { return withAnalytics(editorAnalyticsAPI, { action: ACTION.PASTED, actionSubject: ACTION_SUBJECT.DOCUMENT, eventType: EVENT_TYPE.TRACK, attributes: { inputMethod: INPUT_METHOD.TOOLBAR, type: PasteTypes.plain, content: PasteContents.text, pasteSize: sliceSize, invokedFrom } })(changeToPlainText()); }; export const dropdownClickHandler = () => { return highlightContent(); }; export const changeToRichText = () => { const transformer = (tr, state) => { const pluginState = pasteOptionsPluginKey.getState(state); if (pluginState.selectedOption === ToolbarDropdownOption.RichText) { return tr; } return formatRichText(tr, pluginState); }; const commandAction = _editorState => { return { type: ActionTypes.CHANGE_FORMAT, data: { selectedOption: ToolbarDropdownOption.RichText } }; }; return createCommand(commandAction, transformer); }; export const changeToRichTextWithAnalytics = (editorAnalyticsAPI, invokedFrom) => () => { const payloadCallback = state => { var _pastePluginState$ric; const pastePluginState = pasteOptionsPluginKey.getState(state); return { action: ACTION.PASTED, actionSubject: ACTION_SUBJECT.DOCUMENT, eventType: EVENT_TYPE.TRACK, attributes: { inputMethod: INPUT_METHOD.TOOLBAR, type: PasteTypes.richText, content: PasteContents.text, pasteSize: ((_pastePluginState$ric = pastePluginState.richTextSlice) === null || _pastePluginState$ric === void 0 ? void 0 : _pastePluginState$ric.size) || 0, invokedFrom } }; }; return withAnalytics(editorAnalyticsAPI, payloadCallback)(changeToRichText()); }; export const changeToMarkDown = () => { const markdownTransformer = (tr, state) => { const pluginState = pasteOptionsPluginKey.getState(state); if (pluginState.selectedOption === ToolbarDropdownOption.Markdown) { return tr; } return formatMarkdown(tr, pluginState); }; const commandAction = _editorState => { return { type: ActionTypes.CHANGE_FORMAT, data: { selectedOption: ToolbarDropdownOption.Markdown } }; }; return createCommand(commandAction, markdownTransformer); }; export const changeToMarkdownWithAnalytics = (editorAnalyticsAPI, sliceSize, invokedFrom) => () => { return withAnalytics(editorAnalyticsAPI, { action: ACTION.PASTED, actionSubject: ACTION_SUBJECT.DOCUMENT, eventType: EVENT_TYPE.TRACK, attributes: { inputMethod: INPUT_METHOD.TOOLBAR, type: PasteTypes.markdown, content: PasteContents.text, pasteSize: sliceSize, invokedFrom } })(changeToMarkDown()); }; export const highlightContent = () => { const commandAction = _editorState => { return { type: ActionTypes.HIGHLIGHT_CONTENT }; }; return createCommand(commandAction); }; export const hideToolbar = () => { const commandAction = _editorState => { return { type: ActionTypes.HIDE_PASTE_OPTIONS }; }; return createCommand(commandAction); }; export const checkAndHideToolbar = view => { const pluginState = pasteOptionsPluginKey.getState(view.state); if (pluginState.showToolbar) { hideToolbar()(view.state, view.dispatch); } };