@atlaskit/editor-plugin-paste-options-toolbar
Version:
Paste options toolbar for @atlaskit/editor-core
151 lines • 5.25 kB
JavaScript
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);
}
};