Skip to content

Conversation

@Ronan-Fernandes
Copy link
Contributor

@Ronan-Fernandes Ronan-Fernandes commented Mar 17, 2025

  • __package_name__ package update - v __package_version__
    • changelog_info
    • changelog_info

Summary by CodeRabbit

  • New Features

    • Enjoy a smooth, continuous notifications feed that automatically loads more messages as you scroll.
    • Benefit from an enhanced scrolling interface across platforms for a more fluid and responsive experience.
    • New configuration parameter introduced for notifications loading.
  • Refactor

    • Experience consistent, optimized notifications loading through streamlined configurations and updated interactions.

@changeset-bot
Copy link

changeset-bot bot commented Mar 17, 2025

⚠️ No Changeset found

Latest commit: 7e71d55

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link

coderabbitai bot commented Mar 17, 2025

Walkthrough

This PR introduces a new constant, NUMBER_OF_NOTIFICATIONS_TO_LOAD_NEXT, now maintained in a common module. The native notifications list has been updated to use an InfiniteScrollerView component instead of a FlatList, integrating infinite scrolling with enhanced pagination hook values (loadNext, isLoadingNext, and hasNext). Additionally, the web notifications list now imports the constant from the common module, and the design system receives a new InfiniteScrollerView component with associated style and type definitions, along with an added dependency on Shopify’s FlashList.

Changes

File(s) Change Summary
packages/components/modules/notifications/common/constants.ts, packages/components/modules/notifications/web/NotificationsList/constants.ts, packages/components/modules/notifications/web/NotificationsList/index.tsx Introduces a new constant NUMBER_OF_NOTIFICATIONS_TO_LOAD_NEXT (value 5) in the common constants file, removes it from the web-specific file, and updates the web notifications list to import it from the common module.
packages/components/modules/notifications/native/NotificationsList/index.tsx Replaces FlatList with InfiniteScrollerView, updates the usePaginationFragment hook to include loadNext, isLoadingNext, and hasNext, and adds an onEndReached handler that triggers loading more notifications using the new constant.
packages/design-system/components/native/views/InfiniteScrollerView/index.tsx, .../styles.ts, .../types.ts, packages/design-system/components/native/views/index.ts Adds the new InfiniteScrollerView component along with its style definitions and TypeScript types, and exports them in the design system to provide an infinite scrolling interface using Shopify's FlashList.
packages/design-system/package.json Adds a new dependency on @shopify/flash-list with version ^1.7.6.
packages/components/package.json, packages/wagtail/package.json Updates version numbers from 1.0.26 to 1.0.27 in both packages.
packages/components/CHANGELOG.md, packages/design-system/CHANGELOG.md, packages/wagtail/CHANGELOG.md Adds new version entries reflecting the changes made in the respective packages.

Possibly related PRs

Suggested labels

needs review

Suggested reviewers

  • priscilladeroode
  • deboracosilveira
  • anicioalexandre

Poem

I’m a rabbit coding with a hop so light,
A constant carrot guiding my insight.
Infinite scrolling through digital fields so vast,
Notifications bloom as I scurry past.
Hopping in code, I leap into the future at last!

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it’s a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

packages/components/modules/notifications/common/constants.ts

Oops! Something went wrong! :(

ESLint: 8.57.1

Error: Cannot read config file: /packages/components/.eslintrc.js
Error: Cannot find module '@baseapp-frontend/config/.eslintrc-with-restricted-paths.js'
Require stack:

  • /packages/components/.eslintrc.js
  • /node_modules/.pnpm/@eslint+eslintrc@2.1.4/node_modules/@eslint/eslintrc/dist/eslintrc.cjs
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/cli-engine/cli-engine.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/eslint/eslint.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/eslint/index.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/cli.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/bin/eslint.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1248:15)
    at Module._load (node:internal/modules/cjs/loader:1074:27)
    at TracingChannel.traceSync (node:diagnostics_channel:315:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:217:24)
    at Module.require (node:internal/modules/cjs/loader:1339:12)
    at require (node:internal/modules/helpers:135:16)
    at Object. (/packages/components/.eslintrc.js:1:18)
    at Module._compile (node:internal/modules/cjs/loader:1546:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1691:10)
    at Module.load (node:internal/modules/cjs/loader:1317:32)
