Skip to content

Commit 49a5170

Browse files
committed
Only show edit icon when user is authenticated, refactor using signals
1 parent a225eb5 commit 49a5170

File tree

3 files changed

+40
-38
lines changed

3 files changed

+40
-38
lines changed

projects/core/src/lib/components/toc/toc/toc.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
[layersWithoutWebMercator]="layersWithoutWebMercator()"
77
[tiles3DLayerIds]="tiles3DLayerIds()"
88
[filteredLayerIds]="filteredLayerIds()"
9-
[editableLayerIds]="getEditableLayerIds()"
9+
[editableLayerIds]="getCurrentlyEditableLayerIds()"
1010
(zoomToScale)="zoomToScale($event)"
1111
(editLayer)="editLayer($event)"
1212
></tm-toc-node-layer>

projects/core/src/lib/components/toc/toc/toc.component.ts

Lines changed: 16 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
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';
22
import { filter, Observable, of, Subject, takeUntil } from 'rxjs';
33
import {
4-
BaseTreeModel, BrowserHelper, DropZoneHelper, NodePositionChangedEventModel, TreeDragDropService,
5-
TreeService,
4+
BaseTreeModel, BrowserHelper, DropZoneHelper, NodePositionChangedEventModel, TreeDragDropService, TreeService,
65
} from '@tailormap-viewer/shared';
76
import { map, tap } from 'rxjs/operators';
87
import { MenubarService } from '../../menubar';
98
import { TocMenuButtonComponent } from '../toc-menu-button/toc-menu-button.component';
109
import { Store } from '@ngrx/store';
11-
import {
12-
AppLayerModel, AuthenticatedUserService, BaseComponentConfigHelper, BaseComponentTypeEnum, EditConfigModel, TocConfigModel,
13-
} from '@tailormap-viewer/api';
10+
import { AppLayerModel, AuthenticatedUserService, BaseComponentTypeEnum, TocConfigModel } from '@tailormap-viewer/api';
1411
import { MapService } from '@tailormap-viewer/map';
1512
import { selectFilteredLayerTree, selectFilterEnabled } from '../state/toc.selectors';
1613
import { toggleFilterEnabled } from '../state/toc.actions';
1714
import {
1815
select3dTilesLayers, selectEditableLayers, selectIn3dView, selectLayersWithoutWebMercatorIds, selectSelectedNode, selectSelectedNodeId,
1916
} from '../../../map/state/map.selectors';
20-
import { moveLayerTreeNode, setLayerVisibility, toggleSelectedLayerId, toggleLevelExpansion } from '../../../map/state/map.actions';
17+
import { moveLayerTreeNode, setLayerVisibility, toggleLevelExpansion, toggleSelectedLayerId } from '../../../map/state/map.actions';
2118
import { selectFilteredLayerIds } from '../../../state/filter-state/filter.selectors';
2219
import { setEditActive, setSelectedEditLayer } from '../../edit/state/edit.actions';
2320
import { ComponentConfigHelper } from '../../../shared';
@@ -59,17 +56,21 @@ export class TocComponent implements OnInit, OnDestroy {
5956
public layersWithoutWebMercator: Signal<string[]> = signal([]);
6057
public tiles3DLayerIds: Signal<string[]> = signal([]);
6158
public filteredLayerIds: Signal<string[]> = signal([]);
62-
public editableLayerIds: Signal<string[]> = signal([]);
63-
64-
public config: TocConfigModel | undefined;
6559

66-
public editComponentEnabled = !BaseComponentConfigHelper.isComponentDisabledByDefault(BaseComponentTypeEnum.EDIT);
60+
private config = ComponentConfigHelper.componentConfigSignal<TocConfigModel>(this.store$, BaseComponentTypeEnum.TOC);
6761

62+
public editComponentEnabled= ComponentConfigHelper.componentEnabledConfigSignal(this.store$, BaseComponentTypeEnum.EDIT);
6863
private authenticatedUserDetails = toSignal(this.authenticatedUserService.getUserDetails$());
69-
public getEditableLayerIds = computed(() => {
70-
return this.config?.showEditLayerIcon
71-
&& this.authenticatedUserDetails()?.isAuthenticated
72-
&& this.editComponentEnabled
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()
7374
? this.editableLayerIds()
7475
: [];
7576
});
@@ -113,29 +114,11 @@ export class TocComponent implements OnInit, OnDestroy {
113114

114115
this.menubarService.registerComponent({ type: BaseComponentTypeEnum.TOC, component: TocMenuButtonComponent });
115116

116-
ComponentConfigHelper.useInitialConfigForComponent<TocConfigModel>(
117-
this.store$,
118-
BaseComponentTypeEnum.TOC,
119-
config => {
120-
this.config = config;
121-
},
122-
);
123-
124-
ComponentConfigHelper.useInitialConfigForComponent<EditConfigModel>(
125-
this.store$,
126-
BaseComponentTypeEnum.EDIT,
127-
config => {
128-
this.editComponentEnabled = config.enabled;
129-
},
130-
);
131-
132117
this.in3D = this.store$.selectSignal(selectIn3dView);
133118
this.layersWithoutWebMercator = this.store$.selectSignal(selectLayersWithoutWebMercatorIds);
134119
const tiles3DLayers = this.store$.selectSignal(select3dTilesLayers);
135120
this.tiles3DLayerIds = computed(() => tiles3DLayers().map(l => l.id));
136121
this.filteredLayerIds = this.store$.selectSignal(selectFilteredLayerIds);
137-
const editableLayers = this.store$.selectSignal(selectEditableLayers);
138-
this.editableLayerIds = computed(() => editableLayers().map(layer => layer.id));
139122
}
140123

141124
public getDropZoneConfig() {

projects/core/src/lib/shared/helpers/component-config.helper.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { BaseComponentConfigHelper, BaseComponentTypeEnum, ComponentBaseConfigMo
33
import { Store } from '@ngrx/store';
44
import { selectComponentsConfigForType, selectViewerLoadingState } from '../../state/core.selectors';
55
import { filter, map, switchMap, take } from 'rxjs';
6+
import { toSignal } from '@angular/core/rxjs-interop';
67

78
export class ComponentConfigHelper {
89

@@ -13,15 +14,13 @@ export class ComponentConfigHelper {
1314
return components.filter(c => BaseComponentConfigHelper.isComponentEnabled(config, c.type));
1415
}
1516

16-
public static useInitialConfigForComponent<ConfigType extends ComponentBaseConfigModel = ComponentBaseConfigModel>(
17+
public static componentConfig$<ConfigType extends ComponentBaseConfigModel = ComponentBaseConfigModel>(
1718
store$: Store,
1819
type: string | BaseComponentTypeEnum,
19-
callback: (config: ConfigType) => void,
2020
) {
2121
return store$.select(selectViewerLoadingState)
2222
.pipe(
2323
filter(loadState => loadState === LoadingStateEnum.LOADED),
24-
take(1),
2524
switchMap(() => store$.select(selectComponentsConfigForType<ConfigType>(type)).pipe(take(1))),
2625
map((config): ConfigType => {
2726
const enabled = BaseComponentConfigHelper.isComponentEnabled(config ? [config] : [], type);
@@ -30,10 +29,30 @@ export class ComponentConfigHelper {
3029
}
3130
return { enabled } as ConfigType;
3231
}),
33-
)
32+
);
33+
}
34+
35+
public static useInitialConfigForComponent<ConfigType extends ComponentBaseConfigModel = ComponentBaseConfigModel>(
36+
store$: Store,
37+
type: string | BaseComponentTypeEnum,
38+
callback: (config: ConfigType) => void,
39+
) {
40+
ComponentConfigHelper.componentConfig$<ConfigType>(store$, type)
41+
.pipe(take(1))
3442
.subscribe(config => {
3543
callback(config);
3644
});
3745
}
3846

47+
public static componentConfigSignal<ConfigType extends ComponentBaseConfigModel = ComponentBaseConfigModel>(
48+
store$: Store,
49+
type: string | BaseComponentTypeEnum) {
50+
return toSignal(ComponentConfigHelper.componentConfig$<ConfigType>(store$, type));
51+
}
52+
53+
public static componentEnabledConfigSignal(
54+
store$: Store,
55+
type: string | BaseComponentTypeEnum) {
56+
return toSignal(ComponentConfigHelper.componentConfig$(store$, type).pipe(map(config => config.enabled)), { initialValue: false });
57+
}
3958
}

0 commit comments

Comments
 (0)