UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

67 lines 2.57 kB
import classnames from 'classnames'; import { SafePlugin } from '@atlaskit/editor-common/safe-plugin'; import { TableCssClassName as ClassName } from '../../types'; import { getPluginState as getTablePluginState } from '../plugin-factory'; import { setResizeHandlePos } from './commands'; import { handleMouseDown } from './event-handlers'; import { createPluginState, getPluginState } from './plugin-factory'; import { pluginKey } from './plugin-key'; import { getResizeCellPos } from './utils/dom'; export function createPlugin(dispatch, { lastColumnResizable = true }, getEditorContainerWidth, getEditorFeatureFlags, api, nodeViewPortalProviderAPI, editorAnalyticsAPI, isTableScalingEnabled, isCommentEditor) { return new SafePlugin({ key: pluginKey, state: createPluginState(dispatch, { lastColumnResizable, resizeHandlePos: null, dragging: null, lastClick: null }), props: { attributes(state) { const pluginState = getPluginState(state); return { class: classnames({ [ClassName.RESIZE_CURSOR]: pluginState.resizeHandlePos !== null, [ClassName.IS_RESIZING]: !!pluginState.dragging }) }; }, handleDOMEvents: { mousedown(view, event) { const { state } = view; const resizeHandlePos = // we're setting `resizeHandlePos` via command in unit tests getPluginState(state).resizeHandlePos || getResizeCellPos(view, event); const { dragging } = getPluginState(state); let isColumnKeyboardResizeStarted = false; /* We need to start listening mouse events if column resize started from keyboard. This will allow continue resizing via mouse */ const { isKeyboardResize } = getTablePluginState(state); if (isKeyboardResize) { isColumnKeyboardResizeStarted = isKeyboardResize; } if (resizeHandlePos !== null && (!dragging || isColumnKeyboardResizeStarted)) { if (handleMouseDown(view, event, resizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, isTableScalingEnabled || false, api, nodeViewPortalProviderAPI, editorAnalyticsAPI, isCommentEditor)) { const { state, dispatch } = view; return setResizeHandlePos(resizeHandlePos)(state, dispatch); } } return false; } } } }); }