38 lines
900 B
JavaScript
38 lines
900 B
JavaScript
// @flow
|
|
import EditList from './plugins/EditList';
|
|
import type { State, Transform } from './types';
|
|
|
|
const { transforms } = EditList;
|
|
|
|
type Options = {
|
|
type: string | Object,
|
|
wrapper?: string | Object,
|
|
append?: string | Object,
|
|
};
|
|
|
|
export function splitAndInsertBlock(
|
|
transform: Transform,
|
|
state: State,
|
|
options: Options
|
|
) {
|
|
const { type, wrapper, append } = options;
|
|
const { document } = state;
|
|
const parent = document.getParent(state.startBlock.key);
|
|
|
|
// lists get some special treatment
|
|
if (parent && parent.type === 'list-item') {
|
|
transform = transforms.unwrapList(
|
|
transforms
|
|
.splitListItem(transform.collapseToStart())
|
|
.collapseToEndOfPreviousBlock()
|
|
);
|
|
}
|
|
|
|
transform = transform.insertBlock(type);
|
|
|
|
if (wrapper) transform = transform.wrapBlock(wrapper);
|
|
if (append) transform = transform.insertBlock(append);
|
|
|
|
return transform;
|
|
}
|