UNPKG

@atlaskit/editor-plugin-block-controls

Version:

Block controls plugin for @atlaskit/editor-core

39 lines 1.21 kB
import { DecorationSet } from '@atlaskit/editor-prosemirror/view'; import { isUnchangedTransaction, mapTransactionState, reducePendingState } from './sparse-surfaces-mapping'; export const createInitialSparseSurfacesState = candidates => ({ activeNodesByPosition: new Map(), anchors: new Map(), candidates, decorations: DecorationSet.empty, documentChanged: false }); const isReconciliationCommit = meta => (meta === null || meta === void 0 ? void 0 : meta.type) === 'commitReconciliation'; const commitReconciliation = (previous, meta) => ({ ...previous, ...meta.reconciliation, documentChanged: false, invalidation: undefined }); export const applySparseSurfacesTransaction = input => { if (isReconciliationCommit(input.meta)) { return commitReconciliation(input.previous, input.meta); } const pending = reducePendingState({ invalidation: input.invalidation, previous: input.previous, tr: input.tr }); if (isUnchangedTransaction({ pending, previous: input.previous, tr: input.tr })) { return input.previous; } return mapTransactionState({ newState: input.newState, pending, previous: input.previous, tr: input.tr }); };