Skip to content

Commit 253fae1

Browse files
Anna LAnna L
Anna L
authored and
Anna L
committed
fix
1 parent 63ccf8a commit 253fae1

File tree

3 files changed

+45
-10
lines changed

3 files changed

+45
-10
lines changed

Diff for: src/TreeOperations/tree.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ import {
3333
} from '@/TreeOperations/shared';
3434

3535
export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
36-
const mutateParentIfField = (node: ParserField) => {
36+
const mutateParentIfField = (node: ParserField, parentNode?: string) => {
3737
if (node.data.type === TypeSystemDefinition.FieldDefinition) {
38-
const parentNode = allNodes.find((an) => an.args.some((a) => a.id === node.id));
39-
if (!parentNode) throw new Error('Invalid field definition');
40-
const fieldIndex = parentNode.args.findIndex((a) => a.id == node.id);
41-
updateFieldOnNode(parentNode, fieldIndex, node);
38+
const findParentNode = parentNode
39+
? allNodes.find((n) => n.id === parentNode)
40+
: allNodes.find((an) => an.args.some((a) => a.id === node.id));
41+
if (!findParentNode) throw new Error('Invalid field definition');
42+
const fieldIndex = findParentNode.args.findIndex((a) => a.id == node.id);
43+
updateFieldOnNode(findParentNode, fieldIndex, node);
4244
return;
4345
}
4446
};
@@ -65,7 +67,7 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
6567
mutateParentIfField(n);
6668
};
6769

68-
const updateFieldOnNode = (node: ParserField, i: number, updatedField: ParserField) => {
70+
const updateFieldOnNode = (node: ParserField, i: number, updatedField: ParserField, parentNode?: string) => {
6971
regenerateId(updatedField);
7072
if (node.data.type === TypeSystemDefinition.DirectiveDefinition) {
7173
const oldField: ParserField = JSON.parse(JSON.stringify(node.args[i]));
@@ -77,7 +79,7 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
7779
}
7880
node.args[i] = updatedField;
7981
regenerateId(node);
80-
mutateParentIfField(node);
82+
mutateParentIfField(node, parentNode);
8183
};
8284

8385
const addFieldToNode = (node: ParserField, f: ParserField) => {

Diff for: src/__tests__/TreeOperations/mocks.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ const mainMock: ParserTree = {
4444
name: 'friends',
4545
type: ScalarTypes.String,
4646
}),
47+
createPlainField({
48+
name: 'testUpdate',
49+
type: ScalarTypes.Boolean,
50+
args: [
51+
createPlainInputValue({
52+
name: 'firstName',
53+
type: ScalarTypes.String,
54+
}),
55+
],
56+
}),
4757
],
4858
}),
4959
createRootField({
@@ -105,9 +115,15 @@ const mainMock: ParserTree = {
105115
name: 'AnInput',
106116
type: TypeDefinition.InputObjectTypeDefinition,
107117
args: [
108-
createPlainInputValue({
109-
name: 'firstName',
110-
type: ScalarTypes.String,
118+
createPlainField({
119+
name: 'testUpdate',
120+
type: ScalarTypes.Boolean,
121+
args: [
122+
createPlainInputValue({
123+
name: 'firstName',
124+
type: ScalarTypes.String,
125+
}),
126+
],
111127
}),
112128
],
113129
}),

Diff for: src/__tests__/TreeOperations/tree.rename.spec.ts

+17
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,23 @@ describe('Tree Operations tests - rename operations', () => {
5555
fromInterface: [treeMock.nodes[0].name],
5656
});
5757
});
58+
test('Update field on input definition inside node args', () => {
59+
const treeMock = createMock();
60+
const oldField = treeMock.nodes[2].args[0].args[0];
61+
const updatedField = {
62+
...oldField,
63+
name: 'secondName',
64+
};
65+
66+
mutate(treeMock, treeMock.nodes).updateFieldOnNode(
67+
treeMock.nodes[2].args[0],
68+
0,
69+
updatedField,
70+
treeMock.nodes[2].id,
71+
);
72+
expect(treeMock.nodes[2].args[0].args).toContainEqual(updatedField);
73+
expect(treeMock.nodes[0].args[3].args).not.toContainEqual(updatedField);
74+
});
5875
test('Update field name on directive definition', () => {
5976
const treeMock = createMock();
6077
const updatedField = createParserField({

0 commit comments

Comments
 (0)