Commit 132cf693 by heheer Committed by GitHub

optimize dnd drag code (#3768)

parent 06a8a5e2
...@@ -16,17 +16,16 @@ type Props<T = any> = { ...@@ -16,17 +16,16 @@ type Props<T = any> = {
renderClone?: DraggableChildrenFn; renderClone?: DraggableChildrenFn;
children: ({ children: ({
provided, provided,
snapshot, snapshot
draggingItemHeight
}: { }: {
provided: DroppableProvided; provided: DroppableProvided;
snapshot: DroppableStateSnapshot; snapshot: DroppableStateSnapshot;
draggingItemHeight: number;
}) => ReactElement<HTMLElement, string>; }) => ReactElement<HTMLElement, string>;
dataList: T[]; dataList: T[];
zoom?: number;
}; };
function DndDrag<T>({ children, renderClone, onDragEndCb, dataList }: Props<T>) { function DndDrag<T>({ children, renderClone, onDragEndCb, dataList, zoom = 1 }: Props<T>) {
const [draggingItemHeight, setDraggingItemHeight] = useState(0); const [draggingItemHeight, setDraggingItemHeight] = useState(0);
const onDragStart = (start: DragStart) => { const onDragStart = (start: DragStart) => {
...@@ -53,7 +52,12 @@ function DndDrag<T>({ children, renderClone, onDragEndCb, dataList }: Props<T>) ...@@ -53,7 +52,12 @@ function DndDrag<T>({ children, renderClone, onDragEndCb, dataList }: Props<T>)
return ( return (
<DragDropContext onDragStart={onDragStart} onDragEnd={onDragEnd}> <DragDropContext onDragStart={onDragStart} onDragEnd={onDragEnd}>
<Droppable droppableId="droppable" renderClone={renderClone}> <Droppable droppableId="droppable" renderClone={renderClone}>
{(provided, snapshot) => children({ provided, snapshot, draggingItemHeight })} {(provided, snapshot) => (
<>
{children({ provided, snapshot })}
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight / zoom}px`} />}
</>
)}
</Droppable> </Droppable>
</DragDropContext> </DragDropContext>
); );
......
...@@ -223,8 +223,9 @@ const VariableEdit = ({ ...@@ -223,8 +223,9 @@ const VariableEdit = ({
variables={variables} variables={variables}
/> />
)} )}
zoom={zoom}
> >
{({ provided, snapshot, draggingItemHeight }) => ( {({ provided }) => (
<Tbody {...provided.droppableProps} ref={provided.innerRef}> <Tbody {...provided.droppableProps} ref={provided.innerRef}>
{formatVariables.map((item, index) => ( {formatVariables.map((item, index) => (
<Draggable key={item.id} draggableId={item.id} index={index}> <Draggable key={item.id} draggableId={item.id} index={index}>
...@@ -241,7 +242,6 @@ const VariableEdit = ({ ...@@ -241,7 +242,6 @@ const VariableEdit = ({
)} )}
</Draggable> </Draggable>
))} ))}
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight / zoom}px`} />}
</Tbody> </Tbody>
)} )}
</DndDrag> </DndDrag>
......
...@@ -209,8 +209,9 @@ const NodeFormInput = ({ data, selected }: NodeProps<FlowNodeItemType>) => { ...@@ -209,8 +209,9 @@ const NodeFormInput = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
/> />
); );
}} }}
zoom={zoom}
> >
{({ provided, snapshot, draggingItemHeight }) => ( {({ provided }) => (
<Tbody {...provided.droppableProps} ref={provided.innerRef}> <Tbody {...provided.droppableProps} ref={provided.innerRef}>
{inputs.map((item, index) => { {inputs.map((item, index) => {
const icon = FlowNodeInputMap[item.type as FlowNodeInputTypeEnum]?.icon; const icon = FlowNodeInputMap[item.type as FlowNodeInputTypeEnum]?.icon;
...@@ -230,7 +231,6 @@ const NodeFormInput = ({ data, selected }: NodeProps<FlowNodeItemType>) => { ...@@ -230,7 +231,6 @@ const NodeFormInput = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
</Draggable> </Draggable>
); );
})} })}
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight / zoom}px`} />}
</Tbody> </Tbody>
)} )}
</DndDrag> </DndDrag>
......
...@@ -65,7 +65,7 @@ const NodeIfElse = ({ data, selected }: NodeProps<FlowNodeItemType>) => { ...@@ -65,7 +65,7 @@ const NodeIfElse = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
/> />
)} )}
> >
{({ provided, snapshot, draggingItemHeight }) => ( {({ provided }) => (
<Box {...provided.droppableProps} ref={provided.innerRef}> <Box {...provided.droppableProps} ref={provided.innerRef}>
{ifElseList.map((conditionItem, conditionIndex) => ( {ifElseList.map((conditionItem, conditionIndex) => (
<Draggable <Draggable
...@@ -86,7 +86,6 @@ const NodeIfElse = ({ data, selected }: NodeProps<FlowNodeItemType>) => { ...@@ -86,7 +86,6 @@ const NodeIfElse = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
)} )}
</Draggable> </Draggable>
))} ))}
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight / zoom}px`} />}
</Box> </Box>
)} )}
</DndDrag> </DndDrag>
......
...@@ -417,7 +417,7 @@ const InputTypeConfig = ({ ...@@ -417,7 +417,7 @@ const InputTypeConfig = ({
); );
}} }}
> >
{({ provided, snapshot, draggingItemHeight }) => ( {({ provided }) => (
<Box <Box
{...provided.droppableProps} {...provided.droppableProps}
ref={provided.innerRef} ref={provided.innerRef}
...@@ -487,7 +487,6 @@ const InputTypeConfig = ({ ...@@ -487,7 +487,6 @@ const InputTypeConfig = ({
)} )}
</Draggable> </Draggable>
))} ))}
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight}px`} />}
</Box> </Box>
)} )}
</DndDrag> </DndDrag>
......
...@@ -62,8 +62,9 @@ const NodeUserSelect = ({ data, selected }: NodeProps<FlowNodeItemType>) => { ...@@ -62,8 +62,9 @@ const NodeUserSelect = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
index={rubric.source.index} index={rubric.source.index}
/> />
)} )}
zoom={zoom}
> >
{({ provided, snapshot, draggingItemHeight }) => ( {({ provided }) => (
<Box ref={provided.innerRef} {...provided.droppableProps}> <Box ref={provided.innerRef} {...provided.droppableProps}>
{options.map((item, i) => ( {options.map((item, i) => (
<Draggable key={item.key} index={i} draggableId={item.key}> <Draggable key={item.key} index={i} draggableId={item.key}>
...@@ -80,7 +81,6 @@ const NodeUserSelect = ({ data, selected }: NodeProps<FlowNodeItemType>) => { ...@@ -80,7 +81,6 @@ const NodeUserSelect = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
)} )}
</Draggable> </Draggable>
))} ))}
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight}px`} />}
</Box> </Box>
)} )}
</DndDrag> </DndDrag>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment