Lexical: Adjusted handling of child/sibling list items on nesting

Sibling/child items will now remain at the same visual level during
nesting/un-nested, so only the selected item level is visually altered.

Also added new model-based editor content matching system for tests.
This commit is contained in:
Dan Brown
2024-12-17 18:07:46 +00:00
parent fca8f928a3
commit f4005a139b
3 changed files with 183 additions and 6 deletions

View File

@ -10,6 +10,9 @@ export function $nestListItem(node: ListItemNode): ListItemNode {
return node;
}
const nodeChildList = node.getChildren().filter(n => $isListNode(n))[0] || null;
const nodeChildItems = nodeChildList?.getChildren() || [];
const listItems = list.getChildren() as ListItemNode[];
const nodeIndex = listItems.findIndex((n) => n.getKey() === node.getKey());
const isFirst = nodeIndex === 0;
@ -27,6 +30,13 @@ export function $nestListItem(node: ListItemNode): ListItemNode {
node.remove();
}
if (nodeChildList) {
for (const child of nodeChildItems) {
newListItem.insertAfter(child);
}
nodeChildList.remove();
}
return newListItem;
}
@ -38,6 +48,8 @@ export function $unnestListItem(node: ListItemNode): ListItemNode {
return node;
}
const laterSiblings = node.getNextSiblings();
parentListItem.insertAfter(node);
if (list.getChildren().length === 0) {
list.remove();
@ -47,6 +59,16 @@ export function $unnestListItem(node: ListItemNode): ListItemNode {
parentListItem.remove();
}
if (laterSiblings.length > 0) {
const childList = $createListNode(list.getListType());
childList.append(...laterSiblings);
node.append(childList);
}
if (list.getChildrenSize() === 0) {
list.remove();
}
return node;
}