Skip to content

Commit 8f95c33

Browse files
sarkapalkovicovaxflord
authored andcommitted
feat(admin): jump onto specific page
Added input for inserting a wanted page number.
1 parent 1b9bba7 commit 8f95c33

File tree

4 files changed

+61
-4
lines changed

4 files changed

+61
-4
lines changed

libs/perun/utils/src/lib/table-wrapper/table-wrapper.component.css

Lines changed: 0 additions & 3 deletions
This file was deleted.

libs/perun/utils/src/lib/table-wrapper/table-wrapper.component.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,22 @@
66
[pageSizeOptions]="pageSizeOptions"
77
[pageSize]="pageSize">
88
</mat-paginator>
9+
10+
<div class="page-index-padding">
11+
<mat-form-field class="table-index-form d-flex">
12+
<input
13+
class="overflow-ellipsis text-muted"
14+
type="number"
15+
matInput
16+
[min]="1"
17+
[max]="paginator.getNumberOfPages()"
18+
[value]="paginator.pageIndex + 1"
19+
(keydown)="onlyValidKeys($event)"
20+
(keyup.enter)="changePage($event)"
21+
(focusout)="changePage($event)" />
22+
</mat-form-field>
23+
</div>
24+
925
<perun-web-apps-table-options
1026
(exportDisplayedData)="exportDisplayedData.emit($event)"
1127
(exportAllData)="exportAllData.emit($event)"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.table-height {
2+
max-height: 70vh;
3+
}
4+
5+
.table-index-form {
6+
max-width: 110px;
7+
max-height: 75px;
8+
@media (max-width: 420px) {
9+
max-width: 70px;
10+
}
11+
}
12+
13+
.page-index-padding {
14+
padding-top: 1em;
15+
}

libs/perun/utils/src/lib/table-wrapper/table-wrapper.component.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { TableConfigService } from '@perun-web-apps/config/table-config';
1818
@Component({
1919
selector: 'perun-web-apps-table-wrapper',
2020
templateUrl: './table-wrapper.component.html',
21-
styleUrls: ['./table-wrapper.component.css'],
21+
styleUrls: ['./table-wrapper.component.scss'],
2222
providers: [
2323
{ provide: MAT_PAGINATOR_DEFAULT_OPTIONS, useValue: { formFieldAppearance: 'fill' } },
2424
],
@@ -62,4 +62,33 @@ export class TableWrapperComponent implements OnInit {
6262
}); // scroll to top of table on page changes
6363
}
6464
}
65+
66+
changePage(event: FocusEvent): void {
67+
const input = event.target as HTMLInputElement;
68+
let selectedPage = parseInt(input.value);
69+
70+
if (!selectedPage || selectedPage < 1) {
71+
selectedPage = this.paginator.pageIndex + 1; // stay at current page
72+
}
73+
if (selectedPage > this.paginator.getNumberOfPages()) {
74+
selectedPage = this.paginator.getNumberOfPages();
75+
}
76+
77+
this.paginator.pageIndex = selectedPage - 1;
78+
const changePageEvent: PageEvent = {
79+
length: this.paginator.length,
80+
pageSize: this.paginator.pageSize,
81+
pageIndex: this.paginator.pageIndex,
82+
};
83+
this.paginator.page.next(changePageEvent);
84+
85+
input.value = selectedPage.toString();
86+
}
87+
88+
onlyValidKeys(event: KeyboardEvent): boolean {
89+
const charCode = event.key.charCodeAt(0);
90+
return (
91+
charCode === 65 || charCode === 66 || charCode === 68 || (charCode >= 48 && charCode <= 57)
92+
); // Accept only digits 0-9, arrows, backspace or delete
93+
}
6594
}

0 commit comments

Comments
 (0)