@@ -10,6 +10,10 @@ import { indent, TIndentElement } from '@udecode/plate-indent';
10
10
11
11
import { getLastEntryEnclosedInToggle , isInClosedToggle } from './queries' ;
12
12
import { isToggleOpen } from './toggle-controller-store' ;
13
+ import {
14
+ moveCurrentBlockAfterPreviousSelectable ,
15
+ moveNextSelectableAfterCurrentBlock ,
16
+ } from './transforms' ;
13
17
import { ELEMENT_TOGGLE } from './types' ;
14
18
15
19
export const withToggle = <
@@ -18,14 +22,28 @@ export const withToggle = <
18
22
> (
19
23
editor : E
20
24
) => {
21
- const { insertBreak, isSelectable } = editor ;
25
+ const { insertBreak, isSelectable, deleteBackward , deleteForward } = editor ;
22
26
23
27
editor . isSelectable = ( element ) => {
24
28
if ( isNode ( element ) && isInClosedToggle < V , E > ( editor , element . id as string ) )
25
29
return false ;
26
30
return isSelectable ( element ) ;
27
31
} ;
28
32
33
+ editor . deleteBackward = ( unit ) => {
34
+ if (
35
+ moveCurrentBlockAfterPreviousSelectable ( editor as PlateEditor ) === false
36
+ )
37
+ return ;
38
+ deleteBackward ( unit ) ;
39
+ } ;
40
+
41
+ editor . deleteForward = ( unit ) => {
42
+ if ( moveNextSelectableAfterCurrentBlock ( editor as PlateEditor ) === false )
43
+ return ;
44
+ deleteForward ( unit ) ;
45
+ } ;
46
+
29
47
editor . insertBreak = ( ) => {
30
48
// If we are inserting a break in a toggle:
31
49
// If the toggle is open
@@ -57,9 +75,13 @@ export const withToggle = <
57
75
insertBreak ( ) ;
58
76
59
77
if ( lastEntryEnclosedInToggle ) {
78
+ const newlyInsertedTogglePath = [ currentBlockEntry [ 1 ] [ 0 ] + 1 ] ;
79
+ const afterLastEntryEncloseInToggle = [
80
+ lastEntryEnclosedInToggle [ 1 ] [ 0 ] + 1 ,
81
+ ] ;
60
82
moveNodes ( editor , {
61
- at : [ currentBlockEntry [ 1 ] [ 0 ] + 1 ] , // Newly inserted toggle
62
- to : [ lastEntryEnclosedInToggle [ 1 ] [ 0 ] + 1 ] , // Right after the last enclosed element
83
+ at : newlyInsertedTogglePath ,
84
+ to : afterLastEntryEncloseInToggle ,
63
85
} ) ;
64
86
}
65
87
}
0 commit comments