UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

85 lines (82 loc) 2.61 kB
//#region Imports import { TABLE_OVERFLOW_CHANGE_TRIGGER } from '@atlaskit/editor-common/analytics'; import { findTable, toggleHeader } from '@atlaskit/editor-tables/utils'; import { createCommand } from '../plugin-factory'; import { META_KEYS } from '../table-analytics'; //#endregion // #region Utils /** * Table layout toggle logic * default -> wide -> full-width -> default */ export const getNextLayout = currentLayout => { switch (currentLayout) { case 'default': return 'wide'; case 'wide': return 'full-width'; case 'full-width': return 'default'; default: return 'default'; } }; // #endregion // #region Actions export const toggleHeaderRow = (state, dispatch) => toggleHeader('row')(state, tr => createCommand({ type: 'TOGGLE_HEADER_ROW' }, () => tr.setMeta('scrollIntoView', false))(state, dispatch)); export const toggleHeaderColumn = (state, dispatch) => toggleHeader('column')(state, tr => createCommand({ type: 'TOGGLE_HEADER_COLUMN' }, () => tr.setMeta('scrollIntoView', false))(state, dispatch)); export const toggleNumberColumn = (state, dispatch) => { const { tr } = state; // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { node, pos } = findTable(state.selection); const isNumberedColumnEnabled = node.attrs.isNumberColumnEnabled; tr.setNodeMarkup(pos, state.schema.nodes.table, { ...node.attrs, isNumberColumnEnabled: !isNumberedColumnEnabled }); tr.setMeta('scrollIntoView', false); const tableOverflowChangeTriggerName = isNumberedColumnEnabled ? TABLE_OVERFLOW_CHANGE_TRIGGER.DISABLED_NUMBERED_COLUMN : TABLE_OVERFLOW_CHANGE_TRIGGER.ENABLED_NUMBERED_COLUMN; tr.setMeta(META_KEYS.OVERFLOW_TRIGGER, { name: tableOverflowChangeTriggerName }); if (dispatch) { dispatch(tr); } return true; }; export const toggleTableLayout = (state, dispatch) => { const table = findTable(state.selection); if (!table) { return false; } const layout = getNextLayout(table.node.attrs.layout); return createCommand({ type: 'SET_TABLE_LAYOUT', data: { layout } }, tr => { tr.setNodeMarkup(table.pos, state.schema.nodes.table, { ...table.node.attrs, layout }); tr.setMeta(META_KEYS.OVERFLOW_TRIGGER, { name: TABLE_OVERFLOW_CHANGE_TRIGGER.RESIZED }); return tr.setMeta('scrollIntoView', false); })(state, dispatch); }; export const toggleContextualMenu = () => createCommand({ type: 'TOGGLE_CONTEXTUAL_MENU' }, tr => tr.setMeta('addToHistory', false)); // #endregion