packages/components/modules/notifications/common/types.ts

Oops! Something went wrong! :(

ESLint: 8.57.1

Error: Cannot read config file: /packages/components/.eslintrc.js
Error: Cannot find module '@baseapp-frontend/config/.eslintrc-with-restricted-paths.js'
Require stack:

  • /packages/components/.eslintrc.js
  • /node_modules/.pnpm/@eslint+eslintrc@2.1.4/node_modules/@eslint/eslintrc/dist/eslintrc.cjs
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/cli-engine/cli-engine.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/eslint/eslint.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/eslint/index.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/cli.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/bin/eslint.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1248:15)
    at Module._load (node:internal/modules/cjs/loader:1074:27)
    at TracingChannel.traceSync (node:diagnostics_channel:315:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:217:24)
    at Module.require (node:internal/modules/cjs/loader:1339:12)
    at require (node:internal/modules/helpers:135:16)
    at Object. (/packages/components/.eslintrc.js:1:18)
    at Module._compile (node:internal/modules/cjs/loader:1546:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1691:10)
    at Module.load (node:internal/modules/cjs/loader:1317:32)
packages/design-system/components/native/views/InfiniteScrollerView/styles.ts

Oops! Something went wrong! :(

ESLint: 8.57.1

Error: Cannot read config file: /packages/design-system/.eslintrc.js
Error: Cannot find module '@baseapp-frontend/config/.eslintrc-with-restricted-paths.js'
Require stack:

  • /packages/design-system/.eslintrc.js
  • /node_modules/.pnpm/@eslint+eslintrc@2.1.4/node_modules/@eslint/eslintrc/dist/eslintrc.cjs
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/cli-engine/cli-engine.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/eslint/eslint.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/eslint/index.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/lib/cli.js
  • /node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/bin/eslint.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1248:15)
    at Module._load (node:internal/modules/cjs/loader:1074:27)
    at TracingChannel.traceSync (node:diagnostics_channel:315:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:217:24)
    at Module.require (node:internal/modules/cjs/loader:1339:12)
    at require (node:internal/modules/helpers:135:16)
    at Object. (/packages/design-system/.eslintrc.js:1:18)
    at Module._compile (node:internal/modules/cjs/loader:1546:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1691:10)
    at Module.load (node:internal/modules/cjs/loader:1317:32)
  • 6 others
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 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.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in 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 generate unit testing code.
    • @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.

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 pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai plan to trigger planning for file edits and PR creation.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file 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.

@Ronan-Fernandes Ronan-Fernandes self-assigned this Mar 17, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
packages/design-system/components/native/views/InfiniteScrollerView/types.ts (1)

13-15: Consider simplifying the InfiniteScrollerViewProps type definition.

The type definition has a redundant intersection with FlashListProps<TItem> appearing twice, as it's already included in line 13 and then partially omitted in line 14. This could lead to confusion for developers.

-export type InfiniteScrollerViewProps<TItem> = FlashListProps<TItem> &
-  Omit<FlashListProps<TItem>, 'ListFooterComponent'> &
+export type InfiniteScrollerViewProps<TItem> = Omit<FlashListProps<TItem>, 'ListFooterComponent'> &
   (ListFooterComponent<TItem> | IsLoading)
packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (1)

68-72: Consider a more explicit empty state for non-loading scenarios.

The current implementation returns a simple padded View when isLoading is false. You might want to consider a more explicit approach or remove the padding entirely when there are no more items to load.

-  const renderFooterLoadingState = () => {
-    if (!isLoading) return <View style={{ paddingTop: 24 }} />
-
-    return <LoadingScreen size="small" />
-  }
+  const renderFooterLoadingState = () => {
+    if (!isLoading) return null
+
+    return <LoadingScreen size="small" />
+  }
packages/components/modules/notifications/native/NotificationsList/index.tsx (1)

