11import { $createCustomListItemNode , $isCustomListItemNode , CustomListItemNode } from "../nodes/custom-list-item" ;
22import { $createCustomListNode , $isCustomListNode } from "../nodes/custom-list" ;
3- import { BaseSelection , LexicalEditor } from "lexical" ;
4- import { $getBlockElementNodesInSelection , $selectNodes , $toggleSelection , getLastSelection } from "./selection" ;
3+ import { $getSelection , BaseSelection , LexicalEditor } from "lexical" ;
4+ import { $getBlockElementNodesInSelection , $selectNodes , $toggleSelection } from "./selection" ;
55import { nodeHasInset } from "./nodes" ;
66
77
8- export function $nestListItem ( node : CustomListItemNode ) {
8+ export function $nestListItem ( node : CustomListItemNode ) : CustomListItemNode {
99 const list = node . getParent ( ) ;
1010 if ( ! $isCustomListNode ( list ) ) {
11- return ;
11+ return node ;
1212 }
1313
1414 const listItems = list . getChildren ( ) as CustomListItemNode [ ] ;
@@ -27,14 +27,16 @@ export function $nestListItem(node: CustomListItemNode) {
2727 prevListItem . append ( newList ) ;
2828 node . remove ( ) ;
2929 }
30+
31+ return newListItem ;
3032}
3133
32- export function $unnestListItem ( node : CustomListItemNode ) {
34+ export function $unnestListItem ( node : CustomListItemNode ) : CustomListItemNode {
3335 const list = node . getParent ( ) ;
3436 const parentListItem = list ?. getParent ( ) ;
3537 const outerList = parentListItem ?. getParent ( ) ;
3638 if ( ! $isCustomListNode ( list ) || ! $isCustomListNode ( outerList ) || ! $isCustomListItemNode ( parentListItem ) ) {
37- return ;
39+ return node ;
3840 }
3941
4042 parentListItem . insertAfter ( node ) ;
@@ -45,6 +47,8 @@ export function $unnestListItem(node: CustomListItemNode) {
4547 if ( parentListItem . getChildren ( ) . length === 0 ) {
4648 parentListItem . remove ( ) ;
4749 }
50+
51+ return node ;
4852}
4953
5054function getListItemsForSelection ( selection : BaseSelection | null ) : ( CustomListItemNode | null ) [ ] {
@@ -89,24 +93,25 @@ function $reduceDedupeListItems(listItems: (CustomListItemNode|null)[]): CustomL
8993}
9094
9195export function $setInsetForSelection ( editor : LexicalEditor , change : number ) : void {
92- const selection = getLastSelection ( editor ) ;
93-
96+ const selection = $getSelection ( ) ;
9497 const listItemsInSelection = getListItemsForSelection ( selection ) ;
9598 const isListSelection = listItemsInSelection . length > 0 && ! listItemsInSelection . includes ( null ) ;
9699
97100 if ( isListSelection ) {
101+ const alteredListItems = [ ] ;
98102 const listItems = $reduceDedupeListItems ( listItemsInSelection ) ;
99103 if ( change > 0 ) {
100104 for ( const listItem of listItems ) {
101- $nestListItem ( listItem ) ;
105+ alteredListItems . push ( $nestListItem ( listItem ) ) ;
102106 }
103107 } else if ( change < 0 ) {
104108 for ( const listItem of [ ...listItems ] . reverse ( ) ) {
105- $unnestListItem ( listItem ) ;
109+ alteredListItems . push ( $unnestListItem ( listItem ) ) ;
106110 }
111+ alteredListItems . reverse ( ) ;
107112 }
108113
109- $selectNodes ( listItems ) ;
114+ $selectNodes ( alteredListItems ) ;
110115 return ;
111116 }
112117
0 commit comments