feat: an ordered backlog

A Backlog tab lists the tickets still to start in the order the team will
take them; drag them, or use the arrows, to reorder. Moving a ticket only
rewrites that ticket's rank, read from the event store, and board columns
follow the same order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 14:01:44 +02:00
parent d4da33d4e8
commit 0606f53026
53 changed files with 1599 additions and 32 deletions

View File

@@ -0,0 +1,22 @@
import { type } from '@ngrx/signals';
import { eventGroup } from '@ngrx/signals/events';
import { IssuePage } from '@task-stream/web/tracker/domain';
export const backlogPageEvents = eventGroup({
source: 'Backlog Page',
events: {
opened: type<{ projectId: string }>(),
/** Put the ticket at `index` of the backlog as shown now. */
moveRequested: type<{ issueId: string; index: number }>(),
},
});
export const backlogApiEvents = eventGroup({
source: 'Backlog API',
events: {
loaded: type<IssuePage>(),
loadFailed: type<string>(),
moved: type<void>(),
moveFailed: type<string>(),
},
});