Skip to content

Commit 6771395

Browse files
Rafaellysamir-ayoub
authored andcommitted
feat(navbar): remove a logo do menu utilizado com navbar
Ao utilizar po-menu e po-navbar com logo mantém a logo apenas no po-navbar Fixes DTHFUI-1150
1 parent 7b06ece commit 6771395

File tree

5 files changed

+111
-7
lines changed

5 files changed

+111
-7
lines changed

projects/ui/src/lib/components/po-menu/po-menu.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ export class PoMenuComponent extends PoMenuBaseComponent implements OnDestroy, O
137137
private itemSubscription: Subscription;
138138
private routeSubscription: Subscription;
139139

140-
constructor(viewRef: ViewContainerRef,
140+
constructor(public changeDetector: ChangeDetectorRef,
141+
viewRef: ViewContainerRef,
141142
private element: ElementRef,
142143
private renderer: Renderer2,
143144
private router: Router,
144145
private menuItemsService: PoMenuItemsService,
145-
private changeDetector: ChangeDetectorRef,
146146
menuService: PoMenuService) {
147147

148148
super(menuService);

projects/ui/src/lib/components/po-navbar/po-navbar-base.component.spec.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ import * as utilsFunctions from '../../utils/util';
44

55
import { PoNavbarBaseComponent, poNavbarLiteralsDefault } from './po-navbar-base.component';
66

7+
export class PoNavbarComponent extends PoNavbarBaseComponent {
8+
validateMenuLogo() {}
9+
}
10+
711
describe('PoNavbarBaseComponent:', () => {
812

9-
const component = new PoNavbarBaseComponent();
13+
const component = new PoNavbarComponent();
1014

1115
it('should be created', () => {
1216
expect(component instanceof PoNavbarBaseComponent).toBeTruthy();
@@ -91,18 +95,41 @@ describe('PoNavbarBaseComponent:', () => {
9195
expectPropertiesValues(component, 'literals', invalidValues, poNavbarLiteralsDefault[utilsFunctions.poLocaleDefault]);
9296
});
9397

94-
it('shadow: should update property with true if valid values', () => {
98+
it('shadow: should update property with true if values are valid', () => {
9599
const validValues = [true, '', 'true'];
96100

97101
expectPropertiesValues(component, 'shadow', validValues, true);
98102
});
99103

100-
it('shadow: should update property with false if invalid values', () => {
104+
it('shadow: should update property with false if values are invalid', () => {
101105
const invalidValues = [false, 'po', null, undefined, NaN];
102106

103107
expectPropertiesValues(component, 'shadow', invalidValues, false);
104108
});
105109

110+
it('logo: should call `validateMenuLogo` if has `menu`', () => {
111+
spyOn(component, 'validateMenuLogo');
112+
113+
component.menu = <any> { logo: 'logo' };
114+
component.logo = 'logo';
115+
116+
expect(component.validateMenuLogo).toHaveBeenCalled();
117+
});
118+
119+
it('logo: shouldn`t call `validateMenuLogo` if doesn`t have `menu`', () => {
120+
spyOn(component, 'validateMenuLogo');
121+
122+
component.menu = undefined;
123+
component.logo = 'logo';
124+
125+
expect(component.validateMenuLogo).not.toHaveBeenCalled();
126+
});
127+
128+
it('logo: should update property with valid values', () => {
129+
const validValues = ['any string value'];
130+
131+
expectPropertiesValues(component, 'logo', validValues, 'any string value');
132+
});
106133
});
107134

108135
});

projects/ui/src/lib/components/po-navbar/po-navbar-base.component.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ export const poNavbarLiteralsDefault = {
2525
* O componente `po-navbar` é um cabeçalho fixo que permite apresentar uma lista de links para facilitar a navegação pelas
2626
* páginas da aplicação. Também possui ícones com ações.
2727
*/
28-
export class PoNavbarBaseComponent {
28+
export abstract class PoNavbarBaseComponent {
2929

3030
private _iconActions: Array<PoNavbarIconAction> = [];
3131
private _items: Array<PoNavbarItem> = [];
3232
private _literals: PoNavbarLiterals;
33+
private _logo: string;
3334
private _shadow: boolean = false;
3435

3536
/**
@@ -109,7 +110,16 @@ export class PoNavbarBaseComponent {
109110
*
110111
* Define a logo apresentada `po-navbar`.
111112
*/
112-
@Input('p-logo') logo?: string;
113+
@Input('p-logo') set logo(value: string) {
114+
this._logo = value;
115+
116+
if (this.menu) {
117+
this.validateMenuLogo();
118+
}
119+
}
120+
get logo() {
121+
return this._logo;
122+
}
113123

114124
/**
115125
* @optional
@@ -119,6 +129,8 @@ export class PoNavbarBaseComponent {
119129
* Caso já possua um menu na aplicação o mesmo deve ser repassado para essa propriedade para que quando entre em modo
120130
* responsivo os items do `po-navbar` possam ser adicionados no primeiro item do menu definido.
121131
*
132+
* > Ao utilizar menu e navbar com logo mantém apenas a logo do navbar.
133+
*
122134
* Exemplo:
123135
*
124136
* ```
@@ -153,4 +165,6 @@ export class PoNavbarBaseComponent {
153165
return this._shadow;
154166
}
155167

168+
protected abstract validateMenuLogo(): void;
169+
156170
}

projects/ui/src/lib/components/po-navbar/po-navbar.component.spec.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,15 @@ describe('PoNavbarComponent:', () => {
387387
expect(component['changeNavbarMenuItems']).not.toHaveBeenCalled();
388388
});
389389

390+
it(`initNavbarMenu: should call 'validateMenuLogo'`, () => {
391+
component.menu = <any> { menus: [] };
392+
spyOn(component, <any> 'validateMenuLogo');
393+
394+
component['initNavbarMenu']();
395+
396+
expect(component['validateMenuLogo']).toHaveBeenCalled();
397+
});
398+
390399
it(`navbarItemsWidth: should return navbar items width`, () => {
391400
const itemsWidth = 50;
392401
const fakeThis = {
@@ -530,6 +539,51 @@ describe('PoNavbarComponent:', () => {
530539

531540
});
532541

542+
describe('validateMenuLogo', () => {
543+
544+
const logo = 'logo';
545+
546+
const fakeMenu = {
547+
logo,
548+
changeDetector: { detectChanges: () => {} }
549+
};
550+
551+
it(`should set 'menu.logo' as 'undefined' and call 'menu.changeDetector.detectChanges' if has 'logo' and 'menu.logo'`, () => {
552+
component.logo = logo;
553+
component.menu = <any>fakeMenu;
554+
555+
spyOn(component.menu.changeDetector, 'detectChanges');
556+
component['validateMenuLogo']();
557+
fixture.detectChanges();
558+
559+
expect(component.menu.logo).toBeUndefined();
560+
expect(component.menu.changeDetector.detectChanges).toHaveBeenCalled();
561+
});
562+
563+
it(`shouldn't call 'menu.changeDetector.detectChanges' if doesn't have 'menu.logo'`, () => {
564+
component.logo = logo;
565+
component.menu = <any>fakeMenu;
566+
component.menu.logo = undefined;
567+
568+
spyOn(component.menu.changeDetector, 'detectChanges');
569+
570+
component['validateMenuLogo']();
571+
572+
expect(component.menu.changeDetector.detectChanges).not.toHaveBeenCalled();
573+
});
574+
575+
it(`shouldn't call 'menu.changeDetector.detectChanges' if doesn't have 'logo'`, () => {
576+
component.logo = undefined;
577+
component.menu = <any>fakeMenu;
578+
579+
spyOn(component.menu.changeDetector, 'detectChanges');
580+
581+
component['validateMenuLogo']();
582+
583+
expect(component.menu.changeDetector.detectChanges).not.toHaveBeenCalled();
584+
});
585+
});
586+
533587
});
534588

535589
describe('Template:', () => {

projects/ui/src/lib/components/po-navbar/po-navbar.component.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ export class PoNavbarComponent extends PoNavbarBaseComponent implements AfterVie
149149
this.changeNavbarMenuItems(true, this.menuItems, this.items, this.literals.navbarLinks);
150150
}
151151

152+
this.validateMenuLogo();
153+
152154
this.mediaQuery.addListener(this.onMediaQueryChange);
153155
}
154156

@@ -191,4 +193,11 @@ export class PoNavbarComponent extends PoNavbarBaseComponent implements AfterVie
191193
}
192194
}
193195

196+
protected validateMenuLogo() {
197+
if (this.menu.logo && this.logo) {
198+
this.menu.logo = undefined;
199+
this.menu.changeDetector.detectChanges();
200+
}
201+
}
202+
194203
}

0 commit comments

Comments
 (0)