Skip to content

Commit b11f70f

Browse files
committed
fix(filter-bar): event is emitted 2 times when selecting and closing a filter (#DS-3862)
1 parent 92c0701 commit b11f70f

File tree

5 files changed

+43
-27
lines changed

5 files changed

+43
-27
lines changed

packages/components/filter-bar/filter-bar.karma-spec.ts

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -498,11 +498,7 @@ describe('KbqFilterBar', () => {
498498
@Component({
499499
selector: 'test-app',
500500
template: `
501-
<kbq-filter-bar
502-
[(filter)]="activeFilter"
503-
[pipeTemplates]="pipeTemplates"
504-
(filterChange)="onFilterChange($event)"
505-
>
501+
<kbq-filter-bar [(filter)]="activeFilter" [pipeTemplates]="pipeTemplates">
506502
<kbq-filters
507503
[filters]="filters"
508504
(onChangeFilter)="onChangeFilter($event)"
@@ -516,7 +512,7 @@ describe('KbqFilterBar', () => {
516512
<ng-container *kbqPipe="pipe" />
517513
}
518514
519-
<kbq-pipe-add (onAddPipe)="onAddPipe($event)" />
515+
<kbq-pipe-add />
520516
521517
<kbq-filter-reset (onResetFilter)="onResetFilter($event)" />
522518
@@ -1056,25 +1052,14 @@ class BaseFunctions {
10561052
}
10571053
];
10581054

1059-
onAddPipe(pipe: KbqPipeTemplate) {
1060-
console.log('onAddPipe: ', pipe);
1061-
}
1062-
1063-
onFilterChange(filter: KbqFilter | null) {
1064-
console.log('onFilterChange: ', filter);
1065-
}
1066-
10671055
onSelectFilter(filter: KbqFilter) {
1068-
console.log('onSelectFilter: ', filter);
1069-
10701056
this.activeFilter = filter;
10711057
}
10721058

10731059
onSaveAsNewFilter({ filter, filterBar }) {
10741060
this.filters.push(filter);
10751061

10761062
filterBar.filters.filterSavedSuccessfully();
1077-
// filterBar.filters.filterSavedUnsuccessfully({ nameAlreadyExists: true, text: 'custom error text' });
10781063
}
10791064

10801065
onSaveFilter({ filter, filterBar }) {

packages/components/filter-bar/pipes/pipe-multi-select.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,13 @@ export class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> i
134134
if (this.selectionAllInProgress) return;
135135

136136
this.data.value = item;
137-
this.filterBar?.onChangePipe.emit(this.data);
137+
138+
if (this.allOptionsSelected) {
139+
this.filterBar?.onChangePipe.emit({ ...this.data, value: [] });
140+
} else {
141+
this.filterBar?.onChangePipe.emit(this.data);
142+
}
143+
138144
this.stateChanges.next();
139145
}
140146

@@ -154,7 +160,7 @@ export class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> i
154160
}
155161

156162
/** @docs-private */
157-
toggleSelectionAll() {
163+
toggleSelectionAll(emitEvent: boolean = true) {
158164
this.selectionAllInProgress = true;
159165

160166
if (this.allVisibleOptionsSelected) {
@@ -166,7 +172,15 @@ export class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> i
166172
this.selectionAllInProgress = false;
167173

168174
this.data.value = [...this.select.value];
169-
this.filterBar?.onChangePipe.emit(this.data);
175+
176+
if (emitEvent) {
177+
if (this.allOptionsSelected) {
178+
this.filterBar?.onChangePipe.emit({ ...this.data, value: [] });
179+
} else {
180+
this.filterBar?.onChangePipe.emit(this.data);
181+
}
182+
}
183+
170184
this.stateChanges.next();
171185
}
172186

@@ -175,7 +189,7 @@ export class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> i
175189

176190
onClose() {
177191
if (this.allOptionsSelected) {
178-
this.toggleSelectionAll();
192+
this.toggleSelectionAll(false);
179193
}
180194
}
181195

packages/components/filter-bar/pipes/pipe-multi-tree-select.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,13 @@ export class KbqPipeMultiTreeSelectComponent extends KbqBasePipe<KbqSelectValue[
164164
this.toggleParents(option.data.parent);
165165

166166
this.data.value = this.select.selectedValues;
167-
this.filterBar?.onChangePipe.emit(this.data);
167+
168+
if (this.allOptionsSelected) {
169+
this.filterBar?.onChangePipe.emit({ ...this.data, value: [] });
170+
} else {
171+
this.filterBar?.onChangePipe.emit(this.data);
172+
}
173+
168174
this.stateChanges.next();
169175
}
170176

@@ -174,7 +180,7 @@ export class KbqPipeMultiTreeSelectComponent extends KbqBasePipe<KbqSelectValue[
174180
}
175181
}
176182

177-
toggleSelectAllNode() {
183+
toggleSelectAllNode(emitEvent: boolean = true) {
178184
if (this.select.search?.ngControl.value) {
179185
const renderedOptions = this.tree.renderedOptions.filter(({ value }) => value !== kbqTreeSelectAllValue);
180186

@@ -196,7 +202,14 @@ export class KbqPipeMultiTreeSelectComponent extends KbqBasePipe<KbqSelectValue[
196202

197203
this.data.value = [...this.select.selectedValues];
198204

199-
this.filterBar?.onChangePipe.emit(this.data);
205+
if (emitEvent) {
206+
if (this.allOptionsSelected) {
207+
this.filterBar?.onChangePipe.emit({ ...this.data, value: [] });
208+
} else {
209+
this.filterBar?.onChangePipe.emit(this.data);
210+
}
211+
}
212+
200213
this.stateChanges.next();
201214
}
202215

@@ -233,7 +246,7 @@ export class KbqPipeMultiTreeSelectComponent extends KbqBasePipe<KbqSelectValue[
233246

234247
onClose() {
235248
if (this.allOptionsSelected) {
236-
this.toggleSelectAllNode();
249+
this.toggleSelectAllNode(false);
237250
}
238251
}
239252

packages/docs-examples/components/filter-bar/filter-bar-pipe-types/filter-bar-pipe-types-example.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const DATA_OBJECT = {
3939
LuxonDateModule
4040
],
4141
template: `
42-
<kbq-filter-bar [(filter)]="activeFilter" [pipeTemplates]="pipeTemplates">
42+
<kbq-filter-bar [(filter)]="activeFilter" [pipeTemplates]="pipeTemplates" (onChangePipe)="onChangePipe($event)">
4343
@for (pipe of activeFilter.pipes; track pipe) {
4444
<ng-container *kbqPipe="pipe" />
4545
}
@@ -148,6 +148,10 @@ export class FilterBarPipeTypesExample {
148148
this.activeFilter = this.getDefaultFilter();
149149
}
150150

151+
onChangePipe($event) {
152+
console.log('onChangePipe: ', $event);
153+
}
154+
151155
getDefaultFilter(): KbqFilter {
152156
return {
153157
name: '',

tools/public_api_guard/components/filter-bar.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ export class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> i
537537
searchControl: UntypedFormControl;
538538
select: KbqSelect;
539539
get selected(): KbqSelectValue[] | null;
540-
toggleSelectionAll(): void;
540+
toggleSelectionAll(emitEvent?: boolean): void;
541541
toggleSelectionAllByEnterKey(): void;
542542
// (undocumented)
543543
static ɵcmp: i0.ɵɵComponentDeclaration<KbqPipeMultiSelectComponent, "kbq-pipe-multi-select", never, {}, {}, never, never, true, never>;

0 commit comments

Comments
 (0)