1- import { Component , computed , NgZone , OnDestroy , OnInit , Signal , signal , inject } from '@angular/core' ;
1+ import { Component , computed , inject , NgZone , OnDestroy , OnInit , signal , Signal } from '@angular/core' ;
22import { filter , Observable , of , Subject , takeUntil } from 'rxjs' ;
33import {
4- BaseTreeModel , BrowserHelper , DropZoneHelper , NodePositionChangedEventModel , TreeDragDropService ,
5- TreeService ,
4+ BaseTreeModel , BrowserHelper , DropZoneHelper , NodePositionChangedEventModel , TreeDragDropService , TreeService ,
65} from '@tailormap-viewer/shared' ;
76import { map , tap } from 'rxjs/operators' ;
87import { MenubarService } from '../../menubar' ;
98import { TocMenuButtonComponent } from '../toc-menu-button/toc-menu-button.component' ;
109import { Store } from '@ngrx/store' ;
11- import { AppLayerModel , BaseComponentConfigHelper , BaseComponentTypeEnum , EditConfigModel , TocConfigModel } from '@tailormap-viewer/api' ;
10+ import { AppLayerModel , AuthenticatedUserService , BaseComponentTypeEnum , TocConfigModel } from '@tailormap-viewer/api' ;
1211import { MapService } from '@tailormap-viewer/map' ;
1312import { selectFilteredLayerTree , selectFilterEnabled } from '../state/toc.selectors' ;
1413import { toggleFilterEnabled } from '../state/toc.actions' ;
1514import {
1615 select3dTilesLayers , selectEditableLayers , selectIn3dView , selectLayersWithoutWebMercatorIds , selectSelectedNode , selectSelectedNodeId ,
1716} from '../../../map/state/map.selectors' ;
18- import { moveLayerTreeNode , setLayerVisibility , toggleSelectedLayerId , toggleLevelExpansion } from '../../../map/state/map.actions' ;
17+ import { moveLayerTreeNode , setLayerVisibility , toggleLevelExpansion , toggleSelectedLayerId } from '../../../map/state/map.actions' ;
1918import { selectFilteredLayerIds } from '../../../state/filter-state/filter.selectors' ;
2019import { setEditActive , setSelectedEditLayer } from '../../edit/state/edit.actions' ;
2120import { ComponentConfigHelper } from '../../../shared' ;
21+ import { toSignal } from '@angular/core/rxjs-interop' ;
2222
2323interface AppLayerTreeModel extends BaseTreeModel {
2424 metadata : AppLayerModel ;
@@ -39,6 +39,7 @@ export class TocComponent implements OnInit, OnDestroy {
3939 private menubarService = inject ( MenubarService ) ;
4040 private mapService = inject ( MapService ) ;
4141 private ngZone = inject ( NgZone ) ;
42+ private authenticatedUserService = inject ( AuthenticatedUserService ) ;
4243
4344 private destroyed = new Subject ( ) ;
4445 public visible$ : Observable < boolean > = of ( false ) ;
@@ -55,11 +56,24 @@ export class TocComponent implements OnInit, OnDestroy {
5556 public layersWithoutWebMercator : Signal < string [ ] > = signal ( [ ] ) ;
5657 public tiles3DLayerIds : Signal < string [ ] > = signal ( [ ] ) ;
5758 public filteredLayerIds : Signal < string [ ] > = signal ( [ ] ) ;
58- public editableLayerIds : Signal < string [ ] > = signal ( [ ] ) ;
5959
60- public config : TocConfigModel | undefined ;
60+ private config = ComponentConfigHelper . componentConfigSignal < TocConfigModel > ( this . store$ , BaseComponentTypeEnum . TOC ) ;
6161
62- public editComponentEnabled = ! BaseComponentConfigHelper . isComponentDisabledByDefault ( BaseComponentTypeEnum . EDIT ) ;
62+ private editComponentEnabled = ComponentConfigHelper . componentEnabledConfigSignal ( this . store$ , BaseComponentTypeEnum . EDIT ) ;
63+ private authenticatedUserDetails = toSignal ( this . authenticatedUserService . getUserDetails$ ( ) ) ;
64+
65+ private editableLayerIds = computed ( ( ) => {
66+ const editableLayers = this . store$ . selectSignal ( selectEditableLayers ) ;
67+ return editableLayers ( ) . map ( layer => layer . id ) ;
68+ } ) ;
69+
70+ public getCurrentlyEditableLayerIds = computed ( ( ) => {
71+ return this . config ( ) ?. showEditLayerIcon
72+ && this . authenticatedUserDetails ( ) ?. isAuthenticated // remove when HTM-1762 is implemented
73+ && this . editComponentEnabled ( )
74+ ? this . editableLayerIds ( )
75+ : [ ] ;
76+ } ) ;
6377
6478 public ngOnInit ( ) : void {
6579 this . visible$ = this . menubarService . isComponentVisible$ ( BaseComponentTypeEnum . TOC ) ;
@@ -100,29 +114,11 @@ export class TocComponent implements OnInit, OnDestroy {
100114
101115 this . menubarService . registerComponent ( { type : BaseComponentTypeEnum . TOC , component : TocMenuButtonComponent } ) ;
102116
103- ComponentConfigHelper . useInitialConfigForComponent < TocConfigModel > (
104- this . store$ ,
105- BaseComponentTypeEnum . TOC ,
106- config => {
107- this . config = config ;
108- } ,
109- ) ;
110-
111- ComponentConfigHelper . useInitialConfigForComponent < EditConfigModel > (
112- this . store$ ,
113- BaseComponentTypeEnum . EDIT ,
114- config => {
115- this . editComponentEnabled = config . enabled ;
116- } ,
117- ) ;
118-
119117 this . in3D = this . store$ . selectSignal ( selectIn3dView ) ;
120118 this . layersWithoutWebMercator = this . store$ . selectSignal ( selectLayersWithoutWebMercatorIds ) ;
121119 const tiles3DLayers = this . store$ . selectSignal ( select3dTilesLayers ) ;
122120 this . tiles3DLayerIds = computed ( ( ) => tiles3DLayers ( ) . map ( l => l . id ) ) ;
123121 this . filteredLayerIds = this . store$ . selectSignal ( selectFilteredLayerIds ) ;
124- const editableLayers = this . store$ . selectSignal ( selectEditableLayers ) ;
125- this . editableLayerIds = computed ( ( ) => editableLayers ( ) . map ( layer => layer . id ) ) ;
126122 }
127123
128124 public getDropZoneConfig ( ) {
0 commit comments