@portabletext/editor
Version:
Portable Text Editor made in React
48 lines (39 loc) • 1.19 kB
text/typescript
import type {PortableTextBlock} from '@sanity/types'
import type {EditorSelector} from '../editor/editor-selector'
import {getBlockKeyFromSelectionPoint} from '../selection/selection-point'
import {
getSelectionEndPoint,
getSelectionStartPoint,
sliceBlocks,
} from '../utils'
/**
* @public
*/
export const getSelectedValue: EditorSelector<Array<PortableTextBlock>> = (
snapshot,
) => {
const selection = snapshot.context.selection
if (!selection) {
return []
}
const startPoint = getSelectionStartPoint(selection)
const endPoint = getSelectionEndPoint(selection)
const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)
const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)
if (!startBlockKey || !endBlockKey) {
return []
}
const startBlockIndex = snapshot.blockIndexMap.get(startBlockKey)
const endBlockIndex = snapshot.blockIndexMap.get(endBlockKey)
if (startBlockIndex === undefined || endBlockIndex === undefined) {
return []
}
const slicedValue = snapshot.context.value.slice(
startBlockIndex,
endBlockIndex + 1,
)
return sliceBlocks({
context: snapshot.context,
blocks: slicedValue,
})
}