@@ -4,16 +4,44 @@ import { IInnerTreeNode, ITreeNode, IUseCore } from './use-tree-types';
44export  default  function  useOperate ( data : Ref < IInnerTreeNode [ ] > ,  core : IUseCore )  { 
55 console . log ( 'useOperate:' ,  data ,  data . value ) ; 
66
7-  const  {  setNodeValue,  getChildren }  =  core ; 
7+  const  {  setNodeValue,  getChildren,  getIndex ,  getLevel  }  =  core ; 
88
9-  const  insertBefore  =  ( parentNode : ITreeNode ,  node : ITreeNode ,  referenceNode : ITreeNode ,  cut : boolean  =  false ) : void =>  { 
10-  // TODO 
9+  const  insertBefore  =  ( 
10+  parentNode : ITreeNode , 
11+  node : ITreeNode , 
12+  referenceNode : ITreeNode , 
13+  ) : void =>  { 
14+  const  children  =  getChildren ( parentNode ) ; 
15+  const  lastChild  =  children [ children . length  -  1 ] ; 
16+  let  insertedIndex  =  getIndex ( parentNode )  +  1 ; 
17+ 
18+  if  ( referenceNode )  { 
19+  insertedIndex  =  getIndex ( referenceNode ) ; 
20+  }  else  if  ( lastChild )  { 
21+  insertedIndex  =  getIndex ( lastChild )  +  1 ; 
22+  } 
23+ 
24+  setNodeValue ( parentNode ,  'expanded' ,  true ) ; 
25+  setNodeValue ( parentNode ,  'isLeaf' ,  false ) ; 
26+ 
27+  const  currentNode  =  { 
28+  ...node , 
29+  level : getLevel ( parentNode )  +  1 , 
30+  parentId : parentNode . id , 
31+  isLeaf : true , 
32+  } ; 
33+ 
34+  data . value  =  data . value . slice ( 0 ,  insertedIndex ) 
35+  . concat ( 
36+  currentNode , 
37+  data . value . slice ( insertedIndex ,  data . value . length ) 
38+  ) ; 
1139 } 
1240
1341 const  removeNode  =  ( node : ITreeNode ) : void =>  { 
1442 data . value  =  data . value . filter ( item  =>  { 
1543 return  item . id  !==  node . id  &&  ! getChildren ( node ) . map ( nodeItem  =>  nodeItem . id ) . includes ( item . id ) ; 
16-  } ) 
44+  } ) ; 
1745 } 
1846
1947 const  editNode  =  ( node : IInnerTreeNode ,  label : string ) : void =>  { 
0 commit comments