[Playgrounds P5d] Videos tab in the playground shell + submit flow (frontend) #339

Closed
opened 2026-07-02 15:15:30 +00:00 by spikerj · 1 comment
Owner

Sub-ticket of P5 (#328), epic #323. Depends on #336 (approved-read path); integrates with #337 (pipeline) for the submit flow and #338 (moderation).

What: surface videos in the shared LanguagePlaygroundShellComponent so all five playgrounds get them at once, reusing the shell's right-pane tab pattern established by the Reading tab (#326/#327).

Scope:

  • Videos tab/pane in the shell right pane: official video for the current lesson + approved community videos for the current block (GET /api/Lessons/{n}/videos), grouped by panelIndex
  • Player consistent with existing media components; lazy-load, poster thumbnail, no autoplay
  • Submit-a-video flow for logged-in users (upload to #337's endpoint) with a clear pending-review state for the submitter; hidden/CTA-to-login for anonymous users
  • Empty state when a lesson/block has no videos (no empty chrome, matching the Reading tab behavior)
  • i18n chrome (en/es); data-testid per the shell E2E convention
  • Unit tests: tab renders approved videos grouped by block, submit gating by auth, empty state

Acceptance: an approved community video appears on its lesson block across all five playgrounds; logged-in users can submit and see a pending state; anonymous users never see unapproved content.

Sub-ticket of P5 (#328), epic #323. Depends on #336 (approved-read path); integrates with #337 (pipeline) for the submit flow and #338 (moderation). **What:** surface videos in the shared `LanguagePlaygroundShellComponent` so all five playgrounds get them at once, reusing the shell's right-pane tab pattern established by the Reading tab (#326/#327). **Scope:** - [ ] **Videos** tab/pane in the shell right pane: official video for the current lesson + approved community videos for the current block (`GET /api/Lessons/{n}/videos`), grouped by `panelIndex` - [ ] Player consistent with existing media components; lazy-load, poster thumbnail, no autoplay - [ ] Submit-a-video flow for logged-in users (upload to #337's endpoint) with a clear pending-review state for the submitter; hidden/CTA-to-login for anonymous users - [ ] Empty state when a lesson/block has no videos (no empty chrome, matching the Reading tab behavior) - [ ] i18n chrome (en/es); `data-testid` per the shell E2E convention - [ ] Unit tests: tab renders approved videos grouped by block, submit gating by auth, empty state **Acceptance:** an approved community video appears on its lesson block across all five playgrounds; logged-in users can submit and see a pending state; anonymous users never see unapproved content.
Author
Owner

Done — merged via spikersoft-angular PR #102. Videos tab in the shared LanguagePlaygroundShellComponent (all five playgrounds): official + approved community videos grouped by block, native <video> player, submit-a-video flow for logged-in users (via #336's URL+metadata endpoint) with pending-review state, login CTA for anonymous, empty-state handling, data-testid selectors, en/es i18n, 11 unit tests. Note: file-upload/transcode is a later enhancement (#337); the current submit accepts a URL. Closing.

Done — merged via spikersoft-angular PR #102. Videos tab in the shared `LanguagePlaygroundShellComponent` (all five playgrounds): official + approved community videos grouped by block, native `<video>` player, submit-a-video flow for logged-in users (via #336's URL+metadata endpoint) with pending-review state, login CTA for anonymous, empty-state handling, `data-testid` selectors, en/es i18n, 11 unit tests. Note: file-upload/transcode is a later enhancement (#337); the current submit accepts a URL. Closing.
Sign in to join this conversation.