1+ import { type Node } from "@xyflow/react" ;
2+
13import { createStringList } from "@/utils/string" ;
24
3- import type { NodesAndEdges } from "../types" ;
5+ import { isFlexNode , type NodesAndEdges } from "../types" ;
46import { thisCannotBeUndone } from "./shared" ;
57
68export function getDeleteConfirmationDetails ( deletedElements : NodesAndEdges ) {
@@ -11,6 +13,18 @@ export function getDeleteConfirmationDetails(deletedElements: NodesAndEdges) {
1113 const isDeletingMultipleNodes = deletedNodes . length > 1 ;
1214
1315 if ( ! isDeletingMultipleNodes ) {
16+ const node = deletedNodes [ 0 ] ;
17+
18+ if ( isFlexNode ( node ) ) {
19+ const singleDeleteTitle = `Delete ${ node . data . type } ?` ;
20+ const singleDeleteDesc = `Title: '${ node . data . properties . title } '` ;
21+
22+ return {
23+ title : singleDeleteTitle ,
24+ description : singleDeleteDesc ,
25+ } ;
26+ }
27+
1428 const singleDeleteTitle =
1529 "Delete Node" +
1630 ( deletedNodes . length > 0 ? ` '${ deletedNodes [ 0 ] . id } '` : "" ) +
@@ -31,14 +45,32 @@ export function getDeleteConfirmationDetails(deletedElements: NodesAndEdges) {
3145 } ;
3246 }
3347
48+ const sortedDeletedNodes = sortFlexNodesLast ( deletedNodes ) ;
49+
3450 const multiDeleteTitle = `Delete Nodes?` ;
3551
3652 const deletedNodeList = createStringList (
37- deletedNodes . map ( ( node ) => node . id ) ,
53+ getNodeIdsForDisplay ( sortedDeletedNodes ) ,
3854 2 ,
3955 "node" ,
4056 ) ;
4157
58+ if ( sortedDeletedNodes . every ( isFlexNode ) ) {
59+ const multiDeleteDesc = (
60+ < div className = "text-sm" >
61+ < p > { `This will delete ${ deletedNodeList } .` } </ p >
62+ < br />
63+ { thisCannotBeUndone }
64+ </ div >
65+ ) ;
66+
67+ return {
68+ title : multiDeleteTitle ,
69+ content : multiDeleteDesc ,
70+ description : "" ,
71+ } ;
72+ }
73+
4274 const multiDeleteDesc = (
4375 < div className = "text-sm" >
4476 < p > { `Deleting ${ deletedNodeList } will also remove all connections to and from these nodes.` } </ p >
@@ -86,3 +118,24 @@ export function getDeleteConfirmationDetails(deletedElements: NodesAndEdges) {
86118 // Fallback to default
87119 return { } ;
88120}
121+
122+ function getNodeIdsForDisplay ( nodes : Node [ ] ) {
123+ return nodes . map ( ( node ) => {
124+ if ( isFlexNode ( node ) ) {
125+ return `'${ node . data . properties . title } ' (${ node . data . type } )` ;
126+ }
127+ return node . id ;
128+ } ) ;
129+ }
130+
131+ function sortFlexNodesLast ( nodes : Node [ ] ) {
132+ return [ ...nodes ] . sort ( ( a , b ) => {
133+ const aIsFlex = isFlexNode ( a ) ;
134+ const bIsFlex = isFlexNode ( b ) ;
135+
136+ if ( aIsFlex && ! bIsFlex ) return 1 ;
137+ if ( ! aIsFlex && bIsFlex ) return - 1 ;
138+
139+ return 0 ;
140+ } ) ;
141+ }
0 commit comments