feat: saved views of my work, across my projects
A person saves named views of «my work»: projects, assigned to me, that I follow, status categories, priorities, bugs only, overdue and text. They are private (Mongo my_views, no history), listed and deleted by their owner (GraphQL myViews / saveMyView / deleteMyView, REST /api/me/views), and run as the cross-project search, which gains project, priority, bugsOnly and overdue filters (also in MCP my_issues). The home page shows them as a bar above «my work», with a drawer to save a new one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -122,6 +122,12 @@ export interface MyIssuesFilter {
|
||||
categories?: StatusCategory[];
|
||||
/** Matches key, title or description. */
|
||||
search?: string;
|
||||
projectIds?: string[];
|
||||
priorities?: IssuePriority[];
|
||||
/** Only types drawn with the bug icon. */
|
||||
bugsOnly?: boolean;
|
||||
/** Only open tickets past their due date. */
|
||||
overdue?: boolean;
|
||||
limit: number;
|
||||
}
|
||||
|
||||
|
||||
@@ -87,6 +87,29 @@ export interface SavedFilterCriteria {
|
||||
search?: string | null;
|
||||
}
|
||||
|
||||
/** What a view of «my work» narrows to, across my projects. */
|
||||
export interface MyViewCriteria {
|
||||
/** Only these projects (empty: all of mine). */
|
||||
projectIds?: string[] | null;
|
||||
assignedToMe?: boolean | null;
|
||||
watching?: boolean | null;
|
||||
categories?: StatusCategory[] | null;
|
||||
priorities?: IssuePriority[] | null;
|
||||
/** Only types drawn with the bug icon. */
|
||||
bugsOnly?: boolean | null;
|
||||
/** Only open tickets past their due date. */
|
||||
overdue?: boolean | null;
|
||||
search?: string | null;
|
||||
}
|
||||
|
||||
/** A named view of «my work», mine only. */
|
||||
export interface MyView {
|
||||
id: string;
|
||||
name: string;
|
||||
criteria: MyViewCriteria;
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
/** A named view of the board: private, or shared with the project. */
|
||||
export interface SavedFilter {
|
||||
id: string;
|
||||
|
||||
@@ -25,6 +25,8 @@ import {
|
||||
Release,
|
||||
ReleaseBurnup,
|
||||
SavedFilter,
|
||||
MyView,
|
||||
MyViewCriteria,
|
||||
SavedFilterCriteria,
|
||||
Sprint,
|
||||
SprintBurndown,
|
||||
@@ -243,6 +245,13 @@ export abstract class SavedFiltersGateway {
|
||||
criteria: SavedFilterCriteria;
|
||||
}): Observable<string>;
|
||||
abstract remove(id: string): Observable<void>;
|
||||
/** My views of «my work», by name. */
|
||||
abstract myViews(): Observable<MyView[]>;
|
||||
abstract saveMyView(input: {
|
||||
name: string;
|
||||
criteria: MyViewCriteria;
|
||||
}): Observable<string>;
|
||||
abstract removeMyView(id: string): Observable<void>;
|
||||
}
|
||||
|
||||
export abstract class CommentsGateway {
|
||||
|
||||
Reference in New Issue
Block a user