mirror of
https://github.com/Donkie/Spoolman.git
synced 2026-10-22 18:12:18 -05:00
The page fetched every spool up front (limit 1000, sorted by location) and re-ran that query on every live spool event. On a 4158-spool collection that was 14.2 s and 1.82 MB, and it silently truncated: 76% of the spools never appeared, so the per-card counts were wrong too. One aggregate query (/spool/group?group_by=location, 10 ms / 2.1 KB) now supplies every location and its exact count, and each card fetches its own spools 30 at a time — starting when it scrolls into view, continuing as its list is scrolled, capped at three requests in flight so a screenful of cards doesn't queue behind the browser's per-host connection limit. Card bodies get a max height and scroll internally. Live spool events are applied to the loaded cards directly, with a single debounced aggregate refresh to re-authorize the counts, rather than reloading everything. Because a card now holds a page rather than the whole location, its saved custom spool order can only speak for what is loaded; ids from the previous order that aren't loaded are carried over behind the loaded ones instead of being dropped. Also fixes shelf reordering, which never worked under Svelte 5. The grid's drag zone was armed by setting dragDisabled from the grip's own mousedown handler, but svelte-dnd-action only attaches its mousedown/touchstart listeners while dragDisabled is already false, and Svelte 5 flushes state changes asynchronously — so the action updated after the press had passed and the drag was never seen. Arm it from pointerdown (which precedes both mousedown and touchstart) via flushSync so the listener is in place in time. Claude-Session: https://claude.ai/code/session_014Cwk5Yyze9yPvkYkUtMAP4