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: `