diff --git a/frontend/src/admin/DraftQueue.tsx b/frontend/src/admin/DraftQueue.tsx index 9afc1e6..29403ee 100644 --- a/frontend/src/admin/DraftQueue.tsx +++ b/frontend/src/admin/DraftQueue.tsx @@ -86,6 +86,15 @@ function DraftPhoto({ // session asks it to. This is what makes the button visibly do something. No // column and no server change: the file's identity has not changed, only this // page's need to see it again. + // + // Bumped in `finally`, not on success, and that is the whole point of it + // rather than a tidy-up. The server turns the displayed file first and the + // pristine original second, so a failure between them answers 500 with the + // photo already rotated on disk. Bumping only on success would show that + // admin an error beside a picture that had not visibly moved, and the + // obvious response — press it again — turns it a second time. Re-requesting + // the file either way is what makes the design's remedy, one press back, + // actually available. The cost is one wasted request when nothing changed. const [version, setVersion] = useState(0); const src = version === 0 ? image.image_path : `${image.image_path}?v=${version}`; @@ -107,10 +116,10 @@ function DraftPhoto({ setTurning(true); try { await rotateImage(itemId, image.id, direction); - setVersion(Date.now()); } catch (err) { message.error(err instanceof Error ? err.message : 'that did not work'); } finally { + setVersion(Date.now()); setTurning(false); } };