Skip to content

Conversation

@MatiPl01
Copy link
Owner

@MatiPl01 MatiPl01 commented Aug 19, 2025

Description

This PR improves the implementation of the portal feature ensuring proper behavior when collapsible items are used and moves some logic from the DraggableView component to the ActiveItemPortal, which should result in lighter components to render when no portal is used.

Example recordings

The following 2 recordings show how the teleported collapsible item behaves (before the size wasn't animated, which is not correct).

Before After
Screen_recording_20250820_011949.mp4
Screen_recording_20250820_011730.mp4

@MatiPl01 MatiPl01 self-assigned this Aug 19, 2025
@MatiPl01 MatiPl01 added the enhancement New feature or request label Aug 19, 2025
@vercel
Copy link

vercel bot commented Aug 19, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
react-native-sortables-docs Ignored Ignored Preview Aug 19, 2025 11:43pm

@MatiPl01 MatiPl01 requested a review from Copilot August 19, 2025 23:20
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 refactors the portal implementation for the sortables library to improve teleported item behavior, particularly for collapsible items. It replaces a subscription-based system with a direct query approach and moves portal logic from DraggableView to ActiveItemPortal.

  • Replaced the subscription mechanism with a simpler isTeleported query function in the portal context
  • Moved teleportation logic from DraggableView to ActiveItemPortal for better separation of concerns
  • Fixed animation behavior for collapsible teleported items by improving timing coordination

Reviewed Changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/react-native-sortables/src/types/providers/shared.ts Updated portal context type to replace subscribe with isTeleported method
packages/react-native-sortables/src/providers/shared/PortalProvider.tsx Implemented new portal provider logic using a Set for tracking teleported nodes instead of subscription system
packages/react-native-sortables/src/hooks/callbacks/useStableCallback.ts Added proper return type handling to the stable callback hook
packages/react-native-sortables/src/components/shared/DraggableView/ItemCell.tsx Made onLayout prop optional in ItemCell component
packages/react-native-sortables/src/components/shared/DraggableView/DraggableView.tsx Simplified component by removing portal subscription logic and moving teleportation handling to ActiveItemPortal
packages/react-native-sortables/src/components/shared/DraggableView/ActiveItemPortal.tsx Enhanced component to handle all teleportation logic with improved timing for collapsible item animations

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@MatiPl01 MatiPl01 merged commit 72dadef into main Aug 19, 2025
6 checks passed
@MatiPl01 MatiPl01 deleted the feat/better-portal-support branch August 19, 2025 23:45
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

enhancement New feature or request released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants