Files
jambotron/jambotron-ui/src/app/modules/user-module/projects.component/projects.component.ts
T
2026-05-05 23:10:05 +03:00

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';
}
}
}