@atlaskit/editor-plugin-table
Version:
Table plugin for the @atlaskit/editor
83 lines (82 loc) • 2.75 kB
JavaScript
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);
};