78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import { Component, OnInit } from '@angular/core';
|
|
import { Project, ProjectService } from '../../../services/project.service';
|
|
import { MatIcon } from '@angular/material/icon';
|
|
import { MatProgressBar } from '@angular/material/progress-bar';
|
|
import { DatePipe } from '@angular/common';
|
|
import { MatButton } from '@angular/material/button';
|
|
import { Router } from '@angular/router';
|
|
import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
|
|
|
|
@Component({
|
|
selector: 'app-projects',
|
|
standalone: true,
|
|
imports: [
|
|
MatIcon,
|
|
MatProgressBar,
|
|
MatButton,
|
|
MatCard,
|
|
MatCardHeader,
|
|
MatCardTitle,
|
|
MatCardContent,
|
|
DatePipe
|
|
],
|
|
templateUrl: './projects.component.html',
|
|
styleUrl: './projects.component.scss',
|
|
})
|
|
export class ProjectsComponent implements OnInit {
|
|
projects: Project[] = [];
|
|
isLoading = true;
|
|
|
|
constructor(
|
|
private projectService: ProjectService,
|
|
private router: Router
|
|
) {}
|
|
|
|
ngOnInit(): void {
|
|
this.loadProjects();
|
|
}
|
|
|
|
loadProjects(): void {
|
|
this.projectService.getUserProjects().subscribe({
|
|
next: (data) => {
|
|
// Фикс бага с JSON в имени
|
|
this.projects = data.map(p => {
|
|
if (p.name && p.name.startsWith('{')) {
|
|
try {
|
|
const parsed = JSON.parse(p.name);
|
|
p.name = parsed.name || 'Untitled Project';
|
|
} catch (e) {
|
|
p.name = 'Invalid Data';
|
|
}
|
|
}
|
|
return p;
|
|
});
|
|
this.isLoading = false;
|
|
},
|
|
error: () => this.isLoading = false
|
|
});
|
|
}
|
|
|
|
openProjectDetails(projectId: string): void {
|
|
this.router.navigate(['/main/user/projects', projectId, 'details']);
|
|
}
|
|
|
|
createNewProject(): void {
|
|
this.router.navigate(['/main/user/projects/add']);
|
|
}
|
|
|
|
getStatusColor(status: string): string {
|
|
switch (status) {
|
|
case 'RUNNING': return '#4caf50';
|
|
case 'STARTING': return '#ffc107';
|
|
case 'STOPPED': return '#9e9e9e';
|
|
case 'ERROR': return '#f44336';
|
|
default: return '#bdbdbd';
|
|
}
|
|
}
|
|
}
|