UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

67 lines (66 loc) 2.21 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 const evenColumns = ({ resizeState, table, start, event, api }) => (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 const { lastClick } = getPluginState(state); const now = Date.now(); if (lastClick && now - lastClick.time < 500 && isClickNear(event, lastClick)) { const newState = evenAllColumnsWidths(resizeState); setLastClick(null, tr => updateColumnWidths(newState, table, start, api)(tr))(state, dispatch); return true; } setLastClick({ x: event.clientX, y: event.clientY, time: now })(state, dispatch); return false; }; export const distributeColumnsWidths = (newResizeState, table, api) => (state, dispatch) => { if (dispatch) { const 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 const setResizeHandlePos = resizeHandlePos => createCommand({ type: 'SET_RESIZE_HANDLE_POSITION', data: { resizeHandlePos } }); export const stopResizing = tr => createCommand({ type: 'STOP_RESIZING' }, originalTr => (tr || originalTr).setMeta('scrollIntoView', false).setMeta('is-resizer-resizing', false)); export const setDragging = (dragging, tr) => createCommand({ type: 'SET_DRAGGING', data: { dragging } }, originalTr => (tr || originalTr).setMeta('is-resizer-resizing', true)); const setLastClick = (lastClick, transform) => createCommand({ type: 'SET_LAST_CLICK', data: { lastClick } }, transform);