diff --git a/projects/components/src/navigation/navigation-list.component.test.ts b/projects/components/src/navigation/navigation-list.component.test.ts
index b29e3800d..ecc217e79 100644
--- a/projects/components/src/navigation/navigation-list.component.test.ts
+++ b/projects/components/src/navigation/navigation-list.component.test.ts
@@ -1,6 +1,6 @@
import { ActivatedRoute } from '@angular/router';
import { IconType } from '@hypertrace/assets-library';
-import { MemoizeModule, NavigationService } from '@hypertrace/common';
+import { FeatureStateResolver, MemoizeModule, NavigationService } from '@hypertrace/common';
import { createHostFactory, mockProvider, SpectatorHost } from '@ngneat/spectator/jest';
import { MockComponent } from 'ng-mocks';
import { EMPTY, of } from 'rxjs';
@@ -21,6 +21,9 @@ describe('Navigation List Component', () => {
imports: [LetAsyncModule, MemoizeModule],
providers: [
mockProvider(ActivatedRoute, activatedRoute),
+ mockProvider(FeatureStateResolver, {
+ getFeatureState: jest.fn().mockReturnValue(of(false))
+ }),
mockProvider(NavigationService, {
navigation$: EMPTY,
navigateWithinApp: jest.fn(),
@@ -78,4 +81,36 @@ describe('Navigation List Component', () => {
expect(spectator.query('.navigation-list')).not.toHaveClass('expanded');
expect(spectator.query(IconComponent)?.icon).toEqual(IconType.TriangleRight);
});
+
+ test('should only show one header 1', () => {
+ const navItems: NavItemConfig[] = [
+ {
+ type: NavItemType.Header,
+ label: 'header 1'
+ },
+ {
+ type: NavItemType.Link,
+ icon: 'icon',
+ label: 'label-1',
+ features: ['feature'],
+ matchPaths: ['']
+ },
+ {
+ type: NavItemType.Link,
+ icon: 'icon',
+ label: 'label-2',
+ matchPaths: ['']
+ },
+ {
+ type: NavItemType.Header,
+ label: 'header 2'
+ }
+ ];
+
+ spectator = createHost(``, {
+ hostProps: { navItems: navItems }
+ });
+ expect(spectator.queryAll('.nav-header')).toHaveLength(1);
+ expect(spectator.queryAll('.nav-header .label')[0]).toHaveText('header 1');
+ });
});
diff --git a/projects/components/src/navigation/navigation-list.component.ts b/projects/components/src/navigation/navigation-list.component.ts
index 3c0025d02..4e3b52461 100644
--- a/projects/components/src/navigation/navigation-list.component.ts
+++ b/projects/components/src/navigation/navigation-list.component.ts
@@ -1,8 +1,9 @@
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { IconType } from '@hypertrace/assets-library';
-import { NavigationService } from '@hypertrace/common';
-import { Observable } from 'rxjs';
+import { FeatureState, FeatureStateResolver, NavigationService } from '@hypertrace/common';
+import { isEmpty } from 'lodash-es';
+import { combineLatest, Observable, of } from 'rxjs';
import { map, startWith } from 'rxjs/operators';
import { IconSize } from '../icon/icon-size';
@@ -13,13 +14,15 @@ import { IconSize } from '../icon/icon-size';
template: `