Skip to content

Service Order: thumbnails, auto video times, and row-based drag & drop#415

Merged
jzongker merged 1 commit into
mainfrom
service-order-improvements
Jul 7, 2026
Merged

Service Order: thumbnails, auto video times, and row-based drag & drop#415
jzongker merged 1 commit into
mainfrom
service-order-improvements

Conversation

@mbyrdLCS

@mbyrdLCS mbyrdLCS commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Improvements to the Serving → Plans → Service Order screen, focused on Dropbox-based lessons (works for any provider).

What changed

Thumbnails on every row
Provider media links are fetched fresh on each page load (Dropbox links expire in ~4h, so nothing is stored) and matched to rows by providerContentPath, falling back to label. Images render directly; videos paint a first frame via <video preload="metadata">.

Durations

  • Videos still at 0:00 automatically get their real measured length saved on page load (only fills blanks — never overwrites a manually set time).
  • Images intentionally stay at 0 stored seconds (FreePlay keeps the volunteer in control) but display an italic ~5:00 planning estimate; the time rail and class total include estimates so leaders can gauge class length.

Drag & drop rework

  • Drag by the handle only — rows stay clickable for previews.
  • Every row is a drop target: blue insertion line shows above/below based on cursor position. No more dashed drop boxes appearing mid-drag and shifting the layout.
  • Drop an item onto a section header to add it into that section (works for empty sections).
  • Window-edge auto-scroll replaces the floating scroll-up/scroll-down bars.

Fixes

  • .mp4 previews now use the video player: ActionDialog trusts the file-name extension since provider download links carry no extension (URL sniffing defaulted them to <img>).
  • Added @stripe/stripe-js + @stripe/react-stripe-js devDependencies — optional peer deps of apphelper that Vite 8 fails hard on, which broke fresh installs (gray screen).

Related

Testing

  • tsc --noEmit clean, eslint clean on touched files
  • Exercised manually against production APIs with a Dropbox-linked plan (images + mp4s): thumbnails, auto times, estimates, reordering within/between sections, preview playback

🤖 Generated with Claude Code

- Rows show real media thumbnails: provider links are fetched fresh each
  page load (Dropbox links expire) and matched by providerContentPath or
  label; videos render a first frame via <video preload="metadata">
- Videos at 0:00 automatically get their measured duration saved on load;
  images stay at 0 (operator advances them) but display an italic ~5:00
  planning estimate that schedule math includes
- Drag & drop reworked: drag by handle only, every row is a drop target
  with a blue insertion line (no more layout-shifting drop boxes), drop
  onto a section header to add into that section, window edge auto-scroll
- ActionDialog trusts the file-name extension over URL sniffing so .mp4
  previews use the video player (provider links carry no extension)
- Add @stripe/* devDependencies (optional peer deps of apphelper that
  Vite 8 fails hard on during a fresh install)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jzongker
jzongker merged commit 68c7198 into main Jul 7, 2026
@jzongker
jzongker deleted the service-order-improvements branch July 7, 2026 02:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants