Skip to content

Commit 2b30438

Browse files
author
Paul Vallis
committed
Add addAsFirstChild option to addNodeUnderParent
1 parent c83c2aa commit 2b30438

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

src/utils/tree-data-utils.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ export function addNodeUnderParent({
616616
getNodeKey,
617617
ignoreCollapsed = true,
618618
expandParent = false,
619+
addAsFirstChild = false,
619620
}) {
620621
if (parentKey === null) {
621622
return {
@@ -668,9 +669,13 @@ export function addNodeUnderParent({
668669

669670
insertedTreeIndex = nextTreeIndex;
670671

672+
const children = addAsFirstChild
673+
? [ newNode, ...parentNode.children]
674+
: [...parentNode.children, newNode];
675+
671676
return {
672677
...parentNode,
673-
children: [...parentNode.children, newNode],
678+
children,
674679
};
675680
},
676681
});

src/utils/tree-data-utils.test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,6 +1112,33 @@ describe('addNodeUnderParent', () => {
11121112
);
11131113
expect(result.treeIndex).toEqual(5);
11141114
});
1115+
1116+
it('should add new node as last child by default', () => {
1117+
const result = addNodeUnderParent({
1118+
...nestedParams,
1119+
parentKey: 0,
1120+
getNodeKey: keyFromKey,
1121+
});
1122+
1123+
const [existingChild0, existingChild1, expectedNewNode] = result.treeData[0].children;
1124+
1125+
expect(expectedNewNode).toEqual(nestedParams.newNode);
1126+
expect([existingChild0, existingChild1]).toEqual(nestedParams.treeData[0].children);
1127+
});
1128+
1129+
it('should add new node as first child if addAsFirstChild is true', () => {
1130+
const result = addNodeUnderParent({
1131+
...nestedParams,
1132+
parentKey: 0,
1133+
getNodeKey: keyFromKey,
1134+
addAsFirstChild: true,
1135+
});
1136+
1137+
const [expectedNewNode, ...previousChildren] = result.treeData[0].children;
1138+
1139+
expect(expectedNewNode).toEqual(nestedParams.newNode);
1140+
expect(previousChildren).toEqual(nestedParams.treeData[0].children);
1141+
});
11151142
});
11161143

11171144
describe('insertNode', () => {

stories/add-remove.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export default class App extends Component {
6060

6161
this.state = {
6262
treeData: [{ title: 'Peter Olofsson' }, { title: 'Karl Johansson' }],
63+
addAsFirstChild: false,
6364
};
6465
}
6566

@@ -88,6 +89,7 @@ export default class App extends Component {
8889
node.title.split(' ')[0]
8990
}sson`,
9091
},
92+
addAsFirstChild: state.addAsFirstChild,
9193
}).treeData,
9294
}))
9395
}
@@ -123,6 +125,18 @@ export default class App extends Component {
123125
>
124126
Add more
125127
</button>
128+
<br />
129+
<label Htmlfor="addAsFirstChild">
130+
Add new nodes at start
131+
<input
132+
name="addAsFirstChild"
133+
type="checkbox"
134+
checked={this.state.addAsFirstChild}
135+
onChange={() => this.setState(state => ({
136+
addAsFirstChild: !state.addAsFirstChild,
137+
}))}
138+
/>
139+
</label>
126140
</div>
127141
);
128142
}

0 commit comments

Comments
 (0)