feat: global search and keyboard shortcuts

Ctrl/⌘ K (or /) opens a search over the projects and tickets of all my
projects, driven by the keyboard. g plus a letter moves between project
pages, c creates a ticket on the board, e edits the open ticket and ?
lists every shortcut. My work can now be searched by text through the API.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 18:32:07 +02:00
parent 4148335457
commit d6a434ca1d
24 changed files with 584 additions and 21 deletions

View File

@@ -87,6 +87,7 @@ export class GraphqlIssuesGateway extends IssuesGateway {
assignedToMe: filter.assignedToMe,
categories: filter.categories as never,
limit: filter.limit,
search: filter.search?.trim() || null,
})
.pipe(
map((d) => ({

View File

@@ -879,6 +879,7 @@ export type MyIssuesQueryVariables = Exact<{
assignedToMe: boolean;
categories?: Array<StatusCategory> | StatusCategory | null | undefined;
limit: number;
search?: string | null | undefined;
}>;
export type MyIssuesQuery = {
@@ -5520,6 +5521,14 @@ export const MyIssuesDocument = {
type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } },
},
},
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'search' },
},
type: { kind: 'NamedType', name: { kind: 'Name', value: 'String' } },
},
],
selectionSet: {
kind: 'SelectionSet',
@@ -5552,6 +5561,14 @@ export const MyIssuesDocument = {
name: { kind: 'Name', value: 'limit' },
},
},
{
kind: 'Argument',
name: { kind: 'Name', value: 'search' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'search' },
},
},
],
selectionSet: {
kind: 'SelectionSet',

View File

@@ -134,11 +134,13 @@ query MyIssues(
$assignedToMe: Boolean!
$categories: [StatusCategory!]
$limit: Int!
$search: String
) {
myIssues(
assignedToMe: $assignedToMe
categories: $categories
limit: $limit
search: $search
) {
total
items {