Edition des issues

This commit is contained in:
Cédric OLIVIER
2026-05-22 18:10:23 +02:00
parent f6acfd0e30
commit 105cafe17f
6 changed files with 262 additions and 110 deletions
+81
View File
@@ -0,0 +1,81 @@
import { Injectable, signal } from '@angular/core';
export type IssueStatus = 'draft' | 'todo' | 'done' | 'in-progress';
export type IssuePriority = 'Basse' | 'Moyenne' | 'Haute';
export type IssueEntity = {
id: number;
assignee: string;
epic: string;
name: string;
dueDate: string;
description: string;
priority: IssuePriority;
status: IssueStatus;
progress: number;
};
@Injectable({ providedIn: 'root' })
export class IssuesStore {
private readonly data = signal<IssueEntity[]>([
{
id: 1,
assignee: 'Marie',
epic: 'EPIC-UI',
name: 'Bug affichage menu mobile',
dueDate: '2026-06-10',
description: 'Corriger le comportement du menu sur petits ecrans.',
priority: 'Haute',
status: 'in-progress',
progress: 35,
},
{
id: 2,
assignee: 'Nabil',
epic: 'EPIC-FORM',
name: 'Erreur validation formulaire projet',
dueDate: '2026-06-12',
description: 'Fiabiliser les regles de validation du formulaire projet.',
priority: 'Moyenne',
status: 'todo',
progress: 20,
},
{
id: 3,
assignee: 'Sonia',
epic: 'EPIC-CONTENT',
name: 'Mise a jour message de bienvenue',
dueDate: '2026-06-18',
description: 'Mettre a jour le wording d accueil selon la charte produit.',
priority: 'Basse',
status: 'done',
progress: 100,
},
]);
readonly issues = this.data.asReadonly();
getById(id: number): IssueEntity | undefined {
return this.data().find((issue) => issue.id === id);
}
getNextId(): number {
const ids = this.data().map((issue) => issue.id);
return ids.length > 0 ? Math.max(...ids) + 1 : 1;
}
upsert(issue: IssueEntity): void {
this.data.update((issues) => {
const existingIndex = issues.findIndex((current) => current.id === issue.id);
if (existingIndex === -1) {
return [...issues, issue];
}
const updated = [...issues];
updated[existingIndex] = issue;
return updated;
});
}
}