1.0.29 • Published 3 months ago

use-reorder v1.0.29

Weekly downloads
-
License
ISC
Repository
github
Last release
3 months ago

Use Reorder

Simple hooks-based list reorder running on react-beautiful-dnd

Your usual reordererArbitrary number of lists
Reorderer in actionMulti-reorderer in action
Optional hint animationsFor both single and multiple lists
Reorder animationMulti-reorder animation

Usage

Single list

import { useReorder, Item } from 'use-reorder'

function MyComponent() {
    const items: Item[] = [
        { id: 'id1', elem: <div>...</div> },
        // ...
        { id: 'idn', elem: <div>...</div> },
    ]

    const { order, ordered, reorderer } = useReorder(items)
    // ordered = order.map(i => items[i]); provided for convenience

    return (
        <div>
            ...
            {reorderer}
        </div>
    )
}

Multiple lists

As opposed to the single list, now you're in control of <DragDropContext>. Make sure it wraps all lists and that you pass it the returned onDragEnd. As long as that holds, you can place the lists wherever you please.

import { DragDropContext } from 'react-beautiful-dnd'
import { useMultiReorder } from 'use-reorder'

const items = [
  { id: 'item1', item: (...) => <div>...</div> },
  { id: 'item2', item: (...) => <div>...</div> },
  ...
]
const listIds = [{id: 'list1'}, {id: 'list2'}, ...]
const { onDragEnd, lists, order } = useMultiReorder(items, listIds)

return (
  <DragDropContext onDragEnd={onDragEnd}>
     ...
     {lists.map(list => (
       <div>{list}</div>
     ))}
  </DragDropContext>
)

Hint animation

Optionally, you can install framer-animations to add this animations (useful as a simple guide for users)

Single listMultiple lists
Reorder animationMulti-reorder animation
npm i framer-animations
yarn add framer-animations

Single: useAnimatedReorder

Exactly the same as useReorder but returns a run function to trigger the animation

import { useAnimatedReorder } from 'use-reorder/dist/animated'

const { reorderer, run } = useAnimatedReorder(items)

Multi (useMultiAnimation + useMultiReorder)

import { useMultiReorder, MultiItem } from 'use-reorder'
import { useMultiAnimation } from 'use-reorder/dist/animated'

const { animation, run, sensor } = useMultiAnimation('animated-item')

const items = [
 { id: 'some-item', elem: () => <div>...</div> },
 { id: 'animated-item', elem: () => <div style={{position: 'relative'}}>...{animation}</div> } // inject the animation to the animated item
]

const { onDragEnd, .., } = useMultiReorder(items, ...)

return (
 <DragDropContext onDragEnd={onDragEnd} sensors={[sensor]}>
 ...
1.0.19

3 months ago

1.0.18

3 months ago

1.0.17

3 months ago

1.0.16

3 months ago

1.0.22

3 months ago

1.0.21

3 months ago

1.0.20

3 months ago

1.0.26

3 months ago

1.0.25

3 months ago

1.0.24

3 months ago

1.0.23

3 months ago

1.0.29

3 months ago

1.0.28

3 months ago

1.0.27

3 months ago

1.0.11

3 months ago

1.0.15

3 months ago

1.0.14

3 months ago

1.0.13

3 months ago

1.0.12

3 months ago

1.0.9

3 months ago

1.0.8

3 months ago

1.0.10

3 months ago

1.0.7

4 months ago

1.0.6

4 months ago

1.0.5

4 months ago

1.0.4

4 months ago

1.0.3

4 months ago

1.0.2

4 months ago

1.0.1

4 months ago

1.0.0

4 months ago