40-44: Remove outdated TODO comment.

The TODO comment "handle infinite scroll" is now obsolete since the implementation already addresses this with the InfiniteScrollerView and pagination hooks.

-  // TODO: handle infinite scroll
   const { data, loadNext, isLoadingNext, hasNext, refetch } = usePaginationFragment<
     NotificationsListQueryType,
     NotificationsListFragment$key
   >(NotificationsListFragment, me)
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d788f69 and 2c7d261.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (9)
  • packages/components/modules/notifications/common/constants.ts (1 hunks)
  • packages/components/modules/notifications/native/NotificationsList/index.tsx (3 hunks)
  • packages/components/modules/notifications/web/NotificationsList/constants.ts (0 hunks)
  • packages/components/modules/notifications/web/NotificationsList/index.tsx (1 hunks)
  • packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (1 hunks)
  • packages/design-system/components/native/views/InfiniteScrollerView/styles.ts (1 hunks)
  • packages/design-system/components/native/views/InfiniteScrollerView/types.ts (1 hunks)
  • packages/design-system/components/native/views/index.ts (1 hunks)
  • packages/design-system/package.json (1 hunks)
💤 Files with no reviewable changes (1)
  • packages/components/modules/notifications/web/NotificationsList/constants.ts
🔇 Additional comments (11)
packages/components/modules/notifications/common/constants.ts (1)

9-9: Good addition of a pagination constant

Adding this constant to the common module is a good practice for reusability across both web and native implementations. The value of 5 notifications seems reasonable for batch loading.

packages/design-system/package.json (1)

72-72:

✅ Verification successful

FlashList dependency added appropriately

The addition of @shopify/flash-list is appropriate for implementing the infinite scroller functionality. FlashList is a high-performance alternative to FlatList that offers better memory usage and rendering speed.

Verify React Native compatibility with this version of FlashList:


🏁 Script executed:

#!/bin/bash
# Check React Native version in the project and FlashList compatibility
echo "Checking React Native version in package.json..."
cat package.json | grep "\"react-native\":" || echo "Not found in root package.json"
echo "Checking in workspace packages..."
find packages -name "package.json" -exec grep -l "\"react-native\":" {} \; -exec grep "\"react-native\":" {} \;

Length of output: 656


FlashList dependency addition confirmed—React Native version appears compatible

The script output confirms that all workspace packages (including design-system) specify React Native using the alias "catalog:react-native-core". This indicates that the project is consistently using a catalog-based version of React Native, which should be compatible with @shopify/flash-list@^1.7.5 as long as the catalog mapping meets FlashList’s requirements.

  • Location: packages/design-system/package.json (line 72) shows the added dependency.
  • Verification: All relevant packages use "react-native": "catalog:react-native-core", suggesting consistent configuration across the workspace.

No further modifications are needed based on the current verification.

packages/design-system/components/native/views/InfiniteScrollerView/styles.ts (1)

1-7: Appropriate styling for infinite scroller

The style implementation is clean and minimal. Setting the container height to 100% ensures the component fills its parent container, which is necessary for proper scrolling functionality.

packages/components/modules/notifications/web/NotificationsList/index.tsx (2)

15-15: Good refactoring of constant import

Importing the constant from the common module instead of a local constants file is a good practice for code organization and reuse.


99-100: Consider addressing the overscan TODO comment

There's a commented TODO regarding potential "Maximum call stack size exceeded" errors when using overscan with the NUMBER_OF_NOTIFICATIONS_TO_LOAD_NEXT value. This might be worth investigating further to improve scrolling performance without causing stack overflow issues.

Could you provide more context on the Maximum call stack size exceeded error mentioned in the TODO comment? This might indicate a need for an alternative approach to improve scrolling performance without running into stack limitations.

packages/design-system/components/native/views/index.ts (1)

3-4: Properly exports new InfiniteScrollerView component and types.

The exports follow the established pattern in the design system, maintaining consistency with how other components are exported.

