React-dnd: рд╕рдорд╛рди рдШрдЯрдХреЛрдВ рдкрд░ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдФрд░ рдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд▓реЗрдХрд┐рди рдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧ рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: react-dnd/react-dnd

рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрддрд╛ рдлрд╝реЛрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ DropTarget рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред

рдореИрдВ 'рд╢реНрд░реЗрдгреА рдХрд╛рд░реНрдб' рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдбреНрд░реЙрдк рдИрд╡реЗрдВрдЯ рд╕реНрд╡рдпрдВ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдореИрдВ рдпрд╣рд╛рдБ рдХреЛрдИ рдЖрдХрд░реНрд╖рдХ рдкреЗрдВрдЪ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБ?

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧреЗрдЯ рд╕реНрдкреЗрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рдореИрдВ рдХреБрдЫ рднреА рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдкрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

import React, { Component } from 'react'
import { DropTarget, DragSource } from 'react-dnd'
import _ from 'lodash'

export const ItemTypes = {
    CATEGORY: 'category-item'
}

class CategoryTreeFork extends Component {

    componentWillReceiveProps = (nextProps) => {
        console.log("Next cat props", nextProps)
    }

    render(){
        var { thisCat, childCat, level, dropEvent } = this.props
        const { connectDragSource, connectDropTarget, isDragging, isOver } = this.props

        return connectDragSource(
            <div className="category-tree-fork">
                <div className={`category-list-item level-${level}`}
                    style={{
                        opacity: isDragging ? 0.5 : 1,
                        backgroundColor: isOver ? "red" : "silver"
                    }}>
                    {thisCat.name}
                </div>
            </div>
        )   
    }   
}

/* get dragged */
const sourceSpec = { 
    beginDrag(props){
        return { category_id: props.thisCat.category_id }
    }   
}

const sourceCollect  = (connect, monitor) => {
    return {
        connectDragSource: connect.dragSource(),
        isDragging: monitor.isDragging()
    }
}


/* get dragged onto */
const targetSpec  = {
    drop(props, monitor, component) {
        const item = monitor.getItem()
        console.log("me or my friend?", item)
    },
    hover(props, monitor, component){
        console.log("yo what you hoverin there for homie?")
    }
}

const targetCollect = (connect, monitor) => {
    return {
        connectDropTarget: connect.dropTarget(),
        isOver: monitor.isOver()
    }
}


export default _.flow([
    DragSource(ItemTypes.CATEGORY, sourceSpec, sourceCollect),
    DropTarget(ItemTypes.CATEGORY, targetSpec, targetCollect)
])(CategoryTreeFork)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЦреЛрдЬ-рдЗрдВрдЬрди рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, _.flow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рдШрдЯрдХ рдкрд░ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдФрд░ рдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдЖрдк рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

export default
    DragSource(typeA, specA, collectA)(
        DropTarget(typeB, specB, collectB)(
            Component));

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдбреАрдПрдХреНрд╕ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдореИрдВ рд░реЗрдВрдбрд░ рдкрд░ ConnectDropTarget рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдлрд┐рдХреНрд╕ рд╣реИ:

 return connectDropTarget(connectDragSource(
            <div className="category-tree-fork">
                <div className={`category-list-item level-${level}`}
                    style={{
                        opacity: isDragging ? 0.5 : 1,
                        backgroundColor: isOver ? "red" : "silver"
                    }}>
                    {thisCat.name}
                </div>
            </div>

рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрднреА рд╣рд▓ рдХрд┐рдпрд╛ред "рд╕рд░рд▓", рдХреНрд░рдордмрджреНрдз рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ рдбрдмрд▓ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди connectDropTarget рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛

рдЦреЛрдЬ-рдЗрдВрдЬрди рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, _.flow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рдШрдЯрдХ рдкрд░ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдФрд░ рдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдЖрдк рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

export default
    DragSource(typeA, specA, collectA)(
        DropTarget(typeB, specB, collectB)(
            Component));
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

antoineBernard picture antoineBernard  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

FutureProg picture FutureProg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rubayethossain picture rubayethossain  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dreamcog picture dreamcog  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mx2323 picture mx2323  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