Avancement + filtre sur liste des issues
This commit is contained in:
@@ -13,6 +13,20 @@ export class Issues {
|
||||
private readonly issuesStore = inject(IssuesStore);
|
||||
|
||||
protected readonly issues = this.issuesStore.issues;
|
||||
protected selectedType: IssueEntity['type'] | null = null;
|
||||
|
||||
protected readonly typeOptions: IssueEntity['type'][] = [
|
||||
'Epic', 'Bug', 'Study', 'Story', 'Task', 'Technical Story',
|
||||
];
|
||||
|
||||
protected get filteredIssues(): IssueEntity[] {
|
||||
if (this.selectedType === null) return this.issues();
|
||||
return this.issues().filter((i) => i.type === this.selectedType);
|
||||
}
|
||||
|
||||
protected selectType(type: IssueEntity['type'] | null): void {
|
||||
this.selectedType = this.selectedType === type ? null : type;
|
||||
}
|
||||
|
||||
protected createIssue(): void {
|
||||
const nextId = this.issuesStore.getNextId();
|
||||
@@ -25,6 +39,18 @@ export class Issues {
|
||||
this.router.navigate(['/issues', issueId]);
|
||||
}
|
||||
|
||||
protected getProgress(issue: IssueEntity): number {
|
||||
if (issue.type !== 'Epic') {
|
||||
return issue.progress;
|
||||
}
|
||||
const children = this.issues().filter(
|
||||
(i) => i.id !== issue.id && (i.epic === issue.name || i.dependsOnIds.includes(issue.id)),
|
||||
);
|
||||
if (children.length === 0) return 0;
|
||||
const done = children.filter((i) => i.status === 'done').length;
|
||||
return Math.round((done / children.length) * 100);
|
||||
}
|
||||
|
||||
protected typeBadgeClass(type: IssueEntity['type']): string {
|
||||
const map: Record<IssueEntity['type'], string> = {
|
||||
Bug: 'text-bg-danger',
|
||||
|
||||
Reference in New Issue
Block a user