import { ComputedQuery, FiltersMap, ToastConfig } from '@wix/bex-core'; import React, { JSXElementConstructor, ReactElement, ReactNode, Ref, } from 'react'; import { CollectionDragAndDropParentState } from './CollectionDragAndDropState'; export interface IndexedItem { id: string; item: T; index: number; } export interface CollectionDragEndEvent { from: IndexedItem; after: IndexedItem | null; over: IndexedItem; filters: ComputedQuery['filters']; } export type DragAndDropSubmit = ( event: CollectionDragEndEvent, ) => Promise; export type DragAndDropCancelResult = | Omit | boolean | null | undefined | void; export type DragAndDropCancel = ( event: CollectionDragEndEvent, ) => DragAndDropCancelResult | Promise; export type DragAndDropBulkSubmit = ( events: CollectionDragEndEvent[], snapshot: T[][], ) => Promise; // Context export interface SortableContextProps { state: CollectionDragAndDropParentState; children?: ReactNode; onSubmit?: DragAndDropSubmit; onCancel?: DragAndDropCancel; } // Draggable export interface GridCardItemProps { index: number; rowIndex?: number; columnIndex?: number; droppable?: boolean; draggable?: boolean; dragging?: boolean; dragHandleProps?: React.HTMLAttributes & { domRef?: Ref; }; domRef?: (node: HTMLDivElement | null) => void; } type GridCardItem = React.ReactElement< GridCardItemProps, JSXElementConstructor >; export interface DraggableCardProps { state: CollectionDragAndDropParentState; index: number; id: string; isOverlay?: boolean; dndDisabled?: boolean; children: GridCardItem; } // Overlay export interface DraggableCardOverlayProps { state: CollectionDragAndDropParentState; renderItem: (index: number) => ReactElement | null; } export interface DragAndDrop { SortableContext: ( props: SortableContextProps, ) => JSX.Element; DraggableCard: ( props: DraggableCardProps, ) => JSX.Element; DraggableCardOverlay: ( props: DraggableCardOverlayProps, ) => JSX.Element; }