UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

83 lines (82 loc) 2.75 kB
import { TABLE_OVERFLOW_CHANGE_TRIGGER } from '@atlaskit/editor-common/analytics'; import { isTableSelected } from '@atlaskit/editor-tables/utils'; import { META_KEYS } from '../table-analytics'; import { updateColumnWidths } from '../transforms/column-width'; import { createCommand, getPluginState } from './plugin-factory'; import { isClickNear } from './utils/dom'; import { evenAllColumnsWidths } from './utils/resize-state'; export var evenColumns = function evenColumns(_ref) { var resizeState = _ref.resizeState, table = _ref.table, start = _ref.start, event = _ref.event, api = _ref.api; return function (state, dispatch) { if (!isTableSelected(state.selection)) { return false; } // double click detection logic // Note: ProseMirror's handleDoubleClick doesn't quite work with DOM mousedown event handler var _getPluginState = getPluginState(state), lastClick = _getPluginState.lastClick; var now = Date.now(); if (lastClick && now - lastClick.time < 500 && isClickNear(event, lastClick)) { var newState = evenAllColumnsWidths(resizeState); setLastClick(null, function (tr) { return updateColumnWidths(newState, table, start, api)(tr); })(state, dispatch); return true; } setLastClick({ x: event.clientX, y: event.clientY, time: now })(state, dispatch); return false; }; }; export var distributeColumnsWidths = function distributeColumnsWidths(newResizeState, table, api) { return function (state, dispatch) { if (dispatch) { var tr = updateColumnWidths(newResizeState, table.node, table.start, api)(state.tr); tr.setMeta(META_KEYS.OVERFLOW_TRIGGER, { name: TABLE_OVERFLOW_CHANGE_TRIGGER.DISTRIBUTED_COLUMNS }); stopResizing(tr)(state, dispatch); } return true; }; }; export var setResizeHandlePos = function setResizeHandlePos(resizeHandlePos) { return createCommand({ type: 'SET_RESIZE_HANDLE_POSITION', data: { resizeHandlePos: resizeHandlePos } }); }; export var stopResizing = function stopResizing(tr) { return createCommand({ type: 'STOP_RESIZING' }, function (originalTr) { return (tr || originalTr).setMeta('scrollIntoView', false).setMeta('is-resizer-resizing', false); }); }; export var setDragging = function setDragging(dragging, tr) { return createCommand({ type: 'SET_DRAGGING', data: { dragging: dragging } }, function (originalTr) { return (tr || originalTr).setMeta('is-resizer-resizing', true); }); }; var setLastClick = function setLastClick(lastClick, transform) { return createCommand({ type: 'SET_LAST_CLICK', data: { lastClick: lastClick } }, transform); };