StackItem.tsx 815 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import React from 'react'
  2. import classnames from 'classnames'
  3. import { useDrop } from 'react-dnd'
  4. import { StackItemType } from './constants'
  5. import Styles from './Stack.less'
  6. interface IStackItemProps {
  7. onDrop: (item: any) => void
  8. className: string
  9. }
  10. const StackItem: React.FC<IStackItemProps> = (props) => {
  11. const { className, onDrop, children } = props
  12. const [{ isOver, canDrop }, drop] = useDrop({
  13. accept: StackItemType,
  14. drop: onDrop,
  15. collect: (monitor) => ({
  16. isOver: monitor.isOver(),
  17. canDrop: monitor.canDrop()
  18. })
  19. })
  20. const stackItemCls = classnames({
  21. [className]: true,
  22. [Styles.drop]: canDrop && !isOver,
  23. [Styles.active]: canDrop && isOver
  24. })
  25. return (
  26. <div ref={drop} className={stackItemCls}>{children}</div>
  27. )
  28. }
  29. export default StackItem