@atlaskit/editor-plugin-block-controls
Version:
Block controls plugin for @atlaskit/editor-core
39 lines • 1.21 kB
JavaScript
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
});
};