Skip to content

Commit 9651610

Browse files
committed
feat(rule-list): update pagination and filter functionality with improved item size and input handling
Signed-off-by: Manuel Abascal <mjabascal10@gmail.com>
1 parent 121bec9 commit 9651610

File tree

5 files changed

+39
-40
lines changed

5 files changed

+39
-40
lines changed

frontend/src/app/rule-management/app-rule/components/rule-list/rule-list.component.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@
103103
[pageSize]="request.size"
104104
[rotate]="true"
105105
[size]="'sm'"></ngb-pagination>
106-
<app-utm-items-per-page (itemsInPage)="onItemsPerPageChange($event)"
106+
<app-utm-items-per-page [itemsAmount]="request.size"
107+
(itemsInPage)="onItemsPerPageChange($event)"
107108
class="ml-3">
108109
</app-utm-items-per-page>
109110
</div>

frontend/src/app/rule-management/app-rule/components/rule-list/rule-list.component.ts

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import {HttpResponse} from '@angular/common/http';
22
import {Component, Input, OnDestroy, OnInit} from '@angular/core';
3-
import {ActivatedRoute, Router} from '@angular/router';
3+
import {ActivatedRoute} from '@angular/router';
44
import {NgbModal, NgbModalRef} from '@ng-bootstrap/ng-bootstrap';
5-
import {NgxSpinnerService} from 'ngx-spinner';
65
import {merge, Observable, of, Subject} from 'rxjs';
76
import {catchError, filter, finalize, map, switchMap, takeUntil, tap} from 'rxjs/operators';
8-
import { SortEvent } from 'src/app/shared/directives/sortable/type/sort-event';
7+
import {SortEvent} from 'src/app/shared/directives/sortable/type/sort-event';
98
import {UtmToastService} from '../../../../shared/alert/utm-toast.service';
109
import {
1110
ModalConfirmationComponent
@@ -14,7 +13,7 @@ import {ALERT_TIMESTAMP_FIELD} from '../../../../shared/constants/alert/alert-fi
1413
import {Actions} from '../../../app-correlation-management/models/config.type';
1514
import {ConfigService} from '../../../app-correlation-management/services/config.service';
1615
import {RULE_FIELDS} from '../../../models/rule.constant';
17-
import { Rule, RULE_REQUEST} from '../../../models/rule.model';
16+
import {Rule, RULE_REQUEST} from '../../../models/rule.model';
1817
import {FilterService} from '../../../services/filter.service';
1918
import {RuleService} from '../../../services/rule.service';
2019
import {AddRuleComponent} from '../add-rule/add-rule.component';
@@ -29,9 +28,7 @@ import {RuleViewComponent} from '../see-rule/rule-view.component';
2928
})
3029
export class RuleListComponent implements OnInit, OnDestroy {
3130

32-
@Input()
33-
// rulesResponse$: Observable<HttpResponse<Rule[]>>;
34-
rules$: Observable<Rule[]>;
31+
@Input() rules$: Observable<Rule[]>;
3532
rules: Rule[];
3633

3734
sortEvent: SortEvent;
@@ -57,7 +54,8 @@ export class RuleListComponent implements OnInit, OnDestroy {
5754
private ruleService: RuleService,
5855
private modalService: NgbModal,
5956
private utmToast: UtmToastService,
60-
private configService: ConfigService) { }
57+
private configService: ConfigService) {
58+
}
6159

