React-dnd: рдирд┐рдпрдорд┐рдд рдбреНрд░реИрдЧ рдкрд░ рдЦрд░рд╛рдм рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ, рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рдкреНрд░реАрд╡реНрдпреВ рдкрд░ рдЪреЙрдкреА рдореЛрд╢рди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдордИ 2016  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: react-dnd/react-dnd

рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдбреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХрд╛ рд╕рд╛рдордЧреНрд░реА рдмреНрд▓реЙрдХ рд╣реИ рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИрдВ рдЬреЛ react-codemirror ред рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдбреНрд░реИрдЧ рдкреНрд░реАрд╡реНрдпреВ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд╕рдлреЗрдж рдкреГрд╖реНрдарднреВрдорд┐ рд╢рд╛рдорд┐рд▓ рдереА рдЬреЛ рдХреЛрдбрдорд┐рд░рд░ рдХреЗ рдХреЛрдб рдПрдбрд┐рдЯрд░ рдХреЗ рднреАрддрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рдереАред рдпрд╣ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рдерд╛, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреАрдПрдирдбреА рдХрд┐рд╕реА рднреА рдирдП рд╡рд░реНрдЧ рдпрд╛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЛрдо рдиреЛрдб рдХреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ рдЕрдЧрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИ)

рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореИрдВрдиреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд▓рдЧ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп рдбреНрд░реИрдЧрд┐рдВрдЧ рдХреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдбрд╝рдХрд╛ рд╣реБрдЖ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рдХрд╛рдлреА рдЪрд┐рдХрдирд╛ рдерд╛ред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрднреА-рдЕрднреА рдмрддрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

https://drive.google.com/file/d/0Bzbw-6Q_sVTySUNiNmJGcFVIQ00/view?usp=sharing

рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдХреЛрдб рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣рд╛рдБ рдореЗрд░реА рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рд╣реИ

import React, { Component, PropTypes } from 'react'
import { DragLayer } from 'react-dnd'

function collect(monitor) {
  return {
    item: monitor.getItem(),
    currentOffset: monitor.getSourceClientOffset(),
    isDragging: monitor.isDragging()
  }
}

const layerStyles = {
  position: 'fixed',
  pointerEvents: 'none',
  zIndex: 100,
  left: 0,
  top: 0,
  width: '20%',
  height: '100%'
}

function getItemStyles(props) {
  var currentOffset = props.currentOffset
  if (!currentOffset) {
    return {
      display: 'none'
    }
  }

  var x = currentOffset.x
  var y = currentOffset.y
  var transform = 'translate(' + x + 'px, ' + y + 'px)'
  return {
    transform: transform,
    WebkitTransform: transform
  }
}

class CardDragLayer extends Component {
  static propTypes = {
    item: PropTypes.object
  }

  render() {
    const { item, isDragging } = this.props

    if (!isDragging)
      return false

    return (
      <div style={layerStyles}>
        <div className='drag-preview' style={getItemStyles(this.props)}>
          <i className='fa fa-hand-scissors-o fa-6'></i>
        </div>
      </div>
    )
  }
}

export default DragLayer(collect)(CardDragLayer)

рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рдФрд░ рдбреНрд░реЙрдк рдЯрд╛рд░рдЧреЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ

export const cardSource = {
  beginDrag(props) {
    return {
      index: props.index
    }
  }
}

export const cardTarget = {
  hover(props, monitor, component) {
    const dragIndex = monitor.getItem().index
    const hoverIndex = props.index

    if (dragIndex === hoverIndex)
      return

    props.swap(dragIndex, hoverIndex)
    monitor.getItem().index = hoverIndex;
  }
}

export function collectSource(connect, monitor) {
  return {
    connectDragSource: connect.dragSource(),
    connectDragPreview: connect.dragPreview(),
    isDragging: monitor.isDragging()
  }
}

export function collectTarget(connect) {
  return {
    connectDropTarget: connect.dropTarget()
  }
}

рдФрд░ рдпрд╣рд╛рдБ Card рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

import React, { PropTypes, Component } from 'react'
import { Snippet, Markdown } from './Show'
import { DragSource, DropTarget } from 'react-dnd'
import { getEmptyImage } from 'react-dnd-html5-backend'
import { cardSource, cardTarget, collectSource, collectTarget } from './dragDropConfig'
import classnames from 'classnames'

class SnippetCard extends Component {
  options() {
    return {
      readOnly: true,
      scrollbarStyle: 'null',
      viewportMargin: Infinity
    }
  }

  render() {
    const { language, text } = this.props
    return(
      <Snippet
        options={this.options()}
        language={language.value}
        text={text.value} />
    )
  }
}

class MarkdownCard extends Component {
  render() {
    const { text } = this.props
    return (
      <div className='markdown-card'>
        <div className='card-content'>
          <Markdown text={text.value} />
        </div>
      </div>
    )
  }
}

