final feature set
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 10. Add Scroll Event Listener to Episodes Panel
|
||||
|
||||
meta:
|
||||
id: episode-infinite-scroll-10
|
||||
feature: episode-infinite-scroll
|
||||
priority: P2
|
||||
depends_on: []
|
||||
tags: [ui, events, scroll]
|
||||
|
||||
objective:
|
||||
- Detect when user scrolls to bottom of episodes list
|
||||
- Add scroll event listener to episodes panel
|
||||
- Track scroll position and trigger pagination when needed
|
||||
|
||||
deliverables:
|
||||
- Scroll event handler function
|
||||
- Scroll position tracking
|
||||
- Integration with episodes panel
|
||||
|
||||
steps:
|
||||
1. Modify MyShowsPage to add scroll event listener
|
||||
2. Detect scroll-to-bottom event (when scrollHeight - scrollTop <= clientHeight)
|
||||
3. Track current scroll position
|
||||
4. Add debouncing for scroll events
|
||||
5. Test scroll detection accuracy
|
||||
|
||||
tests:
|
||||
- Unit: Test scroll detection logic
|
||||
- Integration: Test scroll events in episodes panel
|
||||
- Manual: Scroll to bottom and verify detection
|
||||
|
||||
acceptance_criteria:
|
||||
- Scroll-to-bottom is detected accurately
|
||||
- Debouncing prevents excessive event firing
|
||||
- Scroll position is tracked correctly
|
||||
|
||||
validation:
|
||||
- Scroll through episodes list
|
||||
- Verify bottom detection works
|
||||
- Test with different terminal sizes
|
||||
|
||||
notes:
|
||||
- Use scrollbox component's scroll event if available
|
||||
- Debounce scroll events to 100ms
|
||||
- Handle both manual scroll and programmatic scroll
|
||||
- Consider virtual scrolling if episode count is large
|
||||
@@ -0,0 +1,46 @@
|
||||
# 11. Implement Paginated Episode Fetching
|
||||
|
||||
meta:
|
||||
id: episode-infinite-scroll-11
|
||||
feature: episode-infinite-scroll
|
||||
priority: P2
|
||||
depends_on: [episode-infinite-scroll-10]
|
||||
tags: [rss, pagination, data-fetching]
|
||||
|
||||
objective:
|
||||
- Fetch episodes in chunks with MAX_EPISODES_REFRESH limit
|
||||
- Merge new episodes with existing list
|
||||
- Maintain episode ordering (newest first)
|
||||
|
||||
deliverables:
|
||||
- Paginated episode fetch function
|
||||
- Episode list merging logic
|
||||
- Integration with feed store
|
||||
|
||||
steps:
|
||||
1. Create paginated fetch function in feed store
|
||||
2. Implement chunk-based episode fetching (50 episodes at a time)
|
||||
3. Add logic to merge new episodes with existing list
|
||||
4. Maintain reverse chronological order (newest first)
|
||||
5. Deduplicate episodes by title or URL
|
||||
|
||||
tests:
|
||||
- Unit: Test paginated fetch logic
|
||||
- Integration: Test with real RSS feeds
|
||||
- Edge case: Test with feeds having < 50 episodes
|
||||
|
||||
acceptance_criteria:
|
||||
- Episodes fetched in chunks of MAX_EPISODES_REFRESH
|
||||
- New episodes merged correctly with existing list
|
||||
- Episode ordering maintained (newest first)
|
||||
|
||||
validation:
|
||||
- Test with RSS feed having 100+ episodes
|
||||
- Verify pagination works correctly
|
||||
- Check episode ordering after merge
|
||||
|
||||
notes:
|
||||
- Use existing `MAX_EPISODES_REFRESH = 50` constant
|
||||
- Add episode deduplication logic
|
||||
- Preserve episode metadata during merge
|
||||
- Handle cases where feed has fewer episodes
|
||||
@@ -0,0 +1,46 @@
|
||||
# 12. Manage Episode List Pagination State
|
||||
|
||||
meta:
|
||||
id: episode-infinite-scroll-12
|
||||
feature: episode-infinite-scroll
|
||||
priority: P2
|
||||
depends_on: [episode-infinite-scroll-11]
|
||||
tags: [state-management, pagination]
|
||||
|
||||
objective:
|
||||
- Track pagination state (current page, loaded count, has more episodes)
|
||||
- Manage episode list state changes
|
||||
- Handle pagination state across component renders
|
||||
|
||||
deliverables:
|
||||
- Pagination state in feed store
|
||||
- Episode list state management
|
||||
- Integration with scroll events
|
||||
|
||||
steps:
|
||||
1. Add pagination state to feed store (currentPage, loadedCount, hasMore)
|
||||
2. Update episode list when new episodes are loaded
|
||||
3. Manage loading state for pagination
|
||||
4. Handle empty episode list case
|
||||
5. Test pagination state transitions
|
||||
|
||||
tests:
|
||||
- Unit: Test pagination state updates
|
||||
- Integration: Test state transitions with scroll
|
||||
- Edge case: Test with no episodes in feed
|
||||
|
||||
acceptance_criteria:
|
||||
- Pagination state accurately tracks loaded episodes
|
||||
- Episode list updates correctly with new episodes
|
||||
- Loading state properly managed
|
||||
|
||||
validation:
|
||||
- Load episodes and verify state updates
|
||||
- Scroll to bottom and verify pagination triggers
|
||||
- Test with feed having many episodes
|
||||
|
||||
notes:
|
||||
- Use existing feed store from `src/stores/feed.ts`
|
||||
- Add pagination state to Feed interface
|
||||
- Consider loading indicator visibility
|
||||
- Handle rapid scroll events gracefully
|
||||
46
tasks/episode-infinite-scroll/13-load-more-indicator.md
Normal file
46
tasks/episode-infinite-scroll/13-load-more-indicator.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# 13. Add Loading Indicator for Pagination
|
||||
|
||||
meta:
|
||||
id: episode-infinite-scroll-13
|
||||
feature: episode-infinite-scroll
|
||||
priority: P3
|
||||
depends_on: [episode-infinite-scroll-12]
|
||||
tags: [ui, feedback, loading]
|
||||
|
||||
objective:
|
||||
- Display loading indicator when fetching more episodes
|
||||
- Show loading state in episodes panel
|
||||
- Hide indicator when pagination complete
|
||||
|
||||
deliverables:
|
||||
- Loading indicator component
|
||||
- Loading state display logic
|
||||
- Integration with pagination events
|
||||
|
||||
steps:
|
||||
1. Add loading state to episodes panel state
|
||||
2. Create loading indicator UI (spinner or text)
|
||||
3. Display indicator when fetching episodes
|
||||
4. Hide indicator when pagination complete
|
||||
5. Test loading state visibility
|
||||
|
||||
tests:
|
||||
- Integration: Test loading indicator during fetch
|
||||
- Visual: Verify loading state doesn't block interaction
|
||||
- UX: Test loading state disappears when done
|
||||
|
||||
acceptance_criteria:
|
||||
- Loading indicator displays during fetch
|
||||
- Indicator is visible but doesn't block scrolling
|
||||
- Indicator disappears when pagination complete
|
||||
|
||||
validation:
|
||||
- Scroll to bottom and watch loading indicator
|
||||
- Verify indicator shows/hides correctly
|
||||
- Test with slow RSS feeds
|
||||
|
||||
notes:
|
||||
- Reuse existing loading indicator pattern from MyShowsPage
|
||||
- Use spinner or "Loading..." text
|
||||
- Position indicator at bottom of scrollbox
|
||||
- Don't block user interaction while loading
|
||||
21
tasks/episode-infinite-scroll/README.md
Normal file
21
tasks/episode-infinite-scroll/README.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Episode List Infinite Scroll
|
||||
|
||||
Objective: Implement scroll-to-bottom loading for episode lists with MAX_EPISODES_REFRESH limit
|
||||
|
||||
Status legend: [ ] todo, [~] in-progress, [x] done
|
||||
|
||||
Tasks
|
||||
- [ ] 10 — Add scroll event listener to episodes panel → `10-episode-list-scroll-handler.md`
|
||||
- [ ] 11 — Implement paginated episode fetching → `11-paginated-episode-loading.md`
|
||||
- [ ] 12 — Manage episode list pagination state → `12-episode-list-state-management.md`
|
||||
- [ ] 13 — Add loading indicator for pagination → `13-load-more-indicator.md`
|
||||
|
||||
Dependencies
|
||||
- 10 -> 11
|
||||
- 11 -> 12
|
||||
- 12 -> 13
|
||||
|
||||
Exit criteria
|
||||
- Episode list automatically loads more episodes when scrolling to bottom
|
||||
- MAX_EPISODES_REFRESH is respected per fetch
|
||||
- Loading state is properly displayed during pagination
|
||||
Reference in New Issue
Block a user