1 | import {Component, OnInit} from '@angular/core';
|
---|
2 | import {MatTableModule} from '@angular/material/table';
|
---|
3 | import {AdminService} from "../../../services/admin/admin.service";
|
---|
4 | import {AdminUsersResponse} from "../../../model/responses/AdminUsersResponse";
|
---|
5 | import {MatCheckboxChange, MatCheckboxModule} from '@angular/material/checkbox';
|
---|
6 | import {MatButton} from "@angular/material/button";
|
---|
7 | import {PieChartComponent} from "../../charts/pie-chart/pie-chart.component";
|
---|
8 | import {map, Observable} from "rxjs";
|
---|
9 | import {PieChartValues} from "../../../model/PieChartValues";
|
---|
10 | import {CommutesByHour, LineChartComponent} from "../../charts/line-chart.component";
|
---|
11 | import {IncomeChartComponent, IncomeData} from "../../charts/stacked-bar-chart.component";
|
---|
12 |
|
---|
13 | @Component({
|
---|
14 | selector: 'app-admin-panel',
|
---|
15 | standalone: true,
|
---|
16 | imports: [MatTableModule, MatCheckboxModule, MatButton, PieChartComponent, LineChartComponent, IncomeChartComponent],
|
---|
17 | templateUrl: './admin-panel.component.html',
|
---|
18 | styleUrl: './admin-panel.component.css'
|
---|
19 | })
|
---|
20 | export class AdminPanelComponent implements OnInit {
|
---|
21 |
|
---|
22 | allRoles = ['ROLE_ADMIN', 'ROLE_DRIVER', 'ROLE_CONDUCTOR', 'ROLE_PASSENGER']
|
---|
23 |
|
---|
24 | users: AdminUsersResponse[] = []
|
---|
25 | usersColumns: string[] = ['id', 'name', 'email', 'phoneNumber', 'address', 'roles', 'update'];
|
---|
26 |
|
---|
27 | constructor(private adminService: AdminService) {
|
---|
28 |
|
---|
29 | }
|
---|
30 |
|
---|
31 | ngOnInit() {
|
---|
32 | this.adminService.getAllUsers().subscribe({
|
---|
33 | next: data => {
|
---|
34 | this.users = data
|
---|
35 | console.log(data)
|
---|
36 | }
|
---|
37 | })
|
---|
38 | }
|
---|
39 |
|
---|
40 | checked(role: string, roles: string[]): boolean {
|
---|
41 | return roles.includes(role)
|
---|
42 | }
|
---|
43 |
|
---|
44 | updateRoles(id: number) {
|
---|
45 | console.log(id)
|
---|
46 | const user = this.users.find(u => u.id === id)
|
---|
47 | console.log(user)
|
---|
48 | if (!user) return;
|
---|
49 | this.adminService.updateRolesToUser(id, user.roles).subscribe({
|
---|
50 | next: value => {
|
---|
51 | console.log(value)
|
---|
52 | this.users = value
|
---|
53 | }
|
---|
54 | })
|
---|
55 | }
|
---|
56 |
|
---|
57 | onSelectRole(id: number, event: MatCheckboxChange) {
|
---|
58 | console.log(event)
|
---|
59 | const role = event.source.name
|
---|
60 | if (!role) return;
|
---|
61 | this.users.filter(u => u.id === id).forEach(
|
---|
62 | u => {
|
---|
63 | var index = u.roles.indexOf(role);
|
---|
64 | if (index > -1) {
|
---|
65 | u.roles.splice(index, 1);
|
---|
66 | } else {
|
---|
67 | u.roles.push(role);
|
---|
68 | }
|
---|
69 | }
|
---|
70 | )
|
---|
71 | }
|
---|
72 |
|
---|
73 | getFinesPerLine(): Observable<PieChartValues[]> {
|
---|
74 | return this.adminService.getFinesPerLine()
|
---|
75 | .pipe(
|
---|
76 | map(data => data.flatMap(finePerLine => Object({value: finePerLine.count, name: finePerLine.line.ime}))
|
---|
77 | )
|
---|
78 | );
|
---|
79 | }
|
---|
80 |
|
---|
81 | getCommutesByHour(): Observable<CommutesByHour[]> {
|
---|
82 | return this.adminService.getCommutesByHour();
|
---|
83 | }
|
---|
84 |
|
---|
85 | getTotalIncome(): Observable<IncomeData[]> {
|
---|
86 | return this.adminService.getTotalIncome()
|
---|
87 | }
|
---|
88 | }
|
---|