0.1.2 • Published 5 years ago

react-native-useful-dnd v0.1.2

Weekly downloads
4
License
MIT
Repository
github
Last release
5 years ago

Contents

About

Drag&Drop functionality for React Native. Uses new React Context API.

Demo

dnd

Installation

npm install react-native-useful-dnd

or

yarn add react-native-useful-dnd

Usage

Import

import DragProvider from 'react-native-useful-dnd'

Components

  • DragProvider - provider of drag&drop functionality. Must be higher in the React-tree than Draggable and DropZone components.
  • DragProvider.Draggable - draggable wrapper. Required unique id prop.
  • DragProvider.DropZone - drop zone wrapper. Required unique id prop.

DragProvider props

propdescriptiondefaulttype
childrenChildren nodeundefinedReact.Node
onDragStartStart drag callbackundefinedFunction
onDragMoveMove Draggable callbackundefinedFunction
onDragEnterEnter Draggable to DropZone callbackundefinedFunction
onDragLeaveLeave Draggable to DropZone callbackundefinedFunction
onDragEndEnd of drag callbackundefinedFunction
onDropEnd of drag over DropZone callbackundefinedFunction

DragProvider.Draggable props

propdescriptiondefaulttype
idUnique id of Draggable componentundefined (required)string
childrenDraggable componentundefinedReact.Node/Function

DragProvider.Draggable passing to children props

propdescriptiondefaulttype
activeTrue when component dragfalseboolean
allowDropTrue when Draggable component over DropZonefalseboolean

DragProvider.DropZone props

propdescriptiondefaulttype
idUnique id of DropZone componentundefined (required)string
childrenDropZone componentundefinedReact.Node/Function

DragProvider.Draggable passing to children props

propdescriptiondefaulttype
dropOverTrue when DropZone component under Draggablefalseboolean

Example

import React from 'react'
import { Text, View, StyleSheet, } from 'react-native'
import DragProvider from 'react-native-useful-dnd'

const dragItemStyles = StyleSheet.create({
	view: {
		width: 50,
		height: 50,
		borderRadius: 25,
		backgroundColor: '#FFD517',
		alignItems: 'center',
		justifyContent: 'center',
	},
	drag: {
		borderWidth: 1,
		borderColor: 'red',
	},
	dragOver: {
		borderWidth: 5,
		borderColor: 'olive',
	},
})

const DragItem = ({ style, color, drag, dragOver, ...props }) => (
	<View {...props} style={[ dragItemStyles.view, { backgroundColor: color, }, drag && dragItemStyles.drag, dragOver && dragItemStyles.dragOver, style ]}>
		<Text>DRAG_ME</ Text>
	</View>
)

export default class AboutUs extends React.Component {
	handleDrop = (DropZoneId, draggableId) => console.log('onDrop', DropZoneId, draggableId)

	handleDragStart = (draggableId) => console.log('handleDragStart', draggableId)

	handleDragMove = (draggableId) => console.log('handleDragMove', draggableId)

	handleDragEnter = (draggableId, DropZoneId) => console.log('handleDragEnter', draggableId, DropZoneId)

	handleDragLeave = (draggableId, DropZoneId) => console.log('handleDragLeave', draggableId, DropZoneId)

	handleDrop = (draggableId, DropZoneId) => console.log('handleDrop', draggableId, DropZoneId)

	handleDragEnd = (draggableId) => console.log('handleDragEnd', draggableId)

	render() {
		return (
			<DragProvider
				onDragStart={this.handleDragStart}
				onDragMove={this.handleDragMove}
				onDragEnter={this.handleDragEnter}
				onDragLeave={this.handleDragLeave}
				onDrop={this.handleDrop}
				onDragEnd={this.handleDragEnd}
			>
				<View style={{ height: 150, backgroundColor: '#eaeaea', }}>
					<DragProvider.Draggable
						id="purple"
					>
						{({ dragOver, drag, }) => (
							<DragItem color="purple" drag={drag} dragOver={dragOver} />
						)}
					</DragProvider.Draggable>

					<DragProvider.Draggable id="orange">
						<DragItem color="orange" />
					</DragProvider.Draggable>
				</View>

				<DragProvider.DropZone id="myDropZone">
					{({ dropOver, }) => (
						<View
							style={[
								{ height: 100, justifyContent: 'center', alignItems: 'center', backgroundColor: 'yellow', },
								dropOver && { backgroundColor: 'orange', }
							]}
						>
							<Text>Dropzone</Text>
						</View>
					)}
				</DragProvider.DropZone>

			</DragProvider>
		)
	}
}

License

MIT

Changelog

  • 0.1.2 - fix call onDragMove after onDragEnd.
  • 0.1.1 - fix bug, add demo gif, add peerDependencies.
  • 0.1.0 - package created.