react-template
react-template copied to clipboard
feature-itunes-ticket-NA
itunes api init! WIP, Due 3 days. visit route /itunes
Summary by CodeRabbit
-
New Features
- Introduced an iTunes track search interface with real-time search, debounced input, and error handling.
- Added a SongCard component to display track details with artwork, artist, genre, and audio playback controls.
- Added a new route for iTunes search, accessible via the navigation.
-
Design & Style
- Updated app theme to a dark mode with custom violet and blue-gray colors, blurred backgrounds, and enhanced card styles.
-
Bug Fixes
- Improved immutability and error handling in API utilities.
-
Documentation
- Added English translation for track search errors.
-
Tests
- Added comprehensive tests for the iTunes search feature, including component, reducer, saga, selector, and API tests.
-
Chores
- Added Husky as a new development dependency for managing Git hooks.
Walkthrough
This update introduces a new iTunes track search feature, including Redux state management, sagas, selectors, and a user interface with debounced search and audio playback. It adds supporting tests, a new route and translations, updates the theme and layout, and refactors API utilities for improved immutability. The iTunes API client and route configuration are also added.
Changes
| File(s) | Change Summary |
|---|---|
| app/components/SongCard/index.js | New SongCard React component for displaying track info and audio playback. |
| app/containers/App/index.js | Replaces static theme with dark mode, custom colors, blurred background, and updates layout components. |
| app/containers/ITunesSearch/actions.js app/containers/ITunesSearch/constants.js |
Adds Redux action creators and constants for iTunes track search. |
| app/containers/ITunesSearch/index.js | Adds ITunesSearch React component with debounced search, Redux integration, and styled UI. |
| app/containers/ITunesSearch/loadable.js | Adds loadable wrapper for async loading of ITunesSearch component. |
| app/containers/ITunesSearch/reducer.js | Adds Redux reducer for managing iTunes search state. |
| app/containers/ITunesSearch/saga.js | Adds saga for handling async iTunes search with debounce and API call. |
| app/containers/ITunesSearch/selectors.js | Adds selectors for accessing iTunes search state slices. |
| app/containers/ITunesSearch/tests/index.test.js | Adds tests for the ITunesSearch component's UI and Redux actions. |
| app/containers/ITunesSearch/tests/reducer.test.js | Adds tests for the iTunes search reducer logic. |
| app/containers/ITunesSearch/tests/saga.test.js | Adds tests for the iTunes search saga's effects and error handling. |
| app/containers/ITunesSearch/tests/selectors.test.js | Adds tests for iTunes search selectors. |
| app/routeConfig.js | Adds new itunes route configuration for the iTunes search feature. |
| app/services/itunesApi.js | Adds iTunes API client and searchTracks function using wretch. |
| app/services/tests/itunesApi.test.js | Adds tests for iTunes API client and search function. |
| app/translations/en.json | Adds translation key for iTunes search error message. |
| app/utils/apiUtils.js | Refactors API client generation and request transformation for immutability and simplicity. |
| app/utils/routeConstants.js | Adds route constants for the new /itunes route. |
| package.json | Adds husky dependency. |
Sequence Diagram(s)
sequenceDiagram
participant User
participant ITunesSearchComponent
participant ReduxStore
participant Saga
participant ITunesApi
participant SongCard
User->>ITunesSearchComponent: Types search query
ITunesSearchComponent->>ReduxStore: Dispatch SEARCH_TRACKS action
ReduxStore->>Saga: Notifies of SEARCH_TRACKS
Saga->>Saga: Debounce (300ms)
Saga->>ITunesApi: Call searchTracks(query)
ITunesApi-->>Saga: Returns track results
Saga->>ReduxStore: Dispatch SEARCH_TRACKS_SUCCESS with tracks
ReduxStore->>ITunesSearchComponent: Updates tracks state
ITunesSearchComponent->>SongCard: Renders track info and playback controls
User->>SongCard: Clicks play
SongCard->>SongCard: Plays audio preview
Poem
In a field of code, a rabbit hops,
Searching for tracks with musical stops.
With blurred violet skies and buttons anew,
Songs now play with a click or two!
Redux and sagas, selectors in towβ
The iTunes search garden is ready to grow.
π΅π
β¨ Finishing Touches
- [ ] π Generate Docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
πͺ§ Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
I pushed a fix in commit <commit_id>, please review it.Explain this complex logic.Open a follow-up GitHub issue for this discussion.
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:@coderabbitai explain this code block.@coderabbitai modularize this function.
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.@coderabbitai read src/utils.ts and explain its main purpose.@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.@coderabbitai help me debug CodeRabbit configuration file.
Support
Need help? Create a ticket on our support page for assistance with any issues or questions.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
@coderabbitai pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository.@coderabbitai full reviewto do a full review from scratch and review all the files again.@coderabbitai summaryto regenerate the summary of the PR.@coderabbitai generate docstringsto generate docstrings for this PR.@coderabbitai generate sequence diagramto generate a sequence diagram of the changes in this PR.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai configurationto show the current CodeRabbit configuration for the repository.@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.