Problem
When a project has sprints enabled, the All issues list (project-all-issue-page, project_issue_lists.html:11) doesn't show whether each issue is assigned to a sprint. Each row uses issue-summary-row (components.html:366), which shows the key, priority, title, tags, sub-issue progress, due date and status. Nothing indicates the sprint, so you can't see at a glance which issues are sprinted and which are still unplanned.
Expected behavior
- In projects with sprints enabled, an issue that is assigned to a sprint shows a very small badge in its row: an "S" in a small box, sized to match the other row badges.
- Hovering the badge shows which sprint the issue is in: the sprint's name and ref, e.g. "sprint-3 · UI polish", plus its state (active / planned / completed).
- Issues that aren't in a sprint show no badge. Unsprinted issues stand out by having no badge.
- In projects with sprints disabled, no badge is shown.
Acceptance criteria
- The badge is rendered only when the project has
SprintsEnabled and the issue has a SprintID (model.Issue.SprintID).
- The tooltip shows the sprint name and ref. The existing convention is a
title attribute (see components.html:184). The badge also has an aria-label / sr-only text such as "In sprint UI polish", so screen readers don't just hear "S".
- The badge sits inside the row's
<a>, so it must not add a nested link or interactive element.
- Sprint names are loaded once per list request, e.g. a map from sprint ID to sprint for the project. No per-row queries.
- Rows loaded by infinite scroll (
NextHXGet) include the badge too.
- Decide which other lists that use
issue-summary-row should show it. It's redundant in views already grouped by sprint (sprint pages, backlog), so hide it there.
- Works on mobile, where the row stacks, and in light and dark modes.
- Tests cover: badge shown for a sprinted issue with the right sprint name, no badge for an unsprinted issue, and no badge when sprints are disabled.
Related
TRACK-68 added the per-project sprints setting.