packages/design-system/components/native/views/InfiniteScrollerView/types.ts (1)

3-11: Well-structured mutual exclusivity pattern for component props.

The type definitions effectively create mutual exclusivity between ListFooterComponent and isLoading props, ensuring clear API usage patterns and preventing conflicting prop combinations.

packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (2)

10-59: Excellent JSDoc documentation.

The comprehensive documentation with clear descriptions and usage examples will help developers understand how to use this component correctly.


62-83: Well-structured component with proper prop handling.

The component correctly handles the props and provides a good implementation of an infinite scroller using FlashList. The conditional rendering of the footer loading state is a good approach.

packages/components/modules/notifications/native/NotificationsList/index.tsx (2)

5-5: Properly imports InfiniteScrollerView.

The import statement has been updated to include the new InfiniteScrollerView component from the design system.


73-88: Excellent implementation of infinite scrolling for notifications.

The InfiniteScrollerView is well-integrated with proper configuration for data loading, rendering, and pagination. The component correctly uses the pagination fragment hooks (loadNext, isLoadingNext, hasNext) to manage the infinite scrolling behavior.

@Ronan-Fernandes Ronan-Fernandes changed the title add Infinit scroller to notifications list and design system BA 2373 add Infinit scroller to notifications list and design system Mar 18, 2025
@Ronan-Fernandes Ronan-Fernandes added the needs review PR needs to be reviewed. label Mar 20, 2025
@anicioalexandre anicioalexandre added needs changes PR was reviewed, and changes are required. and removed needs review PR needs to be reviewed. labels Mar 26, 2025
@Ronan-Fernandes Ronan-Fernandes force-pushed the BA-2373-FE-Notifications-infinite-scroller branch from 2c7d261 to a576100 Compare March 26, 2025 21:01
@Ronan-Fernandes Ronan-Fernandes force-pushed the BA-2373-FE-Notifications-infinite-scroller branch from a576100 to b1e241b Compare March 26, 2025 21:02
@sonarqubecloud
Copy link

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
packages/components/modules/notifications/native/NotificationsList/styles.ts (1)

20-23: Consider adding a comment explaining the magic number or using a named constant.

The paddingBottom: 74 uses a specific value that might not be immediately clear to other developers. To improve code maintainability, consider:

  1. Adding a comment explaining what this padding accommodates (e.g., bottom navigation bar, toolbar, etc.)
  2. Or extracting this value to a named constant to make its purpose obvious

Additionally, since both container and listContainer have height: '100%', ensure this duplication is intentional and necessary for your nested component structure.

+ // Named constant for bottom padding to account for navigation bar
+ const BOTTOM_NAV_HEIGHT = 74;

  StyleSheet.create({
    // ...
    listContainer: {
      height: '100%',
-     paddingBottom: 74,
+     paddingBottom: BOTTOM_NAV_HEIGHT,
    },
  })
packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (1)

7-7: Make sure isLoading is correctly typed in the component props.

The JSDoc states that isLoading is required when ListFooterComponent is not provided, but there's no runtime validation to enforce this requirement. Consider adding a runtime check to ensure this constraint is met.

