Skip to content

Commit d3083ac

Browse files
committed
feat(package): individual module imports for navigation components (#393)
This allows components to be imported individually without having to install an unused, optional dependency. Deprecations - NavigationItemConfig: Use VerticalNavigationItem or ApplicationLauncherItem - NavigationModule: Use ApplicationLauncherModule or VerticalNavigationModule
1 parent f7b3b01 commit d3083ac

15 files changed

+193
-67
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { NavigationItemBase } from '../navigation-item-base';
2+
3+
/**
4+
* A config containing properties for application launcher items
5+
*/
6+
export class ApplicationLauncherItem extends NavigationItemBase {}

src/app/navigation/application-launcher/application-launcher.component.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown';
1212
import { TooltipModule } from 'ngx-bootstrap';
1313

1414
import { ApplicationLauncherComponent } from './application-launcher.component';
15-
import { NavigationItemConfig } from '../navigation-item-config';
15+
import { ApplicationLauncherItem } from './application-launcher-item';
1616

1717
describe('Application Launcher componet', () => {
1818
let comp: ApplicationLauncherComponent;
1919
let fixture: ComponentFixture<ApplicationLauncherComponent>;
20-
let navigationItems: NavigationItemConfig[];
20+
let navigationItems: ApplicationLauncherItem[];
2121

2222
beforeEach(() => {
2323
navigationItems = [{

src/app/navigation/application-launcher/application-launcher.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
ViewEncapsulation
66
} from '@angular/core';
77

8-
import { NavigationItemConfig } from '../navigation-item-config';
8+
import { ApplicationLauncherItem } from './application-launcher-item';
99

1010
@Component({
1111
encapsulation: ViewEncapsulation.None,
@@ -25,7 +25,7 @@ export class ApplicationLauncherComponent implements OnInit {
2525
/**
2626
* The navigation items used to build the menu
2727
*/
28-
@Input() items: NavigationItemConfig[];
28+
@Input() items: ApplicationLauncherItem[];
2929

3030
/**
3131
* Use a custom label for the launcher, default: Application Launcher
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { CommonModule } from '@angular/common';
2+
import { NgModule } from '@angular/core';
3+
4+
import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown';
5+
6+
import { ApplicationLauncherComponent } from './application-launcher.component';
7+
8+
/**
9+
* A module containing objects associated with the application laucnher components
10+
*/
11+
@NgModule({
12+
imports: [
13+
BsDropdownModule.forRoot(),
14+
CommonModule
15+
],
16+
declarations: [ApplicationLauncherComponent],
17+
exports: [ApplicationLauncherComponent],
18+
providers: [BsDropdownConfig]
19+
})
20+
export class ApplicationLauncherModule {}

src/app/navigation/application-launcher/example/application-launcher-example.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
ViewEncapsulation
55
} from '@angular/core';
66

7-
import { NavigationItemConfig } from '../../navigation-item-config';
7+
import { ApplicationLauncherItem } from '../application-launcher-item';
88

99
@Component({
1010
encapsulation: ViewEncapsulation.None,
@@ -13,7 +13,7 @@ import { NavigationItemConfig } from '../../navigation-item-config';
1313
})
1414
export class ApplicationLauncherExampleComponent implements OnInit {
1515
disabled: boolean = false;
16-
navigationItems: NavigationItemConfig[];
16+
navigationItems: ApplicationLauncherItem[];
1717
showIcons: boolean = true;
1818

1919
ngOnInit(): void {

src/app/navigation/application-launcher/example/application-launcher-example.module.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ import { NgModule } from '@angular/core';
44

55
import { TabsetConfig, TabsModule } from 'ngx-bootstrap/tabs';
66

7-
import { NavigationModule } from '../../navigation.module';
87
import { DemoComponentsModule } from '../../../../demo/components/demo-components.module';
98
import { ApplicationLauncherExampleComponent } from './application-launcher-example.component';
9+
import { ApplicationLauncherModule } from '../application-launcher.module';
1010
import { RouterModule } from '@angular/router';
1111

1212
@NgModule({
1313
imports: [
14+
ApplicationLauncherModule,
1415
CommonModule,
1516
DemoComponentsModule,
1617
FormsModule,
1718
RouterModule,
18-
NavigationModule,
1919
TabsModule.forRoot()
2020
],
2121
declarations: [ApplicationLauncherExampleComponent],
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* A config containing properties for navigation items
3+
*/
4+
export class NavigationItemBase {
5+
/**
6+
* Badges to display information about the navigation item
7+
*/
8+
badges?: any[];
9+
10+
/**
11+
* The icon class to use for icons displayed to the left of text
12+
*/
13+
iconStyleClass?: string;
14+
15+
/**
16+
* Target for URL (e.g., _blank)
17+
*/
18+
target?: string;
19+
20+
/**
21+
* Title for the navigation item
22+
*/
23+
title: string;
24+
25+
/**
26+
* Link to navigate to
27+
*/
28+
url?: string;
29+
}

src/app/navigation/navigation-item-config.ts

+11-22
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,11 @@
1+
import { NavigationItemBase } from './navigation-item-base';
2+
13
/**
24
* A config containing properties for navigation items
5+
*
6+
* @deprecated Use VerticalNavigationItem, or ApplicationLauncherItem
37
*/
4-
export class NavigationItemConfig {
5-
6-
/**
7-
* Title for the navigation item
8-
*/
9-
title: string;
10-
11-
/**
12-
* The icon class to use for icons displayed to the left of text
13-
*/
14-
iconStyleClass?: string;
15-
16-
/**
17-
* Link to navigate to
18-
*/
19-
url?: string;
20-
21-
/**
22-
* Badges to display information about the navigation item
23-
*/
24-
badges?: any[];
25-
8+
export class NavigationItemConfig extends NavigationItemBase {
269
/**
2710
* Navigation children (used for secondary and tertiary navigation)
2811
*/
@@ -67,4 +50,10 @@ export class NavigationItemConfig {
6750
* Internal variable used for blur timeout
6851
*/
6952
blurTimeout?: any;
53+
54+
constructor() {
55+
super();
56+
console.log('patternfly-ng: NavigationItemConfig is deprecated; use VerticalNavigationItem ' +
57+
'or ApplicationLauncherItem');
58+
}
7059
}
+19-11
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,37 @@
11
import { CommonModule } from '@angular/common';
22
import { NgModule } from '@angular/core';
33

4-
import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown';
5-
import { TooltipConfig, TooltipModule } from 'ngx-bootstrap/tooltip';
6-
4+
import { ApplicationLauncherComponent } from './application-launcher/application-launcher.component';
5+
import { ApplicationLauncherModule } from './application-launcher/application-launcher.module';
76
import { NavigationItemConfig } from './navigation-item-config';
87
import { VerticalNavigationComponent } from './vertical-navigation/vertical-navigation.component';
9-
import { WindowReference } from '../utilities/window.reference';
10-
import { ApplicationLauncherComponent } from './application-launcher/application-launcher.component';
8+
import { VerticalNavigationModule } from './vertical-navigation/vertical-navigation.module';
119

1210
export {
1311
NavigationItemConfig
1412
};
1513

1614
/**
1715
* A module containing objects associated with the navigation components
16+
*
17+
* @deprecated Use individual module imports
18+
*
19+
* import {
20+
* ApplicationLauncherModule,
21+
* VerticalNavigationModule
22+
* } from 'patternfly-ng/navigation';
1823
*/
1924
@NgModule({
2025
imports: [
21-
BsDropdownModule.forRoot(),
26+
ApplicationLauncherModule,
2227
CommonModule,
23-
TooltipModule.forRoot()
28+
VerticalNavigationModule
2429
],
25-
declarations: [ ApplicationLauncherComponent, VerticalNavigationComponent],
26-
exports: [ ApplicationLauncherComponent, VerticalNavigationComponent],
27-
providers: [BsDropdownConfig, TooltipConfig, WindowReference]
30+
exports: [ ApplicationLauncherComponent, VerticalNavigationComponent]
2831
})
29-
export class NavigationModule {}
32+
export class NavigationModule {
33+
constructor() {
34+
console.log('patternfly-ng: NavigationModule is deprecated; use ApplicationLauncherModule ' +
35+
'or VerticalNavigationModule');
36+
}
37+
}

src/app/navigation/vertical-navigation/example/vertical-navigation-example.component.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import {
22
ChangeDetectorRef,
33
Component,
4-
OnInit, ViewEncapsulation
4+
OnInit,
5+
ViewEncapsulation
56
} from '@angular/core';
67
import { Router } from '@angular/router';
7-
import { NavigationItemConfig } from '../../navigation-item-config';
8+
9+
import { VerticalNavigationItem } from '../vertical-navigation-item';
810

911
@Component({
1012
encapsulation: ViewEncapsulation.None,
@@ -44,7 +46,7 @@ import { NavigationItemConfig } from '../../navigation-item-config';
4446
export class VerticalNavigationExampleComponent implements OnInit {
4547

4648
showExample: boolean = false;
47-
navigationItems: NavigationItemConfig[];
49+
navigationItems: VerticalNavigationItem[];
4850
actionText: string = '';
4951

5052
constructor(private chRef: ChangeDetectorRef, private router: Router) {
@@ -276,11 +278,11 @@ export class VerticalNavigationExampleComponent implements OnInit {
276278
this.chRef.detectChanges();
277279
}
278280

279-
onItemClicked($event: NavigationItemConfig): void {
281+
onItemClicked($event: VerticalNavigationItem): void {
280282
this.actionText += 'Item Clicked: ' + $event.title + '\n';
281283
}
282284

283-
onNavigation($event: NavigationItemConfig): void {
285+
onNavigation($event: VerticalNavigationItem): void {
284286
this.actionText += 'Navigation event fired: ' + $event.title + '\n';
285287
}
286288
}

src/app/navigation/vertical-navigation/example/vertical-navigation-example.module.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@ import { NgModule } from '@angular/core';
55
import { TabsetConfig, TabsModule } from 'ngx-bootstrap/tabs';
66
import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown';
77

8-
import { NavigationModule } from '../../navigation.module';
98
import { DemoComponentsModule } from '../../../../demo/components/demo-components.module';
109
import { VerticalNavigationExampleComponent } from './vertical-navigation-example.component';
10+
import { VerticalNavigationModule } from '../vertical-navigation.module';
1111
import { RouterModule } from '@angular/router';
1212

1313
@NgModule({
1414
imports: [
15+
BsDropdownModule.forRoot(),
1516
CommonModule,
1617
DemoComponentsModule,
1718
FormsModule,
1819
RouterModule,
19-
NavigationModule,
2020
TabsModule.forRoot(),
21-
BsDropdownModule.forRoot()
21+
VerticalNavigationModule
2222
],
2323
declarations: [VerticalNavigationExampleComponent],
2424
exports: [VerticalNavigationExampleComponent],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { NavigationItemBase } from '../navigation-item-base';
2+
3+
/**
4+
* A config containing properties for vertical navigation items
5+
*/
6+
export class VerticalNavigationItem extends NavigationItemBase {
7+
/**
8+
* Navigation children (used for secondary and tertiary navigation)
9+
*/
10+
children?: VerticalNavigationItem[];
11+
12+
/**
13+
* Indicate if the item should be active on load
14+
*/
15+
activeOnLoad?: boolean;
16+
17+
/**
18+
* Track the active state of the navigation item
19+
*/
20+
trackActiveState?: boolean;
21+
22+
/**
23+
* Track the hover state of the navigation item
24+
*/
25+
trackHoverState?: boolean;
26+
27+
/**
28+
* Indicates if the child secondary menu is opened
29+
*/
30+
secondaryCollapsed?: boolean;
31+
32+
/**
33+
* Indicates if the child tertiary menu is opened
34+
*/
35+
tertiaryCollapsed?: boolean;
36+
37+
/**
38+
* Indicates if this is a mobile item
39+
*/
40+
mobileItem?: boolean;
41+
42+
/**
43+
* Internal variable used for hovering timeout
44+
*/
45+
hoverTimeout?: any;
46+
47+
/**
48+
* Internal variable used for blur timeout
49+
*/
50+
blurTimeout?: any;
51+
}

src/app/navigation/vertical-navigation/vertical-navigation.component.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import {
66
import { By } from '@angular/platform-browser';
77
import { FormsModule } from '@angular/forms';
88

9-
import { NavigationItemConfig } from '../navigation-item-config';
109
import { RouterTestingModule } from '@angular/router/testing';
1110
import { TooltipModule } from 'ngx-bootstrap';
1211
import { VerticalNavigationComponent } from './vertical-navigation.component';
12+
import { VerticalNavigationItem } from './vertical-navigation-item';
1313
import { WindowReference } from '../../utilities/window.reference';
1414

1515
describe('Vertical Navigation component - ', () => {
1616
let comp: VerticalNavigationComponent;
1717
let fixture: ComponentFixture<VerticalNavigationComponent>;
18-
let navigationItems: NavigationItemConfig[];
18+
let navigationItems: VerticalNavigationItem[];
1919
let navigateItem, clickItem;
2020

2121
beforeEach(() => {

0 commit comments

Comments
 (0)