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:
2026-10-08 13:52:43 +02:00
parent 75323115fb
commit d4da33d4e8
84 changed files with 4719 additions and 79 deletions

View File

@@ -69,6 +69,11 @@ fragment IssueSummaryFields on Issue {
id
name
}
parent {
id
key
title
}
}
fragment IssueFields on Issue {
@@ -91,6 +96,11 @@ fragment IssueFields on Issue {
watchers {
...UserRefFields
}
checklist {
id
text
done
}
attachments {
id
fileName

View File

@@ -7,6 +7,11 @@ export type Incremental<T> =
[P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never;
};
import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
export type AddChecklistItemInput = {
issueId: string;
text: string;
};
export type AreaOptionInput = {
archived?: boolean;
id: string;
@@ -30,6 +35,8 @@ export type CreateIssueInput = {
/** Figma frame for UI changes */
figmaUrl?: string | null | undefined;
labels?: Array<string> | null | undefined;
/** Epic or ticket of the same project the new one breaks down */
parentId?: string | null | undefined;
priority?: IssuePriority | null | undefined;
projectId: string;
releaseId?: string | null | undefined;
@@ -61,6 +68,8 @@ export type IssueFilterInput = {
assigneeId?: string | null | undefined;
categories?: Array<StatusCategory> | null | undefined;
labels?: Array<string> | null | undefined;
/** Only the tickets hanging from this one */
parentId?: string | null | undefined;
priorities?: Array<IssuePriority> | null | undefined;
projectId: string;
releaseId?: string | null | undefined;
@@ -139,6 +148,13 @@ export type StatusTransitionsInput = {
to: Array<string>;
};
export type UpdateChecklistItemInput = {
done?: boolean | null | undefined;
issueId: string;
itemId: string;
text?: string | null | undefined;
};
export type UpdateIssueInput = {
/** An area id */
area?: string | null | undefined;
@@ -219,6 +235,7 @@ export type IssueSummaryFieldsFragment = {
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
};
export type IssueFieldsFragment = {
@@ -249,6 +266,7 @@ export type IssueFieldsFragment = {
issueKey: string;
}>;
watchers: Array<{ id: string; name: string }>;
checklist: Array<{ id: string; text: string; done: boolean }>;
attachments: Array<{
id: string;
fileName: string;
@@ -260,6 +278,7 @@ export type IssueFieldsFragment = {
}>;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
};
export type CommentFieldsFragment = {
@@ -326,6 +345,7 @@ export type BoardQuery = {
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
}>;
}>;
};
@@ -364,6 +384,7 @@ export type IssueQuery = {
issueKey: string;
}>;
watchers: Array<{ id: string; name: string }>;
checklist: Array<{ id: string; text: string; done: boolean }>;
attachments: Array<{
id: string;
fileName: string;
@@ -375,6 +396,7 @@ export type IssueQuery = {
}>;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
};
};
@@ -400,6 +422,7 @@ export type SearchIssuesQuery = {
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
}>;
};
};
@@ -549,10 +572,106 @@ export type MyIssuesQuery = {
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
}>;
};
};
export type IssueChildrenQueryVariables = Exact<{
filter: IssueFilterInput;
}>;
export type IssueChildrenQuery = {
issues: {
items: Array<{
id: string;
projectId: string;
key: string;
type: string;
area: string | null;
title: string;
status: string;
statusCategory: StatusCategory;
priority: IssuePriority;
labels: Array<string>;
commentCount: number;
updatedAt: string;
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
}>;
};
};
export type EpicsQueryVariables = Exact<{
projectId: string;
}>;
export type EpicsQuery = {
epics: Array<{
issue: {
id: string;
projectId: string;
key: string;
type: string;
area: string | null;
title: string;
status: string;
statusCategory: StatusCategory;
priority: IssuePriority;
labels: Array<string>;
commentCount: number;
updatedAt: string;
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
};
progress: {
total: number;
finished: number;
percent: number;
storyPoints: number;
finishedStoryPoints: number;
};
}>;
};
export type SetIssueParentMutationVariables = Exact<{
issueId: string;
parentId?: string | null | undefined;
}>;
export type SetIssueParentMutation = {
setIssueParent: { id: string; key: string | null; version: number };
};
export type AddChecklistItemMutationVariables = Exact<{
input: AddChecklistItemInput;
}>;
export type AddChecklistItemMutation = {
addChecklistItem: { id: string; key: string | null; version: number };
};
export type UpdateChecklistItemMutationVariables = Exact<{
input: UpdateChecklistItemInput;
}>;
export type UpdateChecklistItemMutation = {
updateChecklistItem: { id: string; key: string | null; version: number };
};
export type RemoveChecklistItemMutationVariables = Exact<{
issueId: string;
itemId: string;
}>;
export type RemoveChecklistItemMutation = {
removeChecklistItem: { id: string; key: string | null; version: number };
};
export type NotificationFieldsFragment = {
id: string;
kind: NotificationKind;
@@ -987,6 +1106,7 @@ export type IssueChangedSubscription = {
version: number;
assignee: { id: string; name: string } | null;
release: { id: string; name: string } | null;
parent: { id: string; key: string; title: string } | null;
};
};
};
@@ -1346,6 +1466,18 @@ export const IssueSummaryFieldsFragmentDoc = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
@@ -1431,6 +1563,18 @@ export const IssueFieldsFragmentDoc = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'checklist' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'text' } },
{ kind: 'Field', name: { kind: 'Name', value: 'done' } },
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'attachments' },
@@ -1524,6 +1668,18 @@ export const IssueFieldsFragmentDoc = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
@@ -1926,6 +2082,18 @@ export const BoardDocument = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
@@ -2045,6 +2213,18 @@ export const IssueDocument = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
@@ -2110,6 +2290,18 @@ export const IssueDocument = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'checklist' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'text' } },
{ kind: 'Field', name: { kind: 'Name', value: 'done' } },
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'attachments' },
@@ -2271,6 +2463,18 @@ export const SearchIssuesDocument = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
@@ -3474,11 +3678,652 @@ export const MyIssuesDocument = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
],
} as unknown as DocumentNode<MyIssuesQuery, MyIssuesQueryVariables>;
export const IssueChildrenDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'query',
name: { kind: 'Name', value: 'IssueChildren' },
variableDefinitions: [
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'filter' },
},
type: {
kind: 'NonNullType',
type: {
kind: 'NamedType',
name: { kind: 'Name', value: 'IssueFilterInput' },
},
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'issues' },
arguments: [
{
kind: 'Argument',
name: { kind: 'Name', value: 'filter' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'filter' },
},
},
{
kind: 'Argument',
name: { kind: 'Name', value: 'limit' },
value: { kind: 'IntValue', value: '200' },
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'items' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'IssueSummaryFields' },
},
],
},
},
],
},
},
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'UserRefFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'UserRef' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'name' } },
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'IssueSummaryFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'Issue' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'projectId' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'type' } },
{ kind: 'Field', name: { kind: 'Name', value: 'area' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
{ kind: 'Field', name: { kind: 'Name', value: 'status' } },
{ kind: 'Field', name: { kind: 'Name', value: 'statusCategory' } },
{ kind: 'Field', name: { kind: 'Name', value: 'priority' } },
{ kind: 'Field', name: { kind: 'Name', value: 'labels' } },
{ kind: 'Field', name: { kind: 'Name', value: 'commentCount' } },
{ kind: 'Field', name: { kind: 'Name', value: 'updatedAt' } },
{ kind: 'Field', name: { kind: 'Name', value: 'version' } },
{
kind: 'Field',
name: { kind: 'Name', value: 'assignee' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'UserRefFields' },
},
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'release' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'name' } },
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
],
} as unknown as DocumentNode<IssueChildrenQuery, IssueChildrenQueryVariables>;
export const EpicsDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'query',
name: { kind: 'Name', value: 'Epics' },
variableDefinitions: [
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'projectId' },
},
type: {
kind: 'NonNullType',
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'epics' },
arguments: [
{
kind: 'Argument',
name: { kind: 'Name', value: 'projectId' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'projectId' },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'issue' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'IssueSummaryFields' },
},
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'progress' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'total' } },
{
kind: 'Field',
name: { kind: 'Name', value: 'finished' },
},
{
kind: 'Field',
name: { kind: 'Name', value: 'percent' },
},
{
kind: 'Field',
name: { kind: 'Name', value: 'storyPoints' },
},
{
kind: 'Field',
name: { kind: 'Name', value: 'finishedStoryPoints' },
},
],
},
},
],
},
},
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'UserRefFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'UserRef' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'name' } },
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'IssueSummaryFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'Issue' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'projectId' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'type' } },
{ kind: 'Field', name: { kind: 'Name', value: 'area' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
{ kind: 'Field', name: { kind: 'Name', value: 'status' } },
{ kind: 'Field', name: { kind: 'Name', value: 'statusCategory' } },
{ kind: 'Field', name: { kind: 'Name', value: 'priority' } },
{ kind: 'Field', name: { kind: 'Name', value: 'labels' } },
{ kind: 'Field', name: { kind: 'Name', value: 'commentCount' } },
{ kind: 'Field', name: { kind: 'Name', value: 'updatedAt' } },
{ kind: 'Field', name: { kind: 'Name', value: 'version' } },
{
kind: 'Field',
name: { kind: 'Name', value: 'assignee' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'UserRefFields' },
},
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'release' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'name' } },
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},
],
} as unknown as DocumentNode<EpicsQuery, EpicsQueryVariables>;
export const SetIssueParentDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'mutation',
name: { kind: 'Name', value: 'SetIssueParent' },
variableDefinitions: [
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'issueId' },
},
type: {
kind: 'NonNullType',
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
},
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'parentId' },
},
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'setIssueParent' },
arguments: [
{
kind: 'Argument',
name: { kind: 'Name', value: 'issueId' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'issueId' },
},
},
{
kind: 'Argument',
name: { kind: 'Name', value: 'parentId' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'parentId' },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'CommandResultFields' },
},
],
},
},
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'CommandResultFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'CommandResult' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'version' } },
],
},
},
],
} as unknown as DocumentNode<
SetIssueParentMutation,
SetIssueParentMutationVariables
>;
export const AddChecklistItemDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'mutation',
name: { kind: 'Name', value: 'AddChecklistItem' },
variableDefinitions: [
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'input' },
},
type: {
kind: 'NonNullType',
type: {
kind: 'NamedType',
name: { kind: 'Name', value: 'AddChecklistItemInput' },
},
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'addChecklistItem' },
arguments: [
{
kind: 'Argument',
name: { kind: 'Name', value: 'input' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'input' },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'CommandResultFields' },
},
],
},
},
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'CommandResultFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'CommandResult' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'version' } },
],
},
},
],
} as unknown as DocumentNode<
AddChecklistItemMutation,
AddChecklistItemMutationVariables
>;
export const UpdateChecklistItemDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'mutation',
name: { kind: 'Name', value: 'UpdateChecklistItem' },
variableDefinitions: [
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'input' },
},
type: {
kind: 'NonNullType',
type: {
kind: 'NamedType',
name: { kind: 'Name', value: 'UpdateChecklistItemInput' },
},
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'updateChecklistItem' },
arguments: [
{
kind: 'Argument',
name: { kind: 'Name', value: 'input' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'input' },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'CommandResultFields' },
},
],
},
},
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'CommandResultFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'CommandResult' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'version' } },
],
},
},
],
} as unknown as DocumentNode<
UpdateChecklistItemMutation,
UpdateChecklistItemMutationVariables
>;
export const RemoveChecklistItemDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'mutation',
name: { kind: 'Name', value: 'RemoveChecklistItem' },
variableDefinitions: [
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'issueId' },
},
type: {
kind: 'NonNullType',
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
},
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'itemId' },
},
type: {
kind: 'NonNullType',
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'Field',
name: { kind: 'Name', value: 'removeChecklistItem' },
arguments: [
{
kind: 'Argument',
name: { kind: 'Name', value: 'issueId' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'issueId' },
},
},
{
kind: 'Argument',
name: { kind: 'Name', value: 'itemId' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'itemId' },
},
},
],
selectionSet: {
kind: 'SelectionSet',
selections: [
{
kind: 'FragmentSpread',
name: { kind: 'Name', value: 'CommandResultFields' },
},
],
},
},
],
},
},
{
kind: 'FragmentDefinition',
name: { kind: 'Name', value: 'CommandResultFields' },
typeCondition: {
kind: 'NamedType',
name: { kind: 'Name', value: 'CommandResult' },
},
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'version' } },
],
},
},
],
} as unknown as DocumentNode<
RemoveChecklistItemMutation,
RemoveChecklistItemMutationVariables
>;
export const MyNotificationsDocument = {
kind: 'Document',
definitions: [
@@ -6163,6 +7008,18 @@ export const IssueChangedDocument = {
],
},
},
{
kind: 'Field',
name: { kind: 'Name', value: 'parent' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
{ kind: 'Field', name: { kind: 'Name', value: 'key' } },
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
],
},
},
],
},
},

View File

@@ -129,3 +129,50 @@ query MyIssues(
}
}
}
query IssueChildren($filter: IssueFilterInput!) {
issues(filter: $filter, limit: 200) {
items {
...IssueSummaryFields
}
}
}
query Epics($projectId: ID!) {
epics(projectId: $projectId) {
issue {
...IssueSummaryFields
}
progress {
total
finished
percent
storyPoints
finishedStoryPoints
}
}
}
mutation SetIssueParent($issueId: ID!, $parentId: ID) {
setIssueParent(issueId: $issueId, parentId: $parentId) {
...CommandResultFields
}
}
mutation AddChecklistItem($input: AddChecklistItemInput!) {
addChecklistItem(input: $input) {
...CommandResultFields
}
}
mutation UpdateChecklistItem($input: UpdateChecklistItemInput!) {
updateChecklistItem(input: $input) {
...CommandResultFields
}
}
mutation RemoveChecklistItem($issueId: ID!, $itemId: ID!) {
removeChecklistItem(issueId: $issueId, itemId: $itemId) {
...CommandResultFields
}
}