const InfiniteScrollerView = <TItem,>({
  isLoading,
  estimatedItemSize = 200,
  ListFooterComponent,
  ...props
}: InfiniteScrollerViewProps<TItem>) => {
+  // Validate required props based on conditions
+  if (!ListFooterComponent && isLoading === undefined) {
+    console.warn('isLoading is required when ListFooterComponent is not provided');
+  }

  const renderFooterLoadingState = () => {
    if (!isLoading) return <View style={{ paddingTop: 24 }} />

    return <LoadingScreen size="small" />
  }
packages/design-system/CHANGELOG.md (1)

7-7: Fix typo in CHANGELOG entry.

There's a typo in "infinit" which should be "infinite".

-Add infinit scroller custom component based on @shopify/flash-list 1.7.6
+Add infinite scroller custom component based on @shopify/flash-list 1.7.6
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2c7d261 and 7e71d55.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (16)
  • packages/components/CHANGELOG.md (1 hunks)
  • packages/components/modules/notifications/common/constants.ts (1 hunks)
  • packages/components/modules/notifications/common/types.ts (1 hunks)
  • packages/components/modules/notifications/native/NotificationsList/index.tsx (4 hunks)
  • packages/components/modules/notifications/native/NotificationsList/styles.ts (1 hunks)
  • packages/components/modules/notifications/web/NotificationsList/constants.ts (0 hunks)
  • packages/components/modules/notifications/web/NotificationsList/index.tsx (1 hunks)
  • packages/components/package.json (1 hunks)
  • packages/design-system/CHANGELOG.md (1 hunks)
  • packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (1 hunks)
  • packages/design-system/components/native/views/InfiniteScrollerView/styles.ts (1 hunks)
  • packages/design-system/components/native/views/InfiniteScrollerView/types.ts (1 hunks)
  • packages/design-system/components/native/views/index.ts (1 hunks)
  • packages/design-system/package.json (2 hunks)
  • packages/wagtail/CHANGELOG.md (1 hunks)
  • packages/wagtail/package.json (1 hunks)
💤 Files with no reviewable changes (1)
  • packages/components/modules/notifications/web/NotificationsList/constants.ts
✅ Files skipped from review due to trivial changes (2)
  • packages/components/package.json
  • packages/wagtail/package.json
🚧 Files skipped from review as they are similar to previous changes (7)
  • packages/components/modules/notifications/common/constants.ts
  • packages/components/modules/notifications/web/NotificationsList/index.tsx
  • packages/design-system/components/native/views/index.ts
  • packages/design-system/components/native/views/InfiniteScrollerView/types.ts
  • packages/design-system/components/native/views/InfiniteScrollerView/styles.ts
  • packages/components/modules/notifications/native/NotificationsList/index.tsx
  • packages/design-system/package.json
🧰 Additional context used
🧬 Code Definitions (1)
packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (2)
packages/design-system/components/native/views/InfiniteScrollerView/types.ts (1)
  • InfiniteScrollerViewProps (13-15)
packages/design-system/components/native/views/InfiniteScrollerView/styles.ts (1)
  • styles (3-7)
🔇 Additional comments (5)
packages/components/modules/notifications/common/types.ts (2)

1-2: LGTM: Clean and proper import statement.

The import statement correctly imports the GraphQL fragment data type from the generated file, which will be used to derive the notification types.


3-5: Well-structured type definitions that follow best practices.

These type definitions follow TypeScript best practices by:

  1. Using NonNullable to ensure type safety
  2. Creating a logical hierarchical structure that maps to GraphQL's cursor-based pagination pattern
  3. Properly typing array elements with [number] index access

These types will provide proper type safety when working with notification data in the new infinite scrolling implementation.

packages/design-system/components/native/views/InfiniteScrollerView/index.tsx (1)

1-82: Well-structured component with comprehensive documentation.

The InfiniteScrollerView component is thoughtfully implemented with clear documentation, proper type handling, and good examples. The integration with Shopify's FlashList and the conditional footer rendering make it a flexible solution for infinite scrolling lists.

A few observations:

  1. The component correctly implements generic type handling as suggested in previous reviews
  2. The loading state handling is clean and straightforward
  3. The JSDoc is thorough and provides clear usage examples
packages/components/CHANGELOG.md (1)

3-9: LGTM - Changelog correctly documents the changes.

The CHANGELOG.md entry properly documents the addition of the infinite scroller functionality to RN notifications list and the dependency update to the design system.

packages/wagtail/CHANGELOG.md (1)

3-8: LGTM - Changelog correctly documents the dependency update.

The CHANGELOG.md entry properly documents the dependency update to the design system package.

@Ronan-Fernandes Ronan-Fernandes merged commit 48d906c into master Mar 27, 2025
7 of 8 checks passed
@nossila nossila deleted the BA-2373-FE-Notifications-infinite-scroller branch May 26, 2025 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs changes PR was reviewed, and changes are required.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants