@@ -39,10 +39,10 @@ import {
3939} from '@react-stately/dnd' ;
4040import { JSX , useMemo } from 'react' ;
4141
42- interface DraggableCollectionStateOpts extends Omit < DraggableCollectionStateOptions , 'getItems' > { }
42+ interface DraggableCollectionStateOpts < T > extends Omit < DraggableCollectionStateOptions < T > , 'getItems' > { }
4343
44- interface DragHooks {
45- useDraggableCollectionState ?: ( props : DraggableCollectionStateOpts ) => DraggableCollectionState ,
44+ interface DragHooks < T = object > {
45+ useDraggableCollectionState ?: ( props : DraggableCollectionStateOpts < T > ) => DraggableCollectionState ,
4646 useDraggableCollection ?: ( props : DraggableCollectionOptions , state : DraggableCollectionState , ref : RefObject < HTMLElement | null > ) => void ,
4747 useDraggableItem ?: ( props : DraggableItemProps , state : DraggableCollectionState ) => DraggableItemResult ,
4848 DragPreview ?: typeof DragPreview
@@ -55,25 +55,25 @@ interface DropHooks {
5555 useDropIndicator ?: ( props : DropIndicatorProps , state : DroppableCollectionState , ref : RefObject < HTMLElement | null > ) => DropIndicatorAria
5656}
5757
58- export interface DragAndDropHooks {
58+ export interface DragAndDropHooks < T = object > {
5959 /** Drag and drop hooks for the collection element. */
60- dragAndDropHooks : DragHooks & DropHooks & { isVirtualDragging ?: ( ) => boolean , renderPreview ?: ( keys : Set < Key > , draggedKey : Key ) => JSX . Element }
60+ dragAndDropHooks : DragHooks < T > & DropHooks & { isVirtualDragging ?: ( ) => boolean , renderPreview ?: ( keys : Set < Key > , draggedKey : Key ) => JSX . Element }
6161}
6262
63- export interface DragAndDropOptions extends Omit < DraggableCollectionProps , 'preview' | 'getItems' > , Omit < DroppableCollectionProps , 'onMove' > {
63+ export interface DragAndDropOptions < T = object > extends Omit < DraggableCollectionProps , 'preview' | 'getItems' > , Omit < DroppableCollectionProps , 'onMove' > {
6464 /**
6565 * A function that returns the items being dragged. If not specified, we assume that the collection is not draggable.
6666 * @default () => []
6767 */
68- getItems ?: ( keys : Set < Key > ) => DragItem [ ] ,
68+ getItems ?: ( keys : Set < Key > , items : T [ ] ) => DragItem [ ] ,
6969 /** Provide a custom drag preview. `draggedKey` represents the key of the item the user actually dragged. */
7070 renderPreview ?: ( keys : Set < Key > , draggedKey : Key ) => JSX . Element
7171}
7272
7373/**
7474 * Provides the hooks required to enable drag and drop behavior for a drag and drop compatible React Spectrum component.
7575 */
76- export function useDragAndDrop ( options : DragAndDropOptions ) : DragAndDropHooks {
76+ export function useDragAndDrop < T = object > ( options : DragAndDropOptions < T > ) : DragAndDropHooks {
7777 let dragAndDropHooks = useMemo ( ( ) => {
7878 let {
7979 onDrop,
@@ -90,7 +90,7 @@ export function useDragAndDrop(options: DragAndDropOptions): DragAndDropHooks {
9090
9191 let hooks = { } as DragHooks & DropHooks & { isVirtualDragging ?: ( ) => boolean , renderPreview ?: ( keys : Set < Key > , draggedKey : Key ) => JSX . Element } ;
9292 if ( isDraggable ) {
93- hooks . useDraggableCollectionState = function useDraggableCollectionStateOverride ( props : DraggableCollectionStateOpts ) {
93+ hooks . useDraggableCollectionState = function useDraggableCollectionStateOverride ( props : DraggableCollectionStateOpts < T > ) {
9494 return useDraggableCollectionState ( { ...props , ...options , getItems : options . getItems ! } ) ;
9595 } ;
9696 hooks . useDraggableCollection = useDraggableCollection ;
0 commit comments