1
1
import { $createCustomListItemNode , $isCustomListItemNode , CustomListItemNode } from "../nodes/custom-list-item" ;
2
2
import { $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" ;
5
5
import { nodeHasInset } from "./nodes" ;
6
6
7
7
8
- export function $nestListItem ( node : CustomListItemNode ) {
8
+ export function $nestListItem ( node : CustomListItemNode ) : CustomListItemNode {
9
9
const list = node . getParent ( ) ;
10
10
if ( ! $isCustomListNode ( list ) ) {
11
- return ;
11
+ return node ;
12
12
}
13
13
14
14
const listItems = list . getChildren ( ) as CustomListItemNode [ ] ;
@@ -27,14 +27,16 @@ export function $nestListItem(node: CustomListItemNode) {
27
27
prevListItem . append ( newList ) ;
28
28
node . remove ( ) ;
29
29
}
30
+
31
+ return newListItem ;
30
32
}
31
33
32
- export function $unnestListItem ( node : CustomListItemNode ) {
34
+ export function $unnestListItem ( node : CustomListItemNode ) : CustomListItemNode {
33
35
const list = node . getParent ( ) ;
34
36
const parentListItem = list ?. getParent ( ) ;
35
37
const outerList = parentListItem ?. getParent ( ) ;
36
38
if ( ! $isCustomListNode ( list ) || ! $isCustomListNode ( outerList ) || ! $isCustomListItemNode ( parentListItem ) ) {
37
- return ;
39
+ return node ;
38
40
}
39
41
40
42
parentListItem . insertAfter ( node ) ;
@@ -45,6 +47,8 @@ export function $unnestListItem(node: CustomListItemNode) {
45
47
if ( parentListItem . getChildren ( ) . length === 0 ) {
46
48
parentListItem . remove ( ) ;
47
49
}
50
+
51
+ return node ;
48
52
}
49
53
50
54
function getListItemsForSelection ( selection : BaseSelection | null ) : ( CustomListItemNode | null ) [ ] {
@@ -89,24 +93,25 @@ function $reduceDedupeListItems(listItems: (CustomListItemNode|null)[]): CustomL
89
93
}
90
94
91
95
export function $setInsetForSelection ( editor : LexicalEditor , change : number ) : void {
92
- const selection = getLastSelection ( editor ) ;
93
-
96
+ const selection = $getSelection ( ) ;
94
97
const listItemsInSelection = getListItemsForSelection ( selection ) ;
95
98
const isListSelection = listItemsInSelection . length > 0 && ! listItemsInSelection . includes ( null ) ;
96
99
97
100
if ( isListSelection ) {
101
+ const alteredListItems = [ ] ;
98
102
const listItems = $reduceDedupeListItems ( listItemsInSelection ) ;
99
103
if ( change > 0 ) {
100
104
for ( const listItem of listItems ) {
101
- $nestListItem ( listItem ) ;
105
+ alteredListItems . push ( $nestListItem ( listItem ) ) ;
102
106
}
103
107
} else if ( change < 0 ) {
104
108
for ( const listItem of [ ...listItems ] . reverse ( ) ) {
105
- $unnestListItem ( listItem ) ;
109
+ alteredListItems . push ( $unnestListItem ( listItem ) ) ;
106
110
}
111
+ alteredListItems . reverse ( ) ;
107
112
}
108
113
109
- $selectNodes ( listItems ) ;
114
+ $selectNodes ( alteredListItems ) ;
110
115
return ;
111
116
}
112
117
0 commit comments