1111 */
1212
1313import { CollectionBranchProps , CollectionRenderer , CollectionRendererContext , CollectionRootProps , renderAfterDropIndicators } from './Collection' ;
14- import { DropTargetDelegate , ItemDropTarget , Node } from '@react-types/shared' ;
14+ import { DropTargetDelegate , ItemDropTarget , Key , Node } from '@react-types/shared' ;
1515import { Layout , ReusableView , useVirtualizerState , VirtualizerState } from '@react-stately/virtualizer' ;
1616import React , { createContext , JSX , ReactNode , useContext , useMemo } from 'react' ;
1717import { useScrollView , VirtualizerItem } from '@react-aria/virtualizer' ;
@@ -117,14 +117,14 @@ function CollectionBranch({parent, renderDropIndicator}: CollectionBranchProps)
117117 return renderChildren ( parentView , Array . from ( parentView . children ) , renderDropIndicator ) ;
118118}
119119
120- function renderChildren ( parent : View | null , children : View [ ] , renderDropIndicator ?: ( target : ItemDropTarget ) => ReactNode ) {
120+ function renderChildren ( parent : View | null , children : View [ ] , renderDropIndicator ?: ( target : ItemDropTarget , keys ?: Set < Key > , draggedKey ?: Key ) => ReactNode ) {
121121 return children . map ( view => renderWrapper ( parent , view , renderDropIndicator ) ) ;
122122}
123123
124124function renderWrapper (
125125 parent : View | null ,
126126 reusableView : View ,
127- renderDropIndicator ?: ( target : ItemDropTarget ) => ReactNode
127+ renderDropIndicator ?: ( target : ItemDropTarget , keys ?: Set < Key > , draggedKey ?: Key ) => ReactNode
128128) : ReactNode {
129129 let rendered = (
130130 < VirtualizerItem
@@ -141,9 +141,9 @@ function renderWrapper(
141141 if ( node ?. type === 'item' && renderDropIndicator && layout . getDropTargetLayoutInfo ) {
142142 rendered = (
143143 < React . Fragment key = { reusableView . key } >
144- { renderDropIndicatorWrapper ( parent , reusableView , { type : 'item' , key : reusableView . content ! . key , dropPosition : 'before' } , renderDropIndicator ) }
144+ { renderDropIndicatorWrapper ( parent , reusableView , { type : 'item' , key : reusableView . content ! . key , dropPosition : 'before' } , ( target , keys , draggedKey ) => renderDropIndicator ( target , keys , draggedKey ) ) }
145145 { rendered }
146- { renderAfterDropIndicators ( collection , node , target => renderDropIndicatorWrapper ( parent , reusableView , target , renderDropIndicator ) ) }
146+ { renderAfterDropIndicators ( collection , node , ( target , keys , draggedKey ) => renderDropIndicatorWrapper ( parent , reusableView , target , ( innerTarget , innerKeys , innerDraggedKey ) => renderDropIndicator ( innerTarget , innerKeys , innerDraggedKey ) , keys , draggedKey ) ) }
147147 </ React . Fragment >
148148 ) ;
149149 }
@@ -155,9 +155,11 @@ function renderDropIndicatorWrapper(
155155 parent : View | null ,
156156 reusableView : View ,
157157 target : ItemDropTarget ,
158- renderDropIndicator : ( target : ItemDropTarget ) => ReactNode
158+ renderDropIndicator : ( target : ItemDropTarget , keys ?: Set < Key > , draggedKey ?: Key ) => ReactNode ,
159+ keys : Set < Key > = new Set ( ) ,
160+ draggedKey ?: Key
159161) {
160- let indicator = renderDropIndicator ( target ) ;
162+ let indicator = renderDropIndicator ( target , keys , draggedKey ) ;
161163 if ( indicator ) {
162164 let layoutInfo = reusableView . virtualizer . layout . getDropTargetLayoutInfo ! ( target ) ;
163165 indicator = (
0 commit comments