Skip to content

Commit fa7af12

Browse files
Avivhdrdiogofcunha
authored andcommitted
feat: Add scrollToIndex (#53)
* add scroll to index * add scroll to index * Remove useless index argument * Moving logic into TreeContainer * remove comma * Add scrollToId to TreeContainer interface
1 parent e2509ac commit fa7af12

File tree

4 files changed

+15
-3
lines changed

4 files changed

+15
-3
lines changed

index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export interface TreeProps {
3535
onChange: (nodes: Node[]) => void;
3636
children: (props: RendererProps) => JSX.Element
3737
nodeMarginLeft?: number;
38+
scrollToId?: number;
3839
}
3940

4041
export default class Tree extends React.Component<TreeProps> {}

src/Tree.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default class Tree extends React.Component {
3232
};
3333

3434
render() {
35-
const {nodes} = this.props;
35+
const {nodes, scrollToIndex} = this.props;
3636

3737
return (
3838
<AutoSizer>
@@ -45,6 +45,7 @@ export default class Tree extends React.Component {
4545
rowHeight={this._cache.rowHeight}
4646
rowRenderer={this.measureRowRenderer(nodes)}
4747
width={width}
48+
scrollToIndex={scrollToIndex}
4849
/>
4950
)}
5051
</AutoSizer>

src/TreeContainer.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
44
import Tree from './Tree';
55
import {UPDATE_TYPE} from './contants';
66
import {getFlattenedTree} from './selectors/getFlattenedTree';
7-
import {deleteNodeFromTree, replaceNodeFromTree} from './selectors/nodes';
7+
import {deleteNodeFromTree, replaceNodeFromTree, getRowIndexFromId} from './selectors/nodes';
88
import {Node} from './shapes/nodeShapes';
99
import {createSelector} from 'reselect';
1010

@@ -42,13 +42,17 @@ export default class TreeContainer extends React.Component {
4242
this.props.onChange(updatedNodes);
4343
};
4444

45+
4546
render() {
47+
const flattenedTree = getFlattenedTree(this.props.nodes)
48+
const rowIndex = getRowIndexFromId(flattenedTree, this.props.scrollToId);
4649
return (
4750
<Tree
4851
nodeMarginLeft={this.props.nodeMarginLeft}
49-
nodes={getFlattenedTree(this.props.nodes)}
52+
nodes={flattenedTree}
5053
onChange={this.handleChange}
5154
NodeRenderer={this.props.children}
55+
scrollToIndex={rowIndex}
5256
/>
5357
);
5458
}
@@ -62,6 +66,7 @@ TreeContainer.propTypes = {
6266
onChange: PropTypes.func,
6367
children: PropTypes.func.isRequired,
6468
nodeMarginLeft: PropTypes.number,
69+
scrollToId: PropTypes.number,
6570
};
6671

6772
TreeContainer.defaultProps = {

src/selectors/nodes.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import omit from 'lodash.omit';
33

44
import {UPDATE_TYPE} from '../contants';
55

6+
export { getFlattenedTree } from './getFlattenedTree';
7+
68
export const getNodeRenderOptions = createSelector(
79
node => (node.state || {}).expanded,
810
node => (node.state || {}).favorite,
@@ -86,3 +88,6 @@ export const addNode = node => ({
8688
node,
8789
type: UPDATE_TYPE.ADD,
8890
});
91+
92+
export const getRowIndexFromId = (flattenedTree, id) =>
93+
flattenedTree.findIndex((node) => node.id === id);

0 commit comments

Comments
 (0)