| import { useDragHelpers } from '~/hooks'; | |
| import DragDropOverlay from '~/components/Chat/Input/Files/DragDropOverlay'; | |
| import DragDropModal from '~/components/Chat/Input/Files/DragDropModal'; | |
| import { DragDropProvider } from '~/Providers'; | |
| import { cn } from '~/utils'; | |
| interface DragDropWrapperProps { | |
| children: React.ReactNode; | |
| className?: string; | |
| } | |
| export default function DragDropWrapper({ children, className }: DragDropWrapperProps) { | |
| const { isOver, canDrop, drop, showModal, setShowModal, draggedFiles, handleOptionSelect } = | |
| useDragHelpers(); | |
| const isActive = canDrop && isOver; | |
| return ( | |
| <div ref={drop} className={cn('relative flex h-full w-full', className)}> | |
| {children} | |
| {/** Always render overlay to avoid mount/unmount overhead */} | |
| <DragDropOverlay isActive={isActive} /> | |
| <DragDropProvider> | |
| <DragDropModal | |
| files={draggedFiles} | |
| isVisible={showModal} | |
| setShowModal={setShowModal} | |
| onOptionSelect={handleOptionSelect} | |
| /> | |
| </DragDropProvider> | |
| </div> | |
| ); | |
| } | |