feat: epics, subtasks and checklists
Tickets can hang from another one of the same project, three levels deep at most (epic → ticket → subtask). The ticket page lists its subtasks with their progress, creates new ones and moves the ticket under an epic; a new Épicas tab shows every epic and how far it has got. Each ticket also gets a checklist for the small steps that don't deserve a ticket. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import {
|
||||
Comment,
|
||||
CommentChanged,
|
||||
Issue,
|
||||
IssueSummary,
|
||||
LinkIssuesInput,
|
||||
UpdateIssueInput,
|
||||
} from '@task-stream/web/tracker/domain';
|
||||
@@ -36,6 +37,21 @@ export const issuePageEvents = eventGroup({
|
||||
files?: File[];
|
||||
}>(),
|
||||
watchRequested: type<{ issueId: string; watching: boolean }>(),
|
||||
/** Place the ticket under another one by its key (e.g. WEB-3); null: out. */
|
||||
parentRequested: type<{ issueId: string; parentKey: string | null }>(),
|
||||
subtaskCreateRequested: type<{
|
||||
projectId: string;
|
||||
parentId: string;
|
||||
type: string;
|
||||
title: string;
|
||||
}>(),
|
||||
checklistAddRequested: type<{ issueId: string; text: string }>(),
|
||||
checklistUpdateRequested: type<{
|
||||
issueId: string;
|
||||
itemId: string;
|
||||
changes: { text?: string; done?: boolean };
|
||||
}>(),
|
||||
checklistRemoveRequested: type<{ issueId: string; itemId: string }>(),
|
||||
attachRequested: type<{
|
||||
issueId: string;
|
||||
files: File[];
|
||||
@@ -57,7 +73,10 @@ export const issueApiEvents = eventGroup({
|
||||
loadFailed: type<string>(),
|
||||
commentsLoaded: type<Comment[]>(),
|
||||
historyLoaded: type<Activity[]>(),
|
||||
childrenLoaded: type<IssueSummary[]>(),
|
||||
commandSucceeded: type<string>(),
|
||||
/** A checklist step was saved (no toast for something so small). */
|
||||
checklistSaved: type<void>(),
|
||||
commandFailed: type<string>(),
|
||||
},
|
||||
});
|
||||
@@ -67,6 +86,8 @@ export const issueRealtimeEvents = eventGroup({
|
||||
events: {
|
||||
/** Something about this ticket changed: refetch it. */
|
||||
issueTouched: type<{ issueId: string; version: number }>(),
|
||||
/** A ticket under this one changed, arrived or left: reload them. */
|
||||
childrenTouched: type<{ issueId: string }>(),
|
||||
commentChanged: type<CommentChanged>(),
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user