@atlaskit/editor-plugin-table
Version:
Table plugin for the @atlaskit/editor
60 lines • 2.03 kB
JavaScript
import { pluginKey } from '../plugin-key';
import { isFullRowOrColumnSelected } from '../utils/selection';
const applyMenuUserIntent = (tr, api, nextActiveTableMenu) => {
var _api$userIntent2;
if (nextActiveTableMenu.type === 'row' || nextActiveTableMenu.type === 'column') {
var _api$userIntent;
api === null || api === void 0 ? void 0 : (_api$userIntent = api.userIntent) === null || _api$userIntent === void 0 ? void 0 : _api$userIntent.commands.setCurrentUserIntent('tableDragMenuPopupOpen')({
tr
});
return;
}
api === null || api === void 0 ? void 0 : (_api$userIntent2 = api.userIntent) === null || _api$userIntent2 === void 0 ? void 0 : _api$userIntent2.commands.setCurrentUserIntent(isFullRowOrColumnSelected(tr.selection) ? 'dragHandleSelected' : 'default')({
tr
});
};
export const closeActiveTableMenu = (api, options) => ({
tr
}) => {
const nextActiveTableMenu = {
type: 'none'
};
tr.setMeta(pluginKey, {
type: 'SET_ACTIVE_TABLE_MENU',
data: {
activeTableMenu: nextActiveTableMenu
}
});
if (!(options !== null && options !== void 0 && options.skipUserIntent)) {
applyMenuUserIntent(tr, api, nextActiveTableMenu);
}
if (!tr.docChanged) {
tr.setMeta('addToHistory', false);
}
return tr;
};
const isSameActiveTableMenu = (current, next) => {
if (!current || current.type !== next.type) {
return false;
}
if (current.type === 'row' || current.type === 'column') {
return next.type === current.type && current.index === next.index;
}
return true;
};
export const toggleActiveTableMenu = (activeTableMenu, currentActiveTableMenu, api) => ({
tr
}) => {
const nextActiveTableMenu = isSameActiveTableMenu(currentActiveTableMenu, activeTableMenu) ? {
type: 'none'
} : activeTableMenu;
tr.setMeta(pluginKey, {
type: 'SET_ACTIVE_TABLE_MENU',
data: {
activeTableMenu: nextActiveTableMenu
}
});
applyMenuUserIntent(tr, api, nextActiveTableMenu);
tr.setMeta('addToHistory', false);
return tr;
};