import React from 'react'; import { keymap } from 'prosemirror-keymap'; import { EditorState, Plugin, Transaction } from 'prosemirror-state'; import { EditorPlugin } from '../../types'; import * as keymaps from '../../keymaps'; import { openHelp, tooltip } from '../../keymaps'; import WithPluginState from '../../ui/WithPluginState'; import { HelpDialogLoader } from './ui/HelpDialogLoader'; import { pluginKey as quickInsertPluginKey } from '../quick-insert'; import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, addAnalytics, EVENT_TYPE, INPUT_METHOD, } from '../../plugins/analytics'; import QuestionCircleIcon from '@atlaskit/icon/glyph/question-circle'; import { Providers } from '@atlaskit/editor-common/provider-factory'; import { messages } from '../insert-block/ui/ToolbarInsertBlock/messages'; import { openHelpCommand } from './commands'; import { pluginKey } from './plugin-key'; export function createPlugin(dispatch: Function, imageEnabled: boolean) { return new Plugin({ key: pluginKey, state: { init() { return { isVisible: false, imageEnabled }; }, apply(tr: Transaction, _value: any, state: EditorState) { const isVisible = tr.getMeta(pluginKey); const currentState = pluginKey.getState(state); if (isVisible !== undefined && isVisible !== currentState.isVisible) { const newState = { ...currentState, isVisible }; dispatch(pluginKey, newState); return newState; } return currentState; }, }, }); } const helpDialog = ( legacyImageUploadProvider?: Providers['imageUploadProvider'], ): EditorPlugin => ({ name: 'helpDialog', pmPlugins() { return [ { name: 'helpDialog', plugin: ({ dispatch }) => createPlugin(dispatch, !!legacyImageUploadProvider), }, { name: 'helpDialogKeymap', plugin: () => keymapPlugin(), }, ]; }, pluginsOptions: { quickInsert: ({ formatMessage }) => [ { id: 'helpdialog', title: formatMessage(messages.help), description: formatMessage(messages.helpDescription), keywords: ['?'], priority: 4000, keyshortcut: tooltip(openHelp), icon: () => , action(insert, state) { const tr = insert(''); openHelpCommand(tr); return addAnalytics(state, tr, { action: ACTION.HELP_OPENED, actionSubject: ACTION_SUBJECT.HELP, actionSubjectId: ACTION_SUBJECT_ID.HELP_QUICK_INSERT, attributes: { inputMethod: INPUT_METHOD.QUICK_INSERT }, eventType: EVENT_TYPE.UI, }); }, }, ], }, contentComponent({ editorView }) { return ( ( )} /> ); }, }); const keymapPlugin = (): Plugin => { const list = {}; keymaps.bindKeymapWithCommand( keymaps.openHelp.common!, (state, dispatch) => { let { tr } = state; const isVisible = tr.getMeta(pluginKey); if (!isVisible) { tr = addAnalytics(state, tr, { action: ACTION.CLICKED, actionSubject: ACTION_SUBJECT.BUTTON, actionSubjectId: ACTION_SUBJECT_ID.BUTTON_HELP, attributes: { inputMethod: INPUT_METHOD.SHORTCUT }, eventType: EVENT_TYPE.UI, }); openHelpCommand(tr, dispatch); } return true; }, list, ); return keymap(list); }; export default helpDialog;