fix(downloads): Retry draws the refresh glyph, not Play (E28 S4)
The first UI-review run (Downloads) found a failed row whose Retry wore the Play glyph in the row and its menu, promising a video. DESIGN.md gains 'a glyph means one thing' and a log row.
This commit is contained in:
@@ -132,6 +132,22 @@ describe("DownloadCenter · the queue row", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("draws Retry as 'do it again', never the Play glyph (row and menu)", async () => {
|
||||
mocks.jobs = [job(1, "error"), job(2, "paused")];
|
||||
mount();
|
||||
const glyph = (el: Element) => el.querySelector("svg")?.getAttribute("class") ?? "";
|
||||
const retry = rowOf("Clip 1").querySelector('[aria-label="downloads.actions.retry"]')!;
|
||||
expect(glyph(retry)).toContain("lucide-refresh-cw");
|
||||
// A paused job resumes: that one keeps the transport glyph.
|
||||
const resume = rowOf("Clip 2").querySelector('[aria-label="downloads.actions.resume"]')!;
|
||||
expect(glyph(resume)).toContain("lucide-play");
|
||||
await openMenu(() => fireEvent.contextMenu(rowOf("Clip 1")));
|
||||
const row = screen
|
||||
.getAllByRole("menuitem", { hidden: true })
|
||||
.find((b) => b.textContent === "downloads.actions.retry")!;
|
||||
expect(glyph(row)).toContain("lucide-refresh-cw");
|
||||
});
|
||||
|
||||
it("closes on a second press of the same '…'", async () => {
|
||||
mocks.jobs = [job(1, "running")];
|
||||
mount();
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
Play,
|
||||
PlayCircle,
|
||||
Plus,
|
||||
RefreshCw,
|
||||
Settings2,
|
||||
Share2,
|
||||
UploadCloud,
|
||||
@@ -225,7 +226,12 @@ export default function DownloadCenter() {
|
||||
: "downloads.actions.resume",
|
||||
)}
|
||||
>
|
||||
<Play className="w-4 h-4" />
|
||||
{/* Retry is "do it again", not playback: the Play glyph promised a video. */}
|
||||
{job.status === "error" ? (
|
||||
<RefreshCw className="w-4 h-4" />
|
||||
) : (
|
||||
<Play className="w-4 h-4" />
|
||||
)}
|
||||
</IconBtn>
|
||||
)}
|
||||
</DownloadRow>
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
Pencil,
|
||||
Play,
|
||||
PlayCircle,
|
||||
RefreshCw,
|
||||
RotateCcw,
|
||||
Scissors,
|
||||
Share2,
|
||||
@@ -139,7 +140,7 @@ export function useDownloadActions({
|
||||
label: t(
|
||||
job.status === "error" ? "downloads.actions.retry" : "downloads.actions.resume",
|
||||
),
|
||||
icon: icon(Play),
|
||||
icon: icon(job.status === "error" ? RefreshCw : Play),
|
||||
onSelect: () => act.mutate({ id: job.id, op: "resume" }),
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user