feat(tickets): filtres multi-critères par cases à cocher (backend + frontend)
Passe les filtres de la liste des tickets en sélection multiple (#12). Backend Rust : - IssueListFilter : statuses/priorities en Vec, filter_matches en OR intra-champ et AND inter-champs - TicketListRequestDto en tableaux + from_request (parse/déduplication) - MCP idea_ticket_list aligné sur le nouveau contrat Frontend : - TicketListQuery.statuses/priorities - UI de cases à cocher, toggle/clear des filtres Tests verts : issue_store (7), app-tauri --lib (59), mcp_server (24), issue_usecases (6), sprint_usecases (6), frontend vitest (505), npm run build (exit 0). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -1951,9 +1951,13 @@ export class MockTicketGateway implements TicketGateway {
|
||||
async list(projectId: string, query?: TicketListQuery): Promise<TicketList> {
|
||||
const q = query ?? {};
|
||||
const text = q.text?.trim().toLowerCase();
|
||||
// Multi-select facets (ticket #12): OR within a facet, AND across facets; an
|
||||
// empty/absent set means "no constraint" (all values pass).
|
||||
const statuses = q.statuses ?? [];
|
||||
const priorities = q.priorities ?? [];
|
||||
const rows = [...this.projectTickets(projectId).values()]
|
||||
.filter((t) => !q.status || t.status === q.status)
|
||||
.filter((t) => !q.priority || t.priority === q.priority)
|
||||
.filter((t) => statuses.length === 0 || statuses.includes(t.status))
|
||||
.filter((t) => priorities.length === 0 || priorities.includes(t.priority))
|
||||
.filter(
|
||||
(t) =>
|
||||
!q.assignedAgentId || t.assignedAgentIds.includes(q.assignedAgentId),
|
||||
|
||||
Reference in New Issue
Block a user