Skip to content

Commit 70b328a

Browse files
committed
fix: resolve filter duplication issue in Log Explorer when removing filters
1 parent 0cad38b commit 70b328a

File tree

3 files changed

+49
-23
lines changed

3 files changed

+49
-23
lines changed

frontend/src/app/log-analyzer/explorer/log-analyzer-field/log-analyzer-field-card/log-analyzer-field-detail/log-analyzer-field-detail.component.html

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@
1111
{{top.value}}
1212
</span>
1313
<span>
14-
<i (click)="toggleFilter(top.value)" [openDelay]="500"
15-
class="icon-zoomin3 mr-2 cursor-pointer"
16-
ngbTooltip="Add to filter"
17-
placement="bottom"
18-
style="font-size: 11px"
19-
tooltipClass="utm-tooltip-bottom"></i>
20-
<i (click)="toggleFilter(top.value)" [openDelay]="500"
21-
class="icon-zoomout3 cursor-pointer"
22-
ngbTooltip="Remove from filter"
23-
placement="bottom"
24-
style="font-size: 11px"
25-
tooltipClass="utm-tooltip-bottom"></i>
26-
</span>
14+
<i (click)="toggleFilter(top.value)" [openDelay]="500"
15+
container="body"
16+
class="icon-zoomin3 mr-2 cursor-pointer"
17+
ngbTooltip="Add to filter"
18+
placement="bottom"
19+
style="font-size: 11px"
20+
tooltipClass="utm-tooltip-bottom"></i>
21+
<i (click)="removeFilter(top.value)" [openDelay]="500"
22+
container="body"
23+
class="icon-zoomout3 cursor-pointer"
24+
ngbTooltip="Remove from filter"
25+
placement="bottom"
26+
style="font-size: 11px"
27+
tooltipClass="utm-tooltip-bottom"></i>
28+
</span>
2729
</div>
2830
<div>
2931
<ngb-progressbar

frontend/src/app/log-analyzer/explorer/log-analyzer-field/log-analyzer-field-card/log-analyzer-field-detail/log-analyzer-field-detail.component.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@ export class LogAnalyzerFieldDetailComponent implements OnInit, OnDestroy {
4646
});
4747
}
4848

49-
ngOnDestroy(): void {
50-
this.subscription.unsubscribe();
51-
}
52-
5349
getFieldTopValue() {
5450
this.logAnalyzerService.getFieldTopValues(this.pattern,
5551
(((this.field.type === ElasticDataTypesEnum.TEXT ||
@@ -70,4 +66,17 @@ export class LogAnalyzerFieldDetailComponent implements OnInit, OnDestroy {
7066
status: 'ACTIVE'
7167
});
7268
}
69+
70+
removeFilter(value: string) {
71+
this.utmFilterBehavior.$filterChange.next({
72+
operator: ElasticOperatorsEnum.IS,
73+
field: this.field.name,
74+
value,
75+
status: 'INACTIVE'
76+
});
77+
}
78+
79+
ngOnDestroy(): void {
80+
this.subscription.unsubscribe();
81+
}
7382
}

frontend/src/app/shared/components/utm/filters/utm-elastic-filter/elastic-filter.component.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
1+
import {Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';
22
import {NgbActiveModal, NgbModal, NgbPopover} from '@ng-bootstrap/ng-bootstrap';
33
import {FILTER_OPERATORS} from '../../../../constants/filter-operators.const';
44
import {ElasticOperatorsEnum} from '../../../../enums/elastic-operators.enum';
@@ -8,13 +8,15 @@ import {OperatorsType} from '../../../../types/filter/operators.type';
88
import {TimeFilterType} from '../../../../types/time-filter.type';
99
import {ElasticFilterDefaultTime} from '../elastic-filter-time/elastic-filter-time.component';
1010
import {UtmFilterBehavior} from './shared/behavior/utm-filter.behavior';
11+
import {Subject} from "rxjs";
12+
import {filter, takeUntil} from "rxjs/operators";
1113

1214
@Component({
1315
selector: 'app-utm-elastic-filter',
1416
templateUrl: './elastic-filter.component.html',
1517
styleUrls: ['./elastic-filter.component.scss']
1618
})
17-
export class ElasticFilterComponent implements OnInit {
19+
export class ElasticFilterComponent implements OnInit, OnDestroy {
1820
@Output() filterChange = new EventEmitter<ElasticFilterType[]>();
1921
@Input() pattern: string;
2022
@Input() filters: ElasticFilterType[] = [];
@@ -25,6 +27,7 @@ export class ElasticFilterComponent implements OnInit {
2527
filterSelected: ElasticFilterType;
2628
indexEdit: number;
2729
editMode: boolean;
30+
destroy$: Subject<void> = new Subject<void>();
2831

2932
constructor(public modalService: NgbModal,
3033
private activeModal: NgbActiveModal,
@@ -33,11 +36,18 @@ export class ElasticFilterComponent implements OnInit {
3336

3437
ngOnInit() {
3538
this.filters = this.filters ? this.filters : [];
36-
this.utmFilterBehavior.$filterChange.subscribe(filter => {
37-
if (filter) {
38-
this.filters.push(filter);
39-
this.filterChange.emit(this.filters);
39+
40+
this.utmFilterBehavior.$filterChange
41+
.pipe(takeUntil(this.destroy$),
42+
filter(filterType => !!filterType))
43+
.subscribe(filterType => {
44+
if (filterType.status === 'ACTIVE') {
45+
this.filters.push(filterType);
46+
} else {
47+
this.filters = this.filters.filter(f => f.value !== filterType.value);
4048
}
49+
50+
this.filterChange.emit(this.filters);
4151
});
4252
}
4353

@@ -105,4 +115,9 @@ export class ElasticFilterComponent implements OnInit {
105115
resolveFilters(): ElasticFilterType[] {
106116
return this.filters.filter(value => value.operator !== ElasticOperatorsEnum.IS_IN_FIELD);
107117
}
118+
119+
ngOnDestroy(): void {
120+
this.destroy$.next();
121+
this.destroy$.complete();
122+
}
108123
}

0 commit comments

Comments
 (0)