feat: a sprint calendar

A Calendario tab lays the project's sprints out month by month as bands,
with the releases and the tickets due on each day. Owners and admins plan
a sprint by clicking the day it starts, and the whole plan downloads as an
iCalendar file. Tickets can be searched by due-date range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 19:20:28 +02:00
parent feea58d0e8
commit 8c998d7423
21 changed files with 1107 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ import {
BoardDocument,
ChangeIssueStatusDocument,
CreateIssueDocument,
DueIssuesDocument,
EpicsDocument,
IssueChildrenDocument,
IssueDocument,
@@ -183,6 +184,14 @@ export class GraphqlIssuesGateway extends IssuesGateway {
);
}
due(projectId: string, from: string, to: string): Observable<IssueSummary[]> {
return this.gql
.query(DueIssuesDocument, {
filter: { projectId, dueFrom: from, dueTo: to },
})
.pipe(map((d) => d.issues.items.map(toIssueSummary)));
}
trash(issueId: string): Observable<CommandResult> {
return this.gql
.mutate(TrashIssueDocument, { issueId })