Skip to content

Commit 364e4aa

Browse files
committed
feat: 🎸 Renderers now are supplied with row index
1 parent 623818f commit 364e4aa

File tree

9 files changed

+24
-15
lines changed

9 files changed

+24
-15
lines changed

index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
4545

4646
export interface RendererProps<T> {
4747
measure: () => void;
48+
index: number;
4849
onChange: (updateParams: NodeAction) => void;
4950
node: FlattenedNode;
5051
iconsClassNameMap?: T;

src/__tests__/__snapshots__/Tree.test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Object {
2828

2929
exports[`Tree rowRenderer should render the Node renderer with the correct props 1`] = `
3030
Object {
31+
"index": 0,
3132
"measure": [MockFunction],
3233
"node": Object {
3334
"children": Array [

src/renderers/Deletable.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@ const Deletable = ({
1313
delete: 'mi mi-delete',
1414
},
1515
children,
16+
index,
1617
}) => {
1718
const {isDeletable} = getNodeRenderOptions(node);
1819

1920
const className = classNames({
2021
[iconsClassNameMap.delete]: isDeletable,
2122
});
2223

23-
const handleChange = () => onChange(deleteNode(node));
24+
const handleChange = () => onChange({...deleteNode(node), index});
2425

2526
return (
2627
<span>

src/renderers/Expandable.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const Expandable = ({
1010
onChange,
1111
node,
1212
children,
13+
index,
1314
iconsClassNameMap = {
1415
expanded: 'mi mi-keyboard-arrow-down',
1516
collapsed: 'mi mi-keyboard-arrow-right',
@@ -23,7 +24,7 @@ const Expandable = ({
2324
[iconsClassNameMap.lastChild]: !hasChildren,
2425
});
2526

26-
const handleChange = () => onChange(updateNode(node, {expanded: !isExpanded}));
27+
const handleChange = () => onChange({...updateNode(node, {expanded: !isExpanded}), index});
2728

2829
return (
2930
<span onDoubleClick={handleChange}>

src/renderers/Favorite.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const Favorite = ({
1414
notFavorite: 'mi mi-star-border',
1515
},
1616
children,
17+
index,
1718
}) => {
1819
const {isFavorite} = getNodeRenderOptions(node);
1920

@@ -22,7 +23,7 @@ const Favorite = ({
2223
[iconsClassNameMap.notFavorite]: !isFavorite,
2324
});
2425

25-
const handleChange = () => onChange(updateNode(node, {favorite: !isFavorite}));
26+
const handleChange = () => onChange({...updateNode(node, {favorite: !isFavorite}), index});
2627

2728
return (
2829
<span>

src/renderers/__tests__/Deletable.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ describe('renderers Deletable', () => {
2222
delete: 'delete',
2323
},
2424
measure: jest.fn(),
25+
index: 1,
2526
};
2627

2728
const props = {...baseProps, ...extraProps};
@@ -42,15 +43,15 @@ describe('renderers Deletable', () => {
4243

4344
deleteIconWrapper.simulate('click');
4445

45-
expect(props.onChange).toHaveBeenCalledWith(deleteNode(props.node));
46+
expect(props.onChange).toHaveBeenCalledWith({...deleteNode(props.node), index: props.index});
4647
});
4748

4849
it('pressing enter should call onChange with the correct params', () => {
4950
const {deleteIconWrapper, props} = setup();
5051

5152
deleteIconWrapper.simulate('keyDown', {keyCode: KEY_CODES.Enter});
5253

53-
expect(props.onChange).toHaveBeenCalledWith(deleteNode(props.node));
54+
expect(props.onChange).toHaveBeenCalledWith({...deleteNode(props.node), index: props.index});
5455
});
5556
});
5657

src/renderers/__tests__/Expandable.test.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('renderers Expandable', () => {
2323
collapsed: 'colpased',
2424
},
2525
measure: jest.fn(),
26+
index: 1,
2627
};
2728

2829
const props = {...baseProps, ...extraProps};
@@ -44,23 +45,23 @@ describe('renderers Expandable', () => {
4445

4546
expandIconWrapper.simulate('click');
4647

47-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {expanded: false}));
48+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {expanded: false}), index: props.index});
4849
});
4950

5051
it('pressing enter should call onChange with the correct params', () => {
5152
const {expandIconWrapper, props} = setup({expanded: true});
5253

5354
expandIconWrapper.simulate('keyDown', {keyCode: KEY_CODES.Enter});
5455

55-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {expanded: false}));
56+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {expanded: false}), index: props.index});
5657
});
5758

5859
it('double clicking in the parent node should call onChange with the correct params', () => {
5960
const {props, wrapper} = setup({expanded: true});
6061

6162
wrapper.first().simulate('doubleClick');
6263

63-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {expanded: false}));
64+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {expanded: false}), index: props.index});
6465
});
6566
});
6667

@@ -76,23 +77,23 @@ describe('renderers Expandable', () => {
7677

7778
expandIconWrapper.simulate('click');
7879

79-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {expanded: true}));
80+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {expanded: true}), index: props.index});
8081
});
8182

8283
it('pressing enter should call onChange with the correct params', () => {
8384
const {expandIconWrapper, props} = setup({expanded: false});
8485

8586
expandIconWrapper.simulate('keyDown', {keyCode: KEY_CODES.Enter});
8687

87-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {expanded: true}));
88+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {expanded: true}), index: props.index});
8889
});
8990

9091
it('double clicking in the parent node should call onChange with the correct params', () => {
9192
const {props, wrapper} = setup({expanded: false});
9293

9394
wrapper.first().simulate('doubleClick');
9495

95-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {expanded: true}));
96+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {expanded: true}), index: props.index});
9697
});
9798
});
9899
});

src/renderers/__tests__/Favorite.test.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('renderers Favorite', () => {
2323
notFavorite: 'non-fav',
2424
},
2525
measure: jest.fn(),
26+
index: 1,
2627
};
2728

2829
const props = {...baseProps, ...extraProps};
@@ -45,15 +46,15 @@ describe('renderers Favorite', () => {
4546

4647
favoriteIconWrapper.simulate('click');
4748

48-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {favorite: false}));
49+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {favorite: false}), index: props.index});
4950
});
5051

5152
it('pressing enter should call onChange with the correct params', () => {
5253
const {favoriteIconWrapper, props} = setupFavorite();
5354

5455
favoriteIconWrapper.simulate('keyDown', {keyCode: KEY_CODES.Enter});
5556

56-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {favorite: false}));
57+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {favorite: false}), index: props.index});
5758
});
5859
});
5960

@@ -71,15 +72,15 @@ describe('renderers Favorite', () => {
7172

7273
favoriteIconWrapper.simulate('click');
7374

74-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {favorite: true}));
75+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {favorite: true}), index: props.index});
7576
});
7677

7778
it('pressing enter should call onChange with the correct params', () => {
7879
const {favoriteIconWrapper, props} = setupNotFavorite();
7980

8081
favoriteIconWrapper.simulate('keyDown', {keyCode: KEY_CODES.Enter});
8182

82-
expect(props.onChange).toHaveBeenCalledWith(updateNode(props.node, {favorite: true}));
83+
expect(props.onChange).toHaveBeenCalledWith({...updateNode(props.node, {favorite: true}), index: props.index});
8384
});
8485
});
8586
});

src/shapes/rendererShapes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export const Renderer = {
66
measure: PropTypes.func,
77
onChange: PropTypes.func.isRequired,
88
node: PropTypes.shape(FlattenedNode),
9+
index: PropTypes.number.isRequired,
910
};

0 commit comments

Comments
 (0)