const components = {
  snippet: SnippetCard,
  markdown: MarkdownCard
}

class Card extends Component {
  static propTypes = {
    connectDragSource: PropTypes.func.isRequired,
    connectDropTarget: PropTypes.func.isRequired,
    index: PropTypes.number.isRequired,
    block: PropTypes.object.isRequired,
    swap: PropTypes.func.isRequired
  }

  componentDidMount() {
    const { connectDragPreview } = this.props
    connectDragPreview(getEmptyImage(), {
      captureDraggingState: true
    })
  }

  render() {
    const { isDragging, block, connectDragSource, connectDropTarget } = this.props
    const Component = components[block.format.value]
    const classes = classnames('card', {
      dragging: isDragging
    })

    return connectDragSource(connectDropTarget((
      <div className={classes}>
        <div className='card-header'>
          <div>
            <label>
              {block.format.value}
            </label>
          </div>
          <Component {...block} />
        </div>
      </div>
    )))
  }
}

const Source = DragSource('card', cardSource, collectSource)(Card)
export default DropTarget('card', cardTarget, collectTarget)(Source)

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрдб рджреЗрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╛ рддреЛ рдХ) рдореИрдВ рд╕рдлреЗрдж рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдмреА) рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЛ рдЕрдзрд┐рдХ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА!

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рд░реЗрдбрдХреНрд╕ рдХреЗ рд╕рд╛рде рдРрдкреНрд╕ рдмрдирд╛рдиреЗ рдкрд░ рдПрдХ рд╕реНрдХреНрд░реАрдирдХрд╛рд╕реНрдЯ рдХреЛрд░реНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдкрд░ рд╢рд╛рдпрдж 2-3 рд▓рдШреБ рд╡реАрдбрд┐рдпреЛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рд╛рдордЧреНрд░реА рдмреНрд▓реЙрдХ рдХрд╛рд░реНрдб рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд░рд┐рд╣рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ!

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

рд╣рд╛рдБ, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдШрдЯрдХ рдХреЛ рд╣рдЯрд╛рдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╛рдпрд╛, рддреЛ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рддрдХ рдбреНрд░рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдордВрджреА рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рд╕рдмрд╕реЗ рдмрд╛рд╣рд░реА рддрддреНрд╡ рдкрд░ рдЬреЛ style рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ style={{transform: translate3d(0, 0, 0)}}

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

рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧрд▓реЗрдпрд░ рдХреЗ рд╕рд╛рде рднреА рддрдбрд╝рдХрд╛ рджреЗрдЦрд╛ рд╣реИ (рд╕рд┐рд░реНрдл рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ): http://gaearon.github.io/react-dnd/examples-drag-round-custom-drag-layer.html

рдХреНрд░реЛрдо рдореЗрдВ рдпрд╣ рд╕рдм рдареАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдиреАрдореЗрд╢рди рддрдбрд╝рдХрд╛ рд╣реБрдЖ рд╣реИред (рд▓рд┐рдирдХреНрд╕ рдЯрдХрд╕рд╛рд▓ рдкрд░, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 46.0.1)

рд╡реИрд╕реЗ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп!

@sslotsky рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛?

рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореИрдВ рдЗрд╕рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдХреБрдЫ рднреА рдЪрддреБрд░ рд╣реИ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдЬреЛ рд╣рдо рддрдбрд╝рдк рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдкреНрд░рджрд░реНрд╢рди рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рдирд╣реАрдВ, рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИред рдЬрдм рдореИрдВ рдЕрдЧрд▓рд╛ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдКрдВ рддреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!

рд╣рдо рдЗрд╕реЗ рднреА рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ

@kesne рдмрд╕ рдЗрд╕реЗ рдЬреАрд╡рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ рддреЛ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ :)

рд╣рд╛рдБ, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рднреА рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдореИрдВ рдбреНрд░реИрдЧрдЧреЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕реБрдкрд░ рд╕рд░рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХред

рдореИрдВ рдЗрд╕ рдкрд░ рднреА рд▓рдЧрд╛рдКрдВрдЧрд╛ред рд╣рдо рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕рдореЗрдВ рднреА рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ .. рд╕рд╛рдзрд╛рд░рдг рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдкреНрд╕ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдпрд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реЛред рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдпрд╛ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛?

@ рдПрд▓реЗрдХреНрд╕реА-рдмреЗрд▓реМрд╕ рд╣рдордиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЦрддреНрдо рдХрд░ рджрд┐рдпрд╛ рдФрд░ https://github.com/bevacqua/react-dragula рдХреЗ рд╕рд╛рде рдЧрдП

