Simple implementation that allows you to reorder items easily using useSortable hook.
- [Optional]
draggingClassNames:string[]- Default:['dragging'] - [Optional]
dragoverClassNames:string[]- Default:['dragover'] - [Optional]
animate:boolean- Default:true - [Optional]
animationDelayFunction:(index: number) => number- Default:() => 0 - [Optional]
animationDurationFunction:(index: number) => number- Default:() => 0.3 - [Optional]
animationTimingFunction:(index: number) => string- Default:() => 'cubic-bezier(0, 1.28, 1, 1)'
yarn add @human-tools/use-sortable
# OR
npm install @human-tools/use-sortableimport { useState } from 'react';
import * as ReactDOM from 'react-dom';
import { useSortable } from '@human-tools/use-sortable';
import './index.css';
const App = (): JSX.Element => {
const [items] = useState<number[]>(
new Array(30).fill(0).map<number>((_, i) => i)
);
const { orderedItems, setItems, setContainerRef, addDraggableNodeRef } = useSortable<number>(
items,
{}
);
return (
<div>
<div className="card-container" ref={setContainerRef}>
{orderedItems.map(item => (
<div className="card" key={item} ref={addDraggableNodeRef}>
{item + 1}
</div>
))}
</div>
</div>
);
};
ReactDOM.render(<App />, document.getElementById('root'));.card-container {
display: flex;
flex-wrap: wrap;
}
.card {
font-size: 56px;
color: #ddd;
background-color: white;
padding: 30px;
box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.2);
margin: 10px;
cursor: grab;
width: 150px;
height: 150px;
display: flex;
align-items: center;
justify-content: center;
}
.card:hover {
background-color: slategrey;
}
.card.dragover {
box-shadow: 1px 1px 15px 0 rgba(0, 128, 128, 1);
}
.card.dragging {
cursor: grabbing;
opacity: 0.2;
}The package uses @pika/pack to build and publish the library. The example directory is a small snowpack react app.
If you want to work on the src of the library while using the example as a scratchpad to see your changes, run:
yarn startin the root directory - This will watch thesrc/and copy the files toexample/src/use-sortable-libdirectoryyarn startin theexampledirectory - This will start the normalsnowpack devserver and watch example files and hmr appropriately.
This setup is mainly because snowpack still doesn't have a good support for yarn/npm link'd packages.
This will happen automatically using Netlify, all you need to do is merge updated files in.
Currently one of the maintainers have to run npx pika publish and follow the prompts. This will probably eventually be automated anytime master branch is updated.
MIT