1- import { Component , ElementRef } from '@angular/core' ;
1+ import {
2+ Component , ElementRef , ChangeDetectionStrategy ,
3+ Pipe , PipeTransform
4+ } from '@angular/core' ;
25import { CanvasType } from '../CanvasType' ;
36import { LayerStateService } from '../services/layerstate.service' ;
47import { SvgLoader } from '../scripts/import' ;
58import { VectorLayer , PathLayer } from '../scripts/layers' ;
9+ import { Observable } from 'rxjs/Observable' ;
610
711@Component ( {
812 selector : 'app-pathselector' ,
913 templateUrl : './pathselector.component.html' ,
10- styleUrls : [ './pathselector.component.scss' ]
14+ styleUrls : [ './pathselector.component.scss' ] ,
15+ changeDetection : ChangeDetectionStrategy . OnPush ,
1116} )
1217export class PathSelectorComponent {
1318 CANVAS_START = CanvasType . Start ;
1419 CANVAS_END = CanvasType . End ;
1520
21+ private readonly startVectorLayerObservable : Observable < VectorLayer > ;
22+ private readonly endVectorLayerObservable : Observable < VectorLayer > ;
23+
1624 constructor (
1725 private elementRef : ElementRef ,
18- private layerStateService : LayerStateService ) { }
26+ private layerStateService : LayerStateService ) {
27+ this . startVectorLayerObservable =
28+ this . layerStateService . getVectorLayerObservable ( CanvasType . Start ) ;
29+ this . endVectorLayerObservable =
30+ this . layerStateService . getVectorLayerObservable ( CanvasType . End ) ;
31+ }
1932
2033 private setVectorLayer ( canvasType : CanvasType , vectorLayer : VectorLayer ) {
2134 const canvasTypes = [ canvasType ] ;
@@ -28,27 +41,14 @@ export class PathSelectorComponent {
2841 canvasTypes . push ( CanvasType . Preview ) ;
2942 }
3043 this . layerStateService . setVectorLayer ( canvasType , vectorLayer , false ) ;
31- const pathLayers = this . getPathList ( canvasType ) ;
44+ const pathLayers = getPathLayerList ( this . layerStateService . getVectorLayer ( canvasType ) ) ;
3245 if ( pathLayers . length ) {
3346 // Auto-select the first path.
3447 this . setActivePathId ( canvasType , pathLayers [ 0 ] . id ) ;
3548 }
3649 canvasTypes . forEach ( type => this . layerStateService . notifyChange ( type ) ) ;
3750 }
3851
39- getPathList ( canvasType : CanvasType ) {
40- const vectorLayer = this . layerStateService . getVectorLayer ( canvasType ) ;
41- const pathLayers : PathLayer [ ] = [ ] ;
42- if ( vectorLayer ) {
43- vectorLayer . walk ( ( layer => {
44- if ( layer instanceof PathLayer ) {
45- pathLayers . push ( layer ) ;
46- }
47- } ) ) ;
48- }
49- return pathLayers ;
50- }
51-
5252 getActivePathId ( canvasType : CanvasType ) {
5353 return this . layerStateService . getActivePathId ( canvasType ) ;
5454 }
@@ -81,7 +81,7 @@ export class PathSelectorComponent {
8181 const canvasTypes = [ CanvasType . Start , CanvasType . End ] ;
8282 const availableEmptyListSlots : CanvasType [ ] = [ ] ;
8383 for ( let i = 0 ; i < canvasTypes . length ; i ++ ) {
84- if ( ! this . getPathList ( canvasTypes [ i ] ) . length ) {
84+ if ( ! getPathLayerList ( this . layerStateService . getVectorLayer ( canvasTypes [ i ] ) ) . length ) {
8585 availableEmptyListSlots . push ( canvasTypes [ i ] ) ;
8686 }
8787 }
@@ -136,3 +136,24 @@ export class PathSelectorComponent {
136136 } ) ;
137137 }
138138}
139+
140+ @Pipe ( { name : 'toPathLayerList' } )
141+ export class PathLayerListPipe implements PipeTransform {
142+ constructor ( private layerStateService : LayerStateService ) { }
143+
144+ transform ( vectorLayer : VectorLayer | undefined ) : PathLayer [ ] {
145+ return getPathLayerList ( vectorLayer ) ;
146+ }
147+ }
148+
149+ function getPathLayerList ( vectorLayer : VectorLayer | undefined ) {
150+ const pathLayers : PathLayer [ ] = [ ] ;
151+ if ( vectorLayer ) {
152+ vectorLayer . walk ( ( layer => {
153+ if ( layer instanceof PathLayer ) {
154+ pathLayers . push ( layer ) ;
155+ }
156+ } ) ) ;
157+ }
158+ return pathLayers ;
159+ }
0 commit comments