6260
ngOnInit() {
6361

@@ -69,36 +67,36 @@ export class RuleListComponent implements OnInit, OnDestroy {
6967
this.route.data
7068
.pipe(
7169
tap((data: { response: HttpResponse<Rule[]> }) => {
72-
this.totalItems = parseInt(data.response.headers.get('X-Total-Count') || '0', 10);
7370
this.isInitialized = true;
7471
}),
7572
map((data: { response: HttpResponse<Rule[]> }) => data.response))
7673
).pipe(
77-
map(( response: HttpResponse<Rule[]>) => response.body)
74+
tap((response: HttpResponse<Rule[]>) => this.totalItems = parseInt(response.headers.get('X-Total-Count') || '0', 10)),
75+
map((response: HttpResponse<Rule[]>) => response.body)
7876
);
7977

8078
this.filterService.filterChange
81-
.pipe(
82-
takeUntil(this.destroy$),
83-
filter( (request: { prop: string, values: any }) => !!request),
84-
tap((request) => {
85-
if (request && Object.keys(request).length === 0) {
86-
this.request = RULE_REQUEST;
87-
} else {
88-
this.request = {
89-
...RULE_REQUEST,
90-
[request.prop]: request.values.length > 0 ? request.values : null
91-
};
92-
}
93-
this.ruleService.notifyRefresh(true);
94-
})
95-
).subscribe();
79+
.pipe(
80+
takeUntil(this.destroy$),
81+
filter((request: { prop: string, values: any }) => !!request),
82+
tap((request) => {
83+
if (request && Object.keys(request).length === 0) {
84+
this.request = RULE_REQUEST;
85+
} else {
86+
this.request = {
87+
...RULE_REQUEST,
88+
[request.prop]: request.values.length > 0 ? request.values : null
89+
};
90+
}
91+
this.ruleService.notifyRefresh(true);
92+
})
93+
).subscribe();
9694

9795
this.configService.action$
9896
.pipe(
9997
takeUntil(this.destroy$),
10098
filter(action => action === Actions.CREATE_RULE || action === Actions.IMPORT_RULE),
101-
map(action => action === Actions.CREATE_RULE ? 'ADD' : 'IMPORT')
99+
map(action => action === Actions.CREATE_RULE ? 'ADD' : 'IMPORT')
102100
)
103101
.subscribe((action) => this.addRule(action));
104102
}
@@ -136,7 +134,7 @@ export class RuleListComponent implements OnInit, OnDestroy {
136134
}
137135

138136
onSortBy($event: SortEvent) {
139-
const sort = $event.column + ',' + $event.direction;
137+
const sort = $event.column + ',' + $event.direction;
140138
this.request = {
141139
...this.request,
142140
sort
@@ -159,7 +157,7 @@ export class RuleListComponent implements OnInit, OnDestroy {
159157
this.ruleService.activeRule(params).pipe(
160158
finalize(() => this.loadingRules.splice(index, 1))
161159
)
162-
.subscribe(() => this.ruleService.notifyRefresh(true),
160+
.subscribe(() => this.ruleService.notifyRefresh(true),
163161
() => {
164162
this.utmToast.showError('Error', 'Error changing rule status');
165163
});
@@ -204,7 +202,8 @@ export class RuleListComponent implements OnInit, OnDestroy {
204202
const modal = this.modalService.open(AddRuleComponent, {
205203
size: 'lg',
206204
centered: true,
207-
windowClass: 'add-rule-modal'});
205+
windowClass: 'add-rule-modal'
206+
});
208207
modal.componentInstance.rule = rule;
209208
modal.componentInstance.mode = 'EDIT';
210209

@@ -213,12 +212,12 @@ export class RuleListComponent implements OnInit, OnDestroy {
213212

214213

215214
visualizeRule(rule: Rule) {
216-
const modal = this.modalService.open(RuleViewComponent, {
217-
size: 'lg',
218-
centered: true,
219-
windowClass: 'view-rule-modal',
220-
});
221-
modal.componentInstance.rowDocument = rule;
215+
const modal = this.modalService.open(RuleViewComponent, {
216+
size: 'lg',
217+
centered: true,
218+
windowClass: 'view-rule-modal',
219+
});
220+
modal.componentInstance.rowDocument = rule;
222221
}
223222

224223
handleResponse(modal: NgbModalRef) {

frontend/src/app/rule-management/models/rule.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export const RULE_REQUEST: {size: number, page: number, sort: string, search?: string | number} = {
2-
size: 25,
2+
size: 100,
33
page: 0,
44
sort: 'ruleLastUpdate,DESC',
55
};

frontend/src/app/rule-management/share/generic-filter/generic-filter.component.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ export class GenericFilterComponent<T extends UtmFieldType> implements OnInit, A
6565

6666
onScroll() {
6767
this.requestParams.size += 6;
68-
console.log(this.fieldFilter.filterField);
6968
this.filterService.notifyRefresh(this.fieldFilter.filterField);
7069
}
7170

frontend/src/app/shared/components/utm/table/utm-items-per-page/utm-items-per-page.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, EventEmitter, OnInit, Output} from '@angular/core';
1+
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
22
import {ITEMS_PER_PAGE} from '../../../../constants/pagination.constants';
33

44
@Component({
@@ -9,7 +9,7 @@ import {ITEMS_PER_PAGE} from '../../../../constants/pagination.constants';
99
export class UtmItemsPerPageComponent implements OnInit {
1010
itemsPerPage: number[] = [10, 15, 25, 35, 50, 75, 100];
1111
@Output() itemsInPage = new EventEmitter<number>();
12-
itemsAmount = ITEMS_PER_PAGE;
12+
@Input() itemsAmount = ITEMS_PER_PAGE;
1313

1414
constructor() {
1515
}

0 commit comments

Comments
 (0)