Files
tiptap/packages/core/src/helpers/resolveFocusPosition.ts
2022-02-07 10:19:46 +01:00

43 lines
968 B
TypeScript

import { Node as ProseMirrorNode } from 'prosemirror-model'
import { Selection, TextSelection } from 'prosemirror-state'
import { FocusPosition } from '../types'
import { minMax } from '../utilities/minMax'
export function resolveFocusPosition(
doc: ProseMirrorNode,
position: FocusPosition = null,
): Selection | null {
if (!position) {
return null
}
const selectionAtStart = Selection.atStart(doc)
const selectionAtEnd = Selection.atEnd(doc)
if (position === 'start' || position === true) {
return selectionAtStart
}
if (position === 'end') {
return selectionAtEnd
}
const minPos = selectionAtStart.from
const maxPos = selectionAtEnd.to
if (position === 'all') {
return TextSelection.create(
doc,
minMax(0, minPos, maxPos),
minMax(doc.content.size, minPos, maxPos),
)
}
return TextSelection.create(
doc,
minMax(position, minPos, maxPos),
minMax(position, minPos, maxPos),
)
}