import * as React from "react"; import { storiesOf } from "@storybook/react"; import { GridContext, GridDropZone, GridContextProvider, swap, move } from "../src"; import { GridItem } from "../src/GridItem"; interface AppState { [key: string]: Array<{ name: string; id: number; }>; } function DragBetweenExample({ single }: any) { const [mounted, setMounted] = React.useState(false); const [items, setItems] = React.useState({ left: [ { id: 1, name: "ben" }, { id: 2, name: "joe" }, { id: 3, name: "jason" }, { id: 4, name: "chris" }, { id: 5, name: "heather" }, { id: 6, name: "Richard" } ], right: [ { id: 7, name: "george" }, { id: 8, name: "rupert" }, { id: 9, name: "alice" }, { id: 10, name: "katherine" }, { id: 11, name: "pam" }, { id: 12, name: "katie" } ], dock: [{ id: 13, name: "Whatever" }] }); React.useEffect(() => { setTimeout(() => { setMounted(true); }, 500); }, []); function onChange( sourceId: any, sourceIndex: number, targetIndex: number, targetId?: string ) { if (targetId) { const result = move( items[sourceId], items[targetId], sourceIndex, targetIndex ); return setItems({ ...items, [sourceId]: result[0], [targetId]: result[1] }); } const result = swap(items[sourceId], sourceIndex, targetIndex); return setItems({ ...items, [sourceId]: result }); } return (
{items.left.map(item => (
{item.name[0].toUpperCase()}
))}
{!single && ( {items.right.map(item => ( {(Component: any, props: any) => (
{item.name[0].toUpperCase()}
)}
))}
)}
{items.dock.map(item => (
{item.name[0].toUpperCase()}
))}
); } storiesOf("Hello", module) .add("Drag between", () => ) .add("single", () => { return ; }) .add("supports parents transforming", () => (
)) .add("readme example", () => ); function TransformExample() { const [transform, setTransform] = React.useState(false); React.useEffect(() => { setTimeout(() => { setTransform(true); }, 2000); }, []); return (
); } function ReadmeExample() { const [items, setItems] = React.useState([1, 2, 3, 4]); // supply your own state // target id will only be set if dragging from one dropzone to another. function onChange( sourceId: any, sourceIndex: any, targetIndex: any, targetId: any ) { const nextState = swap(items, sourceIndex, targetIndex); setItems(nextState); } return ( {items.map((item: any) => (
{item}
))}
); }