1
Fork 0
mirror of https://github.com/thegeneralist01/archivr synced 2026-07-22 11:15:41 +02:00
archivr/frontend/src
TheGeneralist 3bd61e944e
feat(frontend): async capture UX — reset dialog on submit, show skeleton rows
When the user presses Archive, CaptureDialog now immediately resets its
form to a fresh empty state and closes. Background captures continue
polling via intervals that survive the dialog close.

Skeleton rows appear at the top of EntriesView (filtered to the active
archive) for each in-flight job, giving visual feedback that something
is being processed. On completion the skeleton is removed and the entry
list refreshes; on failure the skeleton is removed and an error toast
fires — matching the existing toast behaviour.

Architecture:
- App owns pending-capture state (pendingCaptures) as the single source
  of truth, persisted to sessionStorage['pendingCaptures']. On page
  refresh, App seeds the list and passes it to CaptureDialog as
  activeJobs so polling reconnects without a second sessionStorage read.
- CaptureDialog emits onJobStarted({id,jobUid,locator,archiveId}) only
  after submitCapture() returns a job_uid — never before, never on
  failure — ensuring no orphan skeletons can persist after a refresh.
- onJobSettled(id) is called by startPolling on any terminal state
  (completed, failed, or network error), removing the skeleton.
- EntriesView filters pendingCaptures by archiveId so a capture in
  archive A never shows a skeleton in archive B.

Removed from CaptureDialog: submitItem, resetRow, hasActiveJobs,
anyActive, CapStatusDot. CaptureRow is simplified to idle-only display
with no disabled state, no retry button, no status dot.
2026-07-20 13:33:33 +02:00
..
components feat(frontend): async capture UX — reset dialog on submit, show skeleton rows 2026-07-20 13:33:33 +02:00
api.js feat(frontend): add Freedium mirror toggle to capture advanced options 2026-07-19 12:09:42 +02:00
App.jsx feat(frontend): async capture UX — reset dialog on submit, show skeleton rows 2026-07-20 13:33:33 +02:00
main.jsx feat(ui): rewrite frontend in React with Vite 2026-06-24 12:24:34 +02:00
styles.css feat(frontend): add SkeletonEntryRow with shimmer animation 2026-07-20 13:33:19 +02:00
utils.js feat: YouTube Music audio capture (ytm: shorthand, Spotify detection, stalled job recovery) (#19) 2026-07-06 15:34:14 +02:00