55 */
66import { Injectable } from '@angular/core' ;
77import { Subject , BehaviorSubject , Observable } from 'rxjs' ;
8- import { TreeModel , TreeConfig } from './models/tree-view.model' ;
8+ import { TreeModel , TreeConfig , FindingResults } from './models/tree-view.model' ;
99
1010@Injectable ( {
1111 providedIn : 'root'
1212} )
1313export class NgxTreeService {
1414 treeStorage : TreeModel [ ] = [ ] ;
15- listOfSelectedElement : TreeModel [ ] ;
16- parentOfSelected : TreeModel ;
17- private selectedElement : TreeModel ;
15+ private findingResults : FindingResults ;
16+ // listOfSelectedElement: TreeModel[];
17+ // parentOfSelected: TreeModel;
18+ // private selectedElement: TreeModel;
1819 isDragging : TreeModel ;
1920 dragEvent : { } ;
2021 direction : string ;
@@ -78,10 +79,12 @@ export class NgxTreeService {
7879 private elementFinder ( list , id , parent ?) {
7980 for ( const item of list ) {
8081 if ( item . id === id ) {
81- this . selectedElement = item ; // finded element by id
82- this . listOfSelectedElement = list ;
82+ this . findingResults = {
83+ findedItem : item ,
84+ itemsList : list
85+ }
8386 if ( parent ) {
84- this . parentOfSelected = item ;
87+ this . findingResults . parentItem = parent ;
8588 }
8689 break ;
8790 } else {
@@ -114,13 +117,13 @@ export class NgxTreeService {
114117 } ,
115118 childrens : [ ]
116119 } ;
120+ this . elementFinder ( this . treeStorage , parent . id ) ;
121+ this . findingResults . findedItem . childrens . push ( createObj ) ;
117122 const eventEmit = {
118123 element : createObj ,
119- parentList : this . selectedElement
124+ parent : this . findingResults . findedItem || 'root'
120125 } ;
121126 this . onAddItem . next ( eventEmit ) ;
122- this . elementFinder ( this . treeStorage , parent . id ) ;
123- this . selectedElement . childrens . push ( createObj ) ;
124127 this . clearAction ( ) ;
125128 }
126129
@@ -132,12 +135,12 @@ export class NgxTreeService {
132135 public deleteItem ( id ) {
133136 this . elementFinder ( this . treeStorage , id ) ;
134137 const eventEmit = {
135- element : this . selectedElement ,
136- parentList : this . listOfSelectedElement
138+ element : this . findingResults . findedItem ,
139+ parent : this . findingResults . parentItem || 'root'
137140 } ;
138141 this . onRemoveItem . next ( eventEmit ) ;
139- const i = this . listOfSelectedElement . indexOf ( this . selectedElement ) ;
140- this . listOfSelectedElement . splice ( i , 1 ) ;
142+ const i = this . findingResults . itemsList . indexOf ( this . findingResults . findedItem ) ;
143+ this . findingResults . itemsList . splice ( i , 1 ) ;
141144 this . clearAction ( ) ;
142145 this . checkTreeLength ( ) ;
143146 }
@@ -151,8 +154,8 @@ export class NgxTreeService {
151154 this . elementFinder ( this . treeStorage , element . id ) ;
152155 // event emit
153156 const eventEmit = {
154- element : this . selectedElement ,
155- parentList : this . listOfSelectedElement
157+ element : this . findingResults . findedItem ,
158+ parent : this . findingResults . parentItem || 'root'
156159 } ;
157160 this . onStartRenameItem . next ( eventEmit ) ;
158161 }
@@ -164,15 +167,15 @@ export class NgxTreeService {
164167 */
165168 public finishRenameItem ( name , id ) {
166169 this . elementFinder ( this . treeStorage , id ) ;
170+ // code
171+ this . findingResults . findedItem . name = name ;
172+ this . findingResults . findedItem . options . edit = false ;
167173 // event emit
168174 const eventEmit = {
169- element : this . selectedElement ,
170- parentList : this . listOfSelectedElement
175+ element : this . findingResults . findedItem ,
176+ parent : this . findingResults . parentItem || 'root'
171177 } ;
172178 this . onFinishRenameItem . next ( eventEmit ) ;
173- // code
174- this . selectedElement . name = name ;
175- this . selectedElement . options . edit = false ;
176179 this . clearAction ( ) ;
177180 }
178181
@@ -258,12 +261,12 @@ export class NgxTreeService {
258261 } else {
259262 const dropZoneId = parseInt ( eventObj . event . target . getAttribute ( 'data-id' ) , null ) ;
260263 this . elementFinder ( this . treeStorage , this . isDragging . id ) ;
261- const i = this . listOfSelectedElement . indexOf ( this . selectedElement ) ;
262- const copyItem = this . listOfSelectedElement . splice ( i , 1 ) [ 0 ] ;
264+ const i = this . findingResults . itemsList . indexOf ( this . findingResults . findedItem ) ;
265+ const copyItem = this . findingResults . itemsList . splice ( i , 1 ) [ 0 ] ;
263266 this . elementFinder ( this . treeStorage , dropZoneId ) ;
264- this . selectedElement . childrens . push ( copyItem ) ;
267+ this . findingResults . findedItem . childrens . push ( copyItem ) ;
265268 this . sortTree ( ) ;
266- eventObj . target = this . selectedElement ;
269+ eventObj . target = this . findingResults . findedItem ;
267270 this . onDrop . next ( eventObj ) ;
268271 }
269272 this . removeDestenationBorders ( this . treeStorage ) ;
@@ -281,35 +284,35 @@ export class NgxTreeService {
281284 private changeItemPosition ( el , direction ) {
282285 setTimeout ( ( ) => {
283286 this . elementFinder ( this . treeStorage , this . isDragging . id ) ;
284- const i = this . listOfSelectedElement . indexOf ( this . selectedElement ) ;
285- const copyItem = this . listOfSelectedElement . splice ( i , 1 ) [ 0 ] ;
287+ const i = this . findingResults . itemsList . indexOf ( this . findingResults . findedItem ) ;
288+ const copyItem = this . findingResults . itemsList . splice ( i , 1 ) [ 0 ] ;
286289 // end test
287290 const positionTarget = el . options . position ;
288291 this . elementFinder ( this . treeStorage , el . id ) ;
289292 if ( direction === 'up' ) {
290- for ( const items of this . listOfSelectedElement ) {
293+ for ( const items of this . findingResults . itemsList ) {
291294 if ( items . options . position >= positionTarget ) {
292295 items . options . position = items . options . position + 1 ;
293296 copyItem . options . position = positionTarget ;
294297 }
295298 }
296299 } else {
297- for ( const items of this . listOfSelectedElement ) {
300+ for ( const items of this . findingResults . itemsList ) {
298301 if ( items . options . position <= positionTarget ) {
299302 items . options . position = items . options . position - 1 ;
300303 }
301304 }
302305 }
303306 copyItem . options . position = positionTarget ;
304- this . listOfSelectedElement . push ( copyItem ) ;
307+ this . findingResults . itemsList . push ( copyItem ) ;
305308 this . sortTree ( ) ;
306309 } ) ;
307310 }
308311
309312 // get position of item
310313 getItemPosition ( item ) {
311314 this . elementFinder ( this . treeStorage , item . id ) ;
312- let position = this . listOfSelectedElement . indexOf ( this . selectedElement ) ;
315+ let position = this . findingResults . itemsList . indexOf ( this . findingResults . findedItem ) ;
313316 return ++ position ;
314317 }
315318
@@ -341,8 +344,7 @@ export class NgxTreeService {
341344
342345 // clear selectedElement && isDragging from element finder.
343346 private clearAction ( ) {
344- this . selectedElement = null ;
345- this . listOfSelectedElement = null ;
347+ this . findingResults = null ;
346348 }
347349
348350 private removeDestenationBorders ( data ) {
0 commit comments