рдпрд╣рд╛рдВ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рдЖрдЧреЗ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ рдХрд┐ рдбреЛрдо рдиреЛрдб рдЦреАрдВрдЪрдиреЗ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред

рдореИрдВ рдЕрдкрдиреА getItemStyles(props) рд╡рд┐рдзрд┐ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ () рдХреЛ рд╣рдЯрд╛рдХрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдпрд╣ рдУрдкреА рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреЛрдИ рдФрд░ рдпрд╣рд╛рдВ рдареЛрдХрд░ рдЦрд╛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдФрд░ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЙрджрд╛рд╣рд░рдг рднреА рддрдбрд╝рдХрд╛ рд╣реБрдЖ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рд╕рд╛рдЗрдЯ рдмрдирд╛рддрд╛ рд╣реВрдВ ( npm run build-site рдЪрд▓рд╛рдХрд░) рд╕рд╛рдЗрдЯ рдирд┐рдпрдорд┐рдд рдорд╛рд░реНрдХрдЕрдк (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмрд┐рдирд╛) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЕрдм рдбреНрд░реИрдЧ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЙрджрд╛рд╣рд░рдг рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рддреЛ рдореЗрд░реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ ReactDOM.renderToString( ) рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ рд╣реИ... :(

592 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдирд╕реАрдм рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдХ рдХрд╛рдВрдЯрд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╣реВрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗред

@gaearon рд╣рдо рддреБрдорд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛рд░! рд╣рдореЗрдВ рдлрд╛рдВрд╕реА рдкрд░ рдордд рдЫреЛрдбрд╝реЛ! рд╣рдореЗрдВ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ :)

рдореБрдЭреЗ рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдкрд░ рдЪреЙрдкреА рдПрдиреАрдореЗрд╢рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрддреНрдпрдВрдд рдЬрдЯрд┐рд▓ DOM рдЯреНрд░реА рдХреЗ рдХрд╛рд░рдг рдерд╛ред

рдореИрдВ рдРрд╕реЗ рдРрдк рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рд░рдгреАрдмрджреНрдз рдбреЗрдЯрд╛ рдХреА рд╣рдЬрд╛рд░реЛрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрд▓ 4 рдбреАрдУрдПрдо рддрддреНрд╡реЛрдВ рдХреА рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рддрд╛ рд╣реИред рдЬрдм рддрд╛рд▓рд┐рдХрд╛ рдЦрд╛рд▓реА рдереА, рддреЛ рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реА рдереА, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝рддреА рдЧрдИ, рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдзреАрдорд╛ рд╣реЛрддрд╛ рдЧрдпрд╛ред (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдбреНрд░реИрдЧ рд╕реНрд░реЛрддреЛрдВ рдпрд╛ рдбреНрд░реЙрдк рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ)ред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдмрджрд▓рд╛, рдЬрдмрдХрд┐ рдХреНрд░реЛрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ рдФрд░ рдбреАрдУрдПрдо рдкреЗрдбрд╝ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝ рдЧрдИред

рдореИрдВ рдХреНрд░реЛрдо рдореЗрдВ рдЯреЗрдмрд▓ рдХреЛ рдЙрд╕рдХреА рдЕрдкрдиреА рдХрдВрдкреЛрдЬрд┐рдЯрд┐рдВрдЧ рд▓реЗрдпрд░ рдореЗрдВ рдзрдХреЗрд▓ рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдЗрд╕реЗ рдПрдХ рдЦрд╛рд▓реА 3D рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдХреЗ: transform: translate3d(0, 0, 0)

рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдбреЗрдореЛ рдкреЗрдЬ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рдереАред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреНрдпрд╛ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдбреАрдУрдПрдо рдкреЗрдбрд╝ рдХреЗ рдЬрдЯрд┐рд▓ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдкреЛрдЬрд┐рдЯрд┐рдВрдЧ рдкрд░рддреЛрдВ рдореЗрдВ рджрдмрд╛рдХрд░, рдЖрдк рдЕрдкрдиреА рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

@mgerring рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛? рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдРрдк рдкрд░ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рд╣рд╛рдБ, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдШрдЯрдХ рдХреЛ рд╣рдЯрд╛рдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╛рдпрд╛, рддреЛ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рддрдХ рдбреНрд░рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдордВрджреА рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рд╕рдмрд╕реЗ рдмрд╛рд╣рд░реА рддрддреНрд╡ рдкрд░ рдЬреЛ style рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ style={{transform: translate3d(0, 0, 0)}}

рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ #592 рдкрд░ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

@mgerring рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

@ рдПрд▓реЗрдХреНрд╕реА-рдмреЗрд▓реМрд╕ рд╣рдордиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЦрддреНрдо рдХрд░ рджрд┐рдпрд╛ рдФрд░ https://github.com/bevacqua/react-dragula рдХреЗ рд╕рд╛рде рдЧрдП
+1

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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