-
Notifications
You must be signed in to change notification settings - Fork 0
Enhance content management background fetching #56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Implement ThrottledFetchingService to efficiently fetch all items from a paginated data source - Use a sequential-discovery, batched-execution strategy for optimal performance - Centralize robust sequential fetching logic for cursor-based pagination - Improve user experience in DropdownButtonFormField by pre-loading all options
- Add ThrottledFetchingService to the app's repository providers - Inject ThrottledFetchingService into SharedDataBloc - Update imports to include the new service
…shared data fetching - Introduce ThrottledFetchingService to replace inline fetching logic - Update constructor to include ThrottledFetchingService - Modify _onSharedDataRequested to use the new fetching service - Remove redundant fetching logic from the BLoC
… page - Add loading state and helper text for country dropdown - Display full country list once fetched - Improve code readability and structure
- Add loading state and full country list to ContentManagementState - Implement BlocBuilder for ContentManagementBloc to handle loading state - Display loading indicator and disable dropdown when countries are loading - Update selectedCountry variable to use contentState instead of widget.state
Refactors the create source page to conditionally disable the language and country dropdowns while their respective full lists are being fetched in the background. This aligns the UI behavior with the create/edit headline pages, providing a better user experience by preventing interaction with incomplete data.
Refactors the edit source page to conditionally disable the language and country dropdowns while their respective full lists are being fetched in the background. This aligns the UI behavior with the create/edit headline pages and the create source page, providing a better user experience by preventing interaction with incomplete data.
The pagination loop in `ThrottledFetchingService` was vulnerable to an infinite loop if the API returned `hasMore: true` with a `null` cursor. This change makes the loop condition more robust by ensuring it terminates if the cursor becomes null, thus preventing the service from repeatedly re-fetching the first page. Additionally, a large block of dead code and confusing comments related to a non-functional batching strategy has been removed to improve code clarity and maintainability.
- Improved the class documentation to provide a clearer and more concise description - Refocused the explanation on the service's core functionality - Removed specific Flutter widget references to broaden applicability
…a fetching logic - Explain the rationale behind pre-fetching shared data for content management - Describe the limitations of DropdownButtonFormField and why pre-fetching is necessary - Outline the implementation strategy using ThrottledFetchingService - Improve code readability and maintainability with detailed documentation
Enhances the `ThrottledFetchingService` to be a better API citizen by introducing a configurable delay between sequential page fetches. - Adds a `delayBetweenRequests` parameter to the `fetchAll` method with a default of 200ms. - Implements `Future.delayed` within the pagination loop to throttle requests. - Removes the unused `batchSize` parameter to clean up the method signature. This prevents overwhelming the server with rapid-fire requests when fetching a large number of pages.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @fulleni, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request refactors the application's data fetching strategy for content management. It introduces a new ThrottledFetchingService
to centralize and optimize the retrieval of complete datasets, such as lists of countries and languages, which are essential for populating various dropdowns. This change improves the efficiency of data loading and enhances the user experience by providing clear loading indicators and temporarily disabling dropdowns during data retrieval.
Highlights
- New Throttled Fetching Service: A new
ThrottledFetchingService
is introduced to centralize and manage the efficient retrieval of all items from paginated data sources. This service fetches pages sequentially with a configurable delay between requests to prevent API overload, ensuring all necessary data is retrieved for UI components that require full datasets upfront. - Centralized Data Loading: The
ContentManagementBloc
now leverages theThrottledFetchingService
to fetch comprehensive lists of countries and languages, replacing its previous internal, less optimized fetching logic. This allows for parallel fetching of different data types (e.g., countries and languages simultaneously). - Enhanced User Experience for Dropdowns: UI components, specifically country and language dropdowns in content creation and editing forms, are updated to reactively display loading states and become disabled while their data is being fetched, improving clarity and preventing premature interaction.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/
folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces a ThrottledFetchingService
to handle background fetching of paginated data and improves the user experience with loading indicators. The changes promote better code organization and reusability. Key issues identified include misleading documentation regarding parallel vs. sequential fetching, potential data loss due to improper context.watch
usage in UI components, and opportunities to simplify the fetchAll
implementation.
Status
READY/IN DEVELOPMENT/HOLD
Description
Type of Change