0.1.7 • Published 3 years ago

@upacyxou/react-native-draggable-sectionlist v0.1.7

Weekly downloads
162
License
MIT
Repository
github
Last release
3 years ago

React Native Draggable FlatList

A drag-and-drop-enabled FlatList component for React Native. Fully native interactions powered by Reanimated and React Native Gesture Handler. To use swipeable list items in a DraggableFlatList see React Native Swipeable Item.

Draggable FlatList demo

Install

  1. Follow installation instructions for reanimated and react-native-gesture-handler. RNGH requires you to make changes to MainActivity.java. Be sure to follow all Android instructions!
  2. Install this package using npm or yarn

with npm:

npm install --save react-native-draggable-flatlist

with yarn:

yarn add react-native-draggable-flatlist
  1. import DraggableFlatList from 'react-native-draggable-flatlist'

Api

Props

All props are spread onto underlying FlatList

NameTypeDescription
dataT[]Items to be rendered.
horizontalbooleanOrientation of list.
renderItem(params: { item: T, index: number, drag: () => void, isActive: boolean}) => JSX.ElementCall drag when the row should become active (i.e. in an onLongPress or onPressIn).
renderPlaceholder(params: { item: T, index: number }) => React.ReactNodeComponent to be rendered underneath the hovering component
keyExtractor(item: T, index: number) => stringUnique key for each item
onDragBegin(index: number) => voidCalled when row becomes active.
onRelease(index: number) => voidCalled when active row touch ends.
onDragEnd(params: { data: T[], from: number, to: number }) => voidCalled after animation has completed. Returns updated ordering of data
autoscrollThresholdnumberDistance from edge of container where list begins to autoscroll when dragging.
autoscrollSpeednumberDetermines how fast the list autoscrolls.
onRef(ref: React.RefObject<DraggableFlatList<T>>) => voidReturns underlying Animated FlatList ref.
animationConfigPartial<Animated.SpringConfig>Configure list animations. See reanimated spring config
activationDistancenumberDistance a finger must travel before the gesture handler activates. Useful when using a draggable list within a TabNavigator so that the list does not capture navigator gestures.
layoutInvalidationKeystringChanging this value forces a remeasure of all item layouts. Useful if item size/ordering updates after initial mount.
onScrollOffsetChange(offset: number) => voidCalled with scroll offset. Stand-in for onScroll.
onPlaceholderIndexChange(index: number) => voidCalled when the index of the placeholder changes
dragItemOverflowbooleanIf true, dragged item follows finger beyond list boundary.
dragHitSlopobject: {top: number, left: number, bottom: number, right: number}Enables control over what part of the connected view area can be used to begin recognizing the gesture. Numbers need to be non-positive (only possible to reduce responsive area).
debugbooleanEnables debug logging and animation debugger.

Example

import React, { Component } from "react";
import { View, TouchableOpacity, Text } from "react-native";
import DraggableFlatList from "react-native-draggable-flatlist";

const exampleData = [...Array(20)].map((d, index) => ({
  key: `item-${index}`, // For example only -- don't use index as your key!
  label: index,
  backgroundColor: `rgb(${Math.floor(Math.random() * 255)}, ${index *
    5}, ${132})`
}));

class Example extends Component {
  state = {
    data: exampleData
  };

  renderItem = ({ item, index, drag, isActive }) => {
    return (
      <TouchableOpacity
        style={{
          height: 100,
          backgroundColor: isActive ? "blue" : item.backgroundColor,
          alignItems: "center",
          justifyContent: "center"
        }}
        onLongPress={drag}
      >
        <Text
          style={{
            fontWeight: "bold",
            color: "white",
            fontSize: 32
          }}
        >
          {item.label}
        </Text>
      </TouchableOpacity>
    );
  };

  render() {
    return (
      <View style={{ flex: 1 }}>
        <DraggableFlatList
          data={this.state.data}
          renderItem={this.renderItem}
          keyExtractor={(item, index) => `draggable-item-${item.key}`}
          onDragEnd={({ data }) => this.setState({ data })}
        />
      </View>
    );
  }
}

export default Example;
0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.0

3 years ago

0.1.1

3 years ago

0.0.9999992

3 years ago

0.0.9999991

3 years ago

0.0.999999

3 years ago

0.0.999998

3 years ago

0.0.999997

3 years ago

0.0.999996

3 years ago

0.0.999995

3 years ago

0.0.999994

3 years ago

0.0.999992

3 years ago

0.0.999993

3 years ago

0.0.999991

3 years ago

0.0.99999

3 years ago

0.0.99998

3 years ago

0.0.99997

3 years ago

0.0.99995

3 years ago

0.0.99994

3 years ago

0.0.99996

3 years ago

0.0.99993

3 years ago

0.0.99992

3 years ago

0.0.9999

3 years ago

0.0.9998

3 years ago

0.0.99991

3 years ago

0.0.9996

3 years ago

0.0.9997

3 years ago

0.0.9995

3 years ago

0.0.9992

3 years ago

0.0.9994

3 years ago

0.0.9993

3 years ago

0.0.9991

3 years ago

0.0.999

3 years ago

0.0.998

3 years ago

0.0.997

3 years ago

0.0.995

3 years ago

0.0.994

3 years ago

0.0.993

3 years ago

0.0.992

3 years ago

0.0.99

3 years ago

0.0.991

3 years ago

0.0.97

3 years ago

0.0.96

3 years ago

0.0.95

3 years ago

0.0.94

3 years ago

0.0.93

3 years ago

0.0.92

3 years ago

0.0.91

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago