All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lucuma.react.beautifuldnd.DragDropContext.scala Maven / Gradle / Ivy

// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA)
// For license information see LICENSE or https://opensource.org/licenses/BSD-3-Clause

package lucuma.react.beautifuldnd

import japgolly.scalajs.react.*
import japgolly.scalajs.react.vdom.VdomNode

import scala.scalajs.js
import scala.scalajs.js.annotation.JSImport

// https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/api/drag-drop-context.md
// https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/responders.md
object DragDropContext {
  @js.native
  @JSImport("react-beautiful-dnd", "DragDropContext")
  object RawComponent extends js.Object

  type OnDragEndResponder         = js.Function2[DropResult, ResponderProvided, Unit]
  type OnBeforeCaptureResponder   = js.Function1[BeforeCapture, Unit]
  type OnBeforeDragStartResponder = js.Function1[DragStart, Unit]
  type OnDragStartResponder       = js.Function2[DragStart, ResponderProvided, Unit]
  type OnDragUpdateResponder      = js.Function2[DragUpdate, ResponderProvided, Unit]

  @js.native
  trait Props extends js.Object {
    var onDragEnd: OnDragEndResponder
    var onBeforeCapture: js.UndefOr[OnBeforeCaptureResponder]
    var onBeforeDragStart: js.UndefOr[OnBeforeDragStartResponder]
    var onDragStart: js.UndefOr[OnDragStartResponder]
    var onDragUpdate: js.UndefOr[OnDragUpdateResponder]
    var liftInstruction: js.UndefOr[String]
    var nonce: js.UndefOr[String]
    var sensors: js.Array[Sensor]
    var enableDefaultSensors: js.UndefOr[Boolean]
  }
  object Props {
    def apply(
      onDragEnd:            (DropResult, ResponderProvided) => Callback,
      onBeforeCapture:      js.UndefOr[BeforeCapture => Callback] = js.undefined,
      onBeforeDragStart:    js.UndefOr[DragStart => Callback] = js.undefined,
      onDragStart:          js.UndefOr[(DragStart, ResponderProvided) => Callback] = js.undefined,
      onDragUpdate:         js.UndefOr[(DragUpdate, ResponderProvided) => Callback] = js.undefined,
      liftInstruction:      js.UndefOr[String] = js.undefined,
      nonce:                js.UndefOr[String] = js.undefined,
      sensors:              js.Array[Sensor] = js.Array(),
      enableDefaultSensors: js.UndefOr[Boolean] = js.undefined
    ): Props = {
      val p = (new js.Object).asInstanceOf[Props]
      p.onDragEnd = (dr, rp) => onDragEnd(dr, rp).runNow()
      onBeforeCapture.foreach(event =>
        p.onBeforeCapture = (bc => event(bc).runNow()): OnBeforeCaptureResponder
      )
      onBeforeDragStart.foreach(event =>
        p.onBeforeDragStart = (ds => event(ds).runNow()): OnBeforeDragStartResponder
      )
      onDragStart.foreach(event =>
        p.onDragStart = ((ds, rp) => event(ds, rp).runNow()): OnDragStartResponder
      )
      onDragUpdate.foreach(event =>
        p.onDragUpdate = ((du, rp) => event(du, rp).runNow()): OnDragUpdateResponder
      )
      p.liftInstruction = liftInstruction
      p.nonce = nonce
      p.sensors = sensors
      p.enableDefaultSensors = enableDefaultSensors
      p
    }
  }

  val component = JsComponent[Props, Children.Varargs, Null](RawComponent)

  def apply(
    onDragEnd:            (DropResult, ResponderProvided) => Callback,
    onBeforeCapture:      js.UndefOr[BeforeCapture => Callback] = js.undefined,
    onBeforeDragStart:    js.UndefOr[DragStart => Callback] = js.undefined,
    onDragStart:          js.UndefOr[(DragStart, ResponderProvided) => Callback] = js.undefined,
    onDragUpdate:         js.UndefOr[(DragUpdate, ResponderProvided) => Callback] = js.undefined,
    liftInstruction:      js.UndefOr[String] = js.undefined,
    nonce:                js.UndefOr[String] = js.undefined,
    sensors:              js.Array[Sensor] = js.Array(),
    enableDefaultSensors: js.UndefOr[Boolean] = js.undefined
  )(children: VdomNode*) =
    component(
      Props(
        onDragEnd,
        onBeforeCapture,
        onBeforeDragStart,
        onDragStart,
        onDragUpdate,
        liftInstruction,
        nonce,
        sensors,
        enableDefaultSensors
      )
    )(children*)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy