Skip to content

Conversation

@MatiPl01
Copy link
Owner

@MatiPl01 MatiPl01 commented Aug 9, 2025

Description

This PR simplifies layout calculation logic for grid and flex components. It also optimizes the main layout calculation reaction which was previously improperly auto-workletized and ran sometimes 3 times instead of just once per layout change.

@MatiPl01 MatiPl01 self-assigned this Aug 9, 2025
@MatiPl01 MatiPl01 added enhancement New feature or request performance labels Aug 9, 2025
@vercel
Copy link

vercel bot commented Aug 9, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Skipped Deployment
Name Status Preview Comments Updated (UTC)
react-native-sortables-docs ⬜️ Ignored (Inspect) Aug 9, 2025 11:50am

@MatiPl01 MatiPl01 requested a review from Copilot August 9, 2025 11:53
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR optimizes layout calculation performance by eliminating redundant computations and simplifying the layout provider APIs. The main focus is on removing the auto-workletized layout reactions that were causing multiple unnecessary recalculations.

  • Removes custom hook-based layout calculation methods (useGridLayout and useFlexLayoutReaction) that were causing performance issues
  • Consolidates layout calculations directly into main animated reactions to prevent multiple executions
  • Introduces type definitions for DimensionLimits and Paddings to improve code organization

Reviewed Changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/react-native-sortables/src/types/providers/layout.ts Removes unused layout calculation hook types from context interfaces
packages/react-native-sortables/src/types/layout/flex.ts Extracts inline types into dedicated DimensionLimits and Paddings types
packages/react-native-sortables/src/providers/layout/grid/updates/common.ts Replaces useGridLayout hook with direct useDerivedValue calculation
packages/react-native-sortables/src/providers/layout/grid/GridLayoutProvider.tsx Consolidates layout calculation into main animated reaction, removing separate hook
packages/react-native-sortables/src/providers/layout/flex/updates/insert/index.ts Replaces layout reaction hooks with direct calculateFlexLayout calls
packages/react-native-sortables/src/providers/layout/flex/FlexLayoutProvider.tsx Merges layout calculation and update logic into single animated reaction

@MatiPl01 MatiPl01 merged commit f9c9875 into main Aug 9, 2025
6 checks passed
@MatiPl01 MatiPl01 deleted the perf/reduce-layout-calculations-freq branch August 9, 2025 11:56
MatiPl01 pushed a commit that referenced this pull request Sep 13, 2025
# [1.9.0](v1.8.0...v1.9.0) (2025-09-13)

### Bug Fixes

* A bunch of issues, like shaky scroll, invalid grid layout, added items flickering ([#463](#463)) ([3b160b6](3b160b6))
* Active item touch start position on Android ([#462](#462)) ([7704729](7704729))
* Autoscroll exceeding bounds ([#473](#473)) ([eddd21b](eddd21b))
* Collapsible items implementation on the web ([#485](#485)) ([4d261db](4d261db))
* Collapsible items shift when size changes ([#451](#451)) ([e816b6a](e816b6a))
* Incorrect drag start position, no item size animation when teleported ([#456](#456)) ([1730fb8](1730fb8))
* Invalid builder bob config ([#475](#475)) ([11cf84a](11cf84a))
* Invalid grid layout on mount ([#461](#461)) ([a47ed72](a47ed72))
* onActiveItemDropped not being fired when item is touched quickly ([#449](#449)) ([f66d980](f66d980))
* Pre-release fixes and improvements ([#476](#476)) ([736fb7b](736fb7b))
* Prevent auto scroll from over scrolling content container ([#484](#484)) ([db586d7](db586d7)), closes [#473](#473)

### Features

* Add custom shadow example to docs, clean up decoration style ([#466](#466)) ([1169928](1169928))
* Add example app build check CIs ([#480](#480)) ([5ad420c](5ad420c))
* Add style property to the handle component ([#477](#477)) ([28c9099](28c9099))
* Better collapsible auto-scroll behavior ([#457](#457)) ([2d24b14](2d24b14)), closes [#444](#444)
* Collapsible items support ([#444](#444)) ([66c03b6](66c03b6))
* Data provider ([#472](#472)) ([5dc34b6](5dc34b6))
* Improved teleported items behavior ([#452](#452)) ([72dadef](72dadef))
* Make layout update in sync with positions change on grid columns change ([#441](#441)) ([ef37d8c](ef37d8c))
* New auto scroll implementation ([#454](#454)) ([c4facec](c4facec)), closes [#285](#285) [#453](#453) [#285](#285)

### Performance Improvements

* Optimize rerenders caused by inlined callbacks, clean up drag state management ([#474](#474)) ([f5e3c89](f5e3c89))
* Reduce the number of layout calculations ([#442](#442)) ([f9c9875](f9c9875))
@MatiPl01
Copy link
Owner Author

🎉 This issue has been resolved in version 1.9.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants