Skip to content

Commit de73312

Browse files
committed
Merge branch 'dmdimitrov/query-builder-improvements' of https://github.com/IgniteUI/igniteui-angular into dmdimitrov/query-builder-improvements
2 parents deabe57 + 38add57 commit de73312

File tree

3 files changed

+50
-31
lines changed

3 files changed

+50
-31
lines changed

projects/igniteui-angular-elements/src/lib/icon.broadcast.service.ts

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,49 +7,68 @@ import { IconMeta } from '../../../igniteui-angular/src/lib/icon/public_api';
77
export interface SvgIcon {
88
svg: string;
99
title?: string;
10-
}
10+
}
1111

12-
export type Collection<T, U> = Map<T, U>;
12+
export type Collection<T, U> = Map<T, U>;
1313

14-
export enum ActionType {
14+
export enum ActionType {
1515
SyncState = 0,
1616
RegisterIcon = 1,
1717
UpdateIconReference = 2,
18-
}
18+
}
1919

20-
export interface BroadcastIconsChangeMessage {
20+
export interface BroadcastIconsChangeMessage {
2121
actionType: ActionType;
2222
collections?: Collection<string, Map<string, SvgIcon>>;
2323
references?: Collection<string, Map<string, IconMeta>>;
24-
}
24+
}
2525

2626
/** @hidden @internal **/
2727
@Injectable()
2828
export class IgxIconBroadcastService {
29-
private iconBroadcastChannel: BroadcastChannel;
29+
private iconBroadcastChannel: BroadcastChannel | null;
30+
3031
constructor(
3132
protected _iconService: IgxIconService,
3233
@Optional() private _platformUtil: PlatformUtil
3334
) {
3435
if (this._platformUtil?.isBrowser) {
35-
// open broadcast channel for sync with wc icon service.
36-
this.iconBroadcastChannel = new BroadcastChannel("ignite-ui-icon-channel");
37-
this.iconBroadcastChannel.onmessage = (event) => {
38-
const message = event.data as BroadcastIconsChangeMessage;
39-
if (message.actionType === ActionType.SyncState ||
40-
message.actionType === ActionType.RegisterIcon) {
41-
this.updateIconsFromCollection(message.collections);
42-
}
43-
44-
if (message.actionType === ActionType.SyncState ||
45-
message.actionType === ActionType.UpdateIconReference) {
46-
this.updateRefsFromCollection(message.references);
47-
}
48-
};
49-
// send message to sync state
36+
this.create();
37+
38+
globalThis.addEventListener('pageshow', () => this.create())
39+
globalThis.addEventListener('pagehide', () => this.dispose())
40+
}
41+
}
42+
43+
public handleEvent({ data }: MessageEvent<BroadcastIconsChangeMessage>) {
44+
const { actionType, collections, references } = data;
45+
46+
if (actionType === ActionType.SyncState || ActionType.RegisterIcon) {
47+
this.updateIconsFromCollection(collections);
48+
}
49+
50+
if (actionType === ActionType.SyncState || ActionType.UpdateIconReference) {
51+
this.updateRefsFromCollection(references);
52+
}
53+
}
54+
55+
private create() {
56+
if (!this.iconBroadcastChannel) {
57+
this.iconBroadcastChannel = new BroadcastChannel('ignite-ui-icon-channel');
58+
this.iconBroadcastChannel.addEventListener('message', this);
59+
60+
// sync state
5061
this.iconBroadcastChannel.postMessage({
5162
actionType: ActionType.SyncState
52-
});
63+
})
64+
}
65+
}
66+
67+
private dispose() {
68+
if (this.iconBroadcastChannel) {
69+
this.iconBroadcastChannel.removeEventListener('message', this);
70+
this.iconBroadcastChannel.close();
71+
this.iconBroadcastChannel = null;
5372
}
5473
}
5574

projects/igniteui-angular/src/lib/query-builder/query-builder-functions.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class QueryBuilderFunctions {
8383

8484
public static getQueryBuilderHeaderText(fix: ComponentFixture<any>) {
8585
const header = QueryBuilderFunctions.getQueryBuilderHeader(fix);
86-
const title = header.querySelector('.ig-typography__h6');
86+
const title = header.querySelector('.igx-query-builder__title');
8787
return title.textContent;
8888
}
8989

projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,12 +1680,12 @@ describe('IgxQueryBuilder', () => {
16801680
(item.querySelector('.igx-filter-tree__expression-condition') as HTMLElement).innerText == 'Not In'
16811681
)[0];
16821682
const toggleBtn = expandableItem.querySelector('.igx-filter-tree__details-button') as HTMLElement;
1683-
expect((toggleBtn.querySelector('igx-icon') as HTMLElement).innerText).toBe('unfold_less');
1683+
expect((toggleBtn.querySelector('igx-icon') as HTMLElement).innerText).toBe('unfold_more');
16841684
toggleBtn.click();
16851685
tick(100);
16861686
fix.detectChanges();
16871687

1688-
expect((toggleBtn.querySelector('igx-icon') as HTMLElement).innerText).toBe('unfold_more');
1688+
expect((toggleBtn.querySelector('igx-icon') as HTMLElement).innerText).toBe('unfold_less');
16891689
expect(fix.debugElement.query(By.css(`.${QueryBuilderConstants.QUERY_BUILDER_TREE}--level-1`)).nativeElement.checkVisibility()).toBeTrue();
16901690
}));
16911691

@@ -2114,8 +2114,8 @@ describe('IgxQueryBuilder', () => {
21142114
expect(dialogOutlet).toBeDefined();
21152115

21162116
expect(dialogOutlet.querySelector('.igx-dialog__window-title').textContent.trim()).toBe('My Confirmation');
2117-
expect(dialogOutlet.querySelector('.igx-dialog__window-content').children[0].textContent.trim()).toBe('My changing entity message');
2118-
expect(dialogOutlet.querySelector('.igx-dialog__window-content').children[1].textContent.trim()).toBe('My do not show this dialog again');
2117+
expect(dialogOutlet.querySelector('.igx-query-builder-dialog').children[0].textContent.trim()).toBe('My changing entity message');
2118+
expect(dialogOutlet.querySelector('.igx-query-builder-dialog').children[1].textContent.trim()).toBe('My do not show this dialog again');
21192119
expect(dialogOutlet.querySelector('.igx-dialog__window-actions').children[0].textContent.trim()).toBe('My Cancel');
21202120
expect(dialogOutlet.querySelector('.igx-dialog__window-actions').children[1].textContent.trim()).toBe('My Confirm');
21212121

@@ -2217,10 +2217,10 @@ export class IgxQueryBuilderSampleTestComponent implements OnInit {
22172217
template: `
22182218
<igx-query-builder #queryBuilder [entities]="this.entities" [expressionTree]="this.expressionTree">
22192219
<igx-query-builder-header [title]="'Custom Title'" [showLegend]="showLegend"></igx-query-builder-header>
2220-
<ng-template #searchValueTemplate
2221-
igxQueryBuilderSearchValue
2220+
<ng-template #searchValueTemplate
2221+
igxQueryBuilderSearchValue
22222222
let-searchValue
2223-
let-selectedField = "selectedField"
2223+
let-selectedField = "selectedField"
22242224
let-selectedCondition = "selectedCondition"
22252225
let-defaultSearchValueTemplate = "defaultSearchValueTemplate">
22262226
<input type="text" class="custom-class" required [(ngModel)]="searchValue.value"/>

0 commit comments

Comments
 (0)