@@ -39,10 +39,10 @@ import {
39
39
} from '@react-stately/dnd' ;
40
40
import { JSX , useMemo } from 'react' ;
41
41
42
- interface DraggableCollectionStateOpts extends Omit < DraggableCollectionStateOptions , 'getItems' > { }
42
+ interface DraggableCollectionStateOpts < T > extends Omit < DraggableCollectionStateOptions < T > , 'getItems' > { }
43
43
44
- interface DragHooks {
45
- useDraggableCollectionState ?: ( props : DraggableCollectionStateOpts ) => DraggableCollectionState ,
44
+ interface DragHooks < T = object > {
45
+ useDraggableCollectionState ?: ( props : DraggableCollectionStateOpts < T > ) => DraggableCollectionState ,
46
46
useDraggableCollection ?: ( props : DraggableCollectionOptions , state : DraggableCollectionState , ref : RefObject < HTMLElement | null > ) => void ,
47
47
useDraggableItem ?: ( props : DraggableItemProps , state : DraggableCollectionState ) => DraggableItemResult ,
48
48
DragPreview ?: typeof DragPreview
@@ -55,25 +55,25 @@ interface DropHooks {
55
55
useDropIndicator ?: ( props : DropIndicatorProps , state : DroppableCollectionState , ref : RefObject < HTMLElement | null > ) => DropIndicatorAria
56
56
}
57
57
58
- export interface DragAndDropHooks {
58
+ export interface DragAndDropHooks < T = object > {
59
59
/** 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 }
61
61
}
62
62
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' > {
64
64
/**
65
65
* A function that returns the items being dragged. If not specified, we assume that the collection is not draggable.
66
66
* @default () => []
67
67
*/
68
- getItems ?: ( keys : Set < Key > ) => DragItem [ ] ,
68
+ getItems ?: ( keys : Set < Key > , items : T [ ] ) => DragItem [ ] ,
69
69
/** Provide a custom drag preview. `draggedKey` represents the key of the item the user actually dragged. */
70
70
renderPreview ?: ( keys : Set < Key > , draggedKey : Key ) => JSX . Element
71
71
}
72
72
73
73
/**
74
74
* Provides the hooks required to enable drag and drop behavior for a drag and drop compatible React Spectrum component.
75
75
*/
76
- export function useDragAndDrop ( options : DragAndDropOptions ) : DragAndDropHooks {
76
+ export function useDragAndDrop < T = object > ( options : DragAndDropOptions < T > ) : DragAndDropHooks {
77
77
let dragAndDropHooks = useMemo ( ( ) => {
78
78
let {
79
79
onDrop,
@@ -90,7 +90,7 @@ export function useDragAndDrop(options: DragAndDropOptions): DragAndDropHooks {
90
90
91
91
let hooks = { } as DragHooks & DropHooks & { isVirtualDragging ?: ( ) => boolean , renderPreview ?: ( keys : Set < Key > , draggedKey : Key ) => JSX . Element } ;
92
92
if ( isDraggable ) {
93
- hooks . useDraggableCollectionState = function useDraggableCollectionStateOverride ( props : DraggableCollectionStateOpts ) {
93
+ hooks . useDraggableCollectionState = function useDraggableCollectionStateOverride ( props : DraggableCollectionStateOpts < T > ) {
94
94
return useDraggableCollectionState ( { ...props , ...options , getItems : options . getItems ! } ) ;
95
95
} ;
96
96
hooks . useDraggableCollection = useDraggableCollection ;
0 commit comments