Skip to content
This repository was archived by the owner on Sep 19, 2024. It is now read-only.

added rowHeight prop, fixed issue with canDrop not returning correct nextParent #10

Merged
merged 2 commits into from
Dec 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/react-sortable-tree.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ const mergeTheme = (props) => {
placeholderRenderer: PlaceholderRendererDefault,
scaffoldBlockPxWidth: 44,
slideRegionSize: 100,
rowHeight: 62,
treeNodeRenderer: TreeNode,
}
for (const propKey of Object.keys(overridableDefaults)) {
Expand Down Expand Up @@ -563,6 +564,7 @@ class ReactSortableTree extends Component {
scaffoldBlockPxWidth,
searchFocusOffset,
rowDirection,
rowHeight,
} = mergeTheme(this.props)
const TreeNodeRenderer = this.treeNodeRenderer
const NodeContentRenderer = this.nodeContentRenderer
Expand Down Expand Up @@ -597,6 +599,7 @@ class ReactSortableTree extends Component {
return (
<TreeNodeRenderer
style={style}
rowHeight={rowHeight}
key={nodeKey}
listIndex={listIndex}
getPrevRow={getPrevRow}
Expand Down Expand Up @@ -862,6 +865,10 @@ export type ReactSortableTreeProps = {
placeholderRenderer: any
}

// Sets the height of a given tree row item in pixels. Can either be a number
// or a function to calculate dynamically
rowHeight?: number | ((treeIndex: number, node: any, path: any[]) => number)

// Determine the unique key used to identify each node and
// generate the `path` array passed in callbacks.
// By default, returns the index in the tree (omitting hidden nodes).
Expand Down
7 changes: 7 additions & 0 deletions src/tree-node.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export interface TreeRendererProps {
scaffoldBlockPxWidth: number
lowerSiblingCounts: number[]
rowDirection?: 'ltr' | 'rtl' | string | undefined
rowHeight: number | ((treeIndex: number, node: any, path: any[]) => number)

listIndex: number
children: JSX.Element[]
Expand Down Expand Up @@ -63,6 +64,7 @@ const TreeNode: React.FC<TreeRendererProps> = (props) => {
draggedNode,
canDrop,
treeIndex,
rowHeight,
treeId: _treeId, // Delete from otherProps
getPrevRow: _getPrevRow, // Delete from otherProps
node: _node, // Delete from otherProps
Expand Down Expand Up @@ -183,9 +185,14 @@ const TreeNode: React.FC<TreeRendererProps> = (props) => {
? { right: scaffoldBlockPxWidth * scaffoldBlockCount }
: { left: scaffoldBlockPxWidth * scaffoldBlockCount }

let calculatedRowHeight = rowHeight
if (typeof rowHeight === 'function') {
calculatedRowHeight = rowHeight(treeIndex, _node, _path)
}
return connectDropTarget(
<div
{...otherProps}
style={{ height: `${calculatedRowHeight}px` }}
className={classnames('rst__node', rowDirectionClass ?? '')}>
{scaffold}

Expand Down
14 changes: 3 additions & 11 deletions src/utils/dnd-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,23 +183,15 @@ const canDrop = (

if (typeof treeRefcanDrop === 'function') {
const { node } = monitor.getItem()
const addedResult = memoizedInsertNode({
treeData: draggingTreeData || treeReftreeData,
newNode: node,
depth: targetDepth,
getNodeKey,
minimumTreeIndex: dropTargetProps.listIndex,
expandParent: true,
})

return treeRefcanDrop({
node,
prevPath: monitor.getItem().path,
prevParent: monitor.getItem().parentNode,
prevTreeIndex: monitor.getItem().treeIndex, // Equals -1 when dragged from external tree
nextPath: addedResult.path,
nextParent: addedResult.parentNode,
nextTreeIndex: addedResult.treeIndex,
nextPath: dropTargetProps.children.props.path,
nextParent: dropTargetProps.children.props.parentNode,
nextTreeIndex: dropTargetProps.children.props.treeIndex,
})
}

Expand Down