Dependence milestone
This commit is contained in:
@@ -35,6 +35,8 @@ export class MilestoneDetail {
|
||||
protected issueSearchQuery = '';
|
||||
protected showIssueSuggestions = false;
|
||||
protected moreMenuOpen = false;
|
||||
protected showAddDependency = false;
|
||||
protected selectedCandidateMilestoneId: number | null = null;
|
||||
|
||||
constructor() {
|
||||
this.milestonesStore.load().then(() => {
|
||||
@@ -60,6 +62,47 @@ export class MilestoneDetail {
|
||||
});
|
||||
}
|
||||
|
||||
protected get hasDependencies(): boolean {
|
||||
return this.milestone.dependsOnIds.length > 0;
|
||||
}
|
||||
|
||||
protected get dependencyIds(): number[] {
|
||||
return this.milestone.dependsOnIds;
|
||||
}
|
||||
|
||||
protected get availableCandidates(): MilestoneEntity[] {
|
||||
return this.milestonesStore.milestones().filter(
|
||||
(m) => m.id !== this.milestone.id && !this.milestone.dependsOnIds.includes(m.id),
|
||||
);
|
||||
}
|
||||
|
||||
protected resolveDependency(id: number): MilestoneEntity | undefined {
|
||||
return this.milestonesStore.getById(id);
|
||||
}
|
||||
|
||||
protected openAddDependency(): void {
|
||||
this.selectedCandidateMilestoneId = null;
|
||||
this.showAddDependency = true;
|
||||
}
|
||||
|
||||
protected cancelAddDependency(): void {
|
||||
this.showAddDependency = false;
|
||||
this.selectedCandidateMilestoneId = null;
|
||||
}
|
||||
|
||||
protected async confirmAddDependency(): Promise<void> {
|
||||
if (this.selectedCandidateMilestoneId === null) return;
|
||||
this.milestone.dependsOnIds = [...this.milestone.dependsOnIds, this.selectedCandidateMilestoneId];
|
||||
this.selectedCandidateMilestoneId = null;
|
||||
this.showAddDependency = false;
|
||||
await this.saveMilestone();
|
||||
}
|
||||
|
||||
protected async removeDependency(id: number): Promise<void> {
|
||||
this.milestone.dependsOnIds = this.milestone.dependsOnIds.filter((depId) => depId !== id);
|
||||
await this.saveMilestone();
|
||||
}
|
||||
|
||||
protected get linkedIssues(): IssueEntity[] {
|
||||
return this.issues().filter((i) => this.milestone.issueIds.includes(i.id));
|
||||
}
|
||||
@@ -269,9 +312,9 @@ export class MilestoneDetail {
|
||||
|
||||
private buildMilestone(): MilestoneEntity {
|
||||
if (this.route.snapshot.routeConfig?.path === 'milestones/new') {
|
||||
return { id: 0, name: '', description: '', startDate: '', endDate: '', dueDate: '', issueIds: [] };
|
||||
return { id: 0, name: '', description: '', startDate: '', endDate: '', dueDate: '', issueIds: [], dependsOnIds: [] };
|
||||
}
|
||||
const id = Number(this.route.snapshot.paramMap.get('id') ?? 0);
|
||||
return this.milestonesStore.getById(id) ?? { id, name: '', description: '', startDate: '', endDate: '', dueDate: '', issueIds: [] };
|
||||
return this.milestonesStore.getById(id) ?? { id, name: '', description: '', startDate: '', endDate: '', dueDate: '', issueIds: [], dependsOnIds: [] };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user