Skip to content

Commit a120cd1

Browse files
feat(menu): adiciona evento p-expanded
1 parent 8536326 commit a120cd1

File tree

4 files changed

+59
-17
lines changed

4 files changed

+59
-17
lines changed

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Directive } from '@angular/core';
2-
import { fakeAsync, tick } from '@angular/core/testing';
1+
import { Component } from '@angular/core';
2+
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
33
import { of } from 'rxjs';
44

55
import { expectPropertiesValues } from './../../util-test/util-expect.spec';
@@ -8,7 +8,10 @@ import { PoThemeA11yEnum } from '../../services';
88
import { PoMenuBaseComponent } from './po-menu-base.component';
99
import { PoMenuFilter } from './po-menu-filter/po-menu-filter.interface';
1010

11-
@Directive()
11+
@Component({
12+
template: '',
13+
standalone: true
14+
})
1215
export class PoMenuComponent extends PoMenuBaseComponent {
1316
protected validateCollapseClass() {}
1417
protected checkActiveMenuByUrl() {}
@@ -33,8 +36,19 @@ describe('PoMenuBaseComponent:', () => {
3336
getFilteredData: () => {}
3437
};
3538

36-
beforeEach(() => {
37-
component = new PoMenuComponent(menuGlobalService, menuService, languageService);
39+
beforeEach(async () => {
40+
await TestBed.configureTestingModule({
41+
imports: [PoMenuComponent],
42+
providers: [
43+
{ provide: 'PoMenuGlobalService', useValue: menuGlobalService },
44+
{ provide: 'PoMenuService', useValue: menuService },
45+
{ provide: 'PoLanguageService', useValue: languageService }
46+
]
47+
}).compileComponents();
48+
49+
component = TestBed.runInInjectionContext(
50+
() => new PoMenuComponent(menuGlobalService, menuService, languageService)
51+
);
3852
component.menus = [
3953
{
4054
label: 'Level 1.1',

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Directive, HostBinding, HostListener, Input } from '@angular/core';
1+
import { Directive, HostBinding, HostListener, Input, output } from '@angular/core';
22

33
import {
44
convertToBoolean,
@@ -129,6 +129,19 @@ export abstract class PoMenuBaseComponent {
129129
*/
130130
@Input({ alias: 'p-automatic-toggle', transform: convertToBoolean }) automaticToggle: boolean = false;
131131

132+
/**
133+
* @optional
134+
*
135+
* @description
136+
*
137+
* Evento emitido toda vez que o estado do menu muda, enviando `true` quando expandido e `false` quando colapsado.
138+
*
139+
* ```html
140+
* <po-menu (p-toggle)="onMenuToggle($event)"></po-menu>
141+
* ```
142+
*/
143+
toggleChange = output<boolean>({ alias: 'p-toggle' });
144+
132145
/**
133146
* @optional
134147
*

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,10 @@ describe('PoMenuComponent:', () => {
10291029
menuItemsService: {
10301030
sendToChildMenuClicked: () => {}
10311031
},
1032-
updateMenu: () => {}
1032+
updateMenu: () => {},
1033+
setCollapsed: value => {
1034+
fakeThis.collapsed = value;
1035+
}
10331036
};
10341037

10351038
component['toggleMenuCollapse'].call(fakeThis, false);
@@ -1048,7 +1051,8 @@ describe('PoMenuComponent:', () => {
10481051
menuItemsService: {
10491052
sendToChildMenuClicked: () => {}
10501053
},
1051-
updateMenu: () => {}
1054+
updateMenu: () => {},
1055+
setCollapsed: () => {}
10521056
};
10531057

10541058
spyOn(fakeThis, 'updateMenu');
@@ -1071,7 +1075,8 @@ describe('PoMenuComponent:', () => {
10711075
menuItemsService: {
10721076
sendToChildMenuClicked: () => {}
10731077
},
1074-
updateMenu: () => {}
1078+
updateMenu: () => {},
1079+
setCollapsed: () => {}
10751080
};
10761081

10771082
spyOn(fakeThis, 'toggleGroupedMenuItem');
@@ -1096,7 +1101,8 @@ describe('PoMenuComponent:', () => {
10961101
menuItemsService: {
10971102
sendToChildMenuClicked: () => {}
10981103
},
1099-
updateMenu: () => {}
1104+
updateMenu: () => {},
1105+
setCollapsed: () => {}
11001106
};
11011107

11021108
spyOn(fakeThis, 'toggleGroupedMenuItem');
@@ -1117,7 +1123,8 @@ describe('PoMenuComponent:', () => {
11171123
getActiveMenuParent: () => {},
11181124
toggleGroupedMenuItem: () => {},
11191125
activeMenuItem: undefined,
1120-
updateMenu: () => {}
1126+
updateMenu: () => {},
1127+
setCollapsed: () => {}
11211128
};
11221129

11231130
spyOn(fakeThis, 'toggleGroupedMenuItem');
@@ -1138,7 +1145,8 @@ describe('PoMenuComponent:', () => {
11381145
getActiveMenuParent: () => {},
11391146
toggleGroupedMenuItem: () => {},
11401147
activeMenuItem: undefined,
1141-
updateMenu: () => {}
1148+
updateMenu: () => {},
1149+
setCollapsed: () => {}
11421150
};
11431151

11441152
spyOn(fakeThis, 'toggleGroupedMenuItem');
@@ -1160,7 +1168,8 @@ describe('PoMenuComponent:', () => {
11601168
menuItemsService: {
11611169
sendToChildMenuClicked: arg => {}
11621170
},
1163-
updateMenu: () => {}
1171+
updateMenu: () => {},
1172+
setCollapsed: () => {}
11641173
};
11651174

11661175
spyOn(fakeThis, 'activateCollapseSubMenuItem');
@@ -1187,7 +1196,8 @@ describe('PoMenuComponent:', () => {
11871196
menuItemsService: {
11881197
sendToChildMenuClicked: () => {}
11891198
},
1190-
updateMenu: () => {}
1199+
updateMenu: () => {},
1200+
setCollapsed: () => {}
11911201
};
11921202

11931203
spyOn(fakeThis, 'activateCollapseSubMenuItem');

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,14 +319,14 @@ export class PoMenuComponent
319319

320320
onMouseEnter(): void {
321321
if (this.collapsed && this.automaticToggle) {
322-
this.collapsed = false;
322+
this.setCollapsed(false);
323323
this.allowCollapseHover = true;
324324
}
325325
}
326326

327327
onMouseLeave(): void {
328328
if (!this.collapsed && this.allowCollapseHover && this.automaticToggle) {
329-
this.collapsed = true;
329+
this.setCollapsed(true);
330330
}
331331
}
332332

@@ -585,7 +585,7 @@ export class PoMenuComponent
585585
}
586586

587587
private toggleMenuCollapse(collapsed: boolean = false) {
588-
this.collapsed = collapsed;
588+
this.setCollapsed(collapsed);
589589

590590
if (this.groupedMenuItem && this.activeMenuItem) {
591591
this.groupedMenuItem =
@@ -628,4 +628,9 @@ export class PoMenuComponent
628628
this.menuPrevious = this.stringify(this.menus);
629629
this.validateMenus(this.menus);
630630
}
631+
632+
private setCollapsed(value: boolean) {
633+
this.collapsed = value;
634+
this.toggleChange.emit(!value);
635+
}
631636
}

0 commit comments

Comments
 (0)