66 ParserTree ,
77 Value ,
88 ScalarTypes ,
9+ Instances ,
10+ ValueDefinition ,
911} from '@/Models' ;
1012import { getTypeName } from '@/shared' ;
1113import {
@@ -33,8 +35,8 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
3335 }
3436 } ;
3537 const deleteFieldFromNode = ( n : ParserField , i : number ) => {
36- const argName = n . args [ i ] . name ;
3738 if ( n . data . type === TypeDefinition . InterfaceTypeDefinition ) {
39+ const argName = n . args [ i ] . name ;
3840 tree . nodes
3941 . filter ( ( filterNode ) => filterNode . interfaces . includes ( n . name ) )
4042 . forEach ( ( nodeWithThisInterface ) => {
@@ -74,7 +76,7 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
7476 regenerateId ( node ) ;
7577 mutateParentIfField ( node ) ;
7678 } ;
77- const renameNode = ( node : ParserField , newName : string ) => {
79+ const renameRootNode = ( node : ParserField , newName : string ) => {
7880 const isError = allNodes . map ( ( n ) => n . name ) . includes ( newName ) ;
7981 if ( isError ) {
8082 return ;
@@ -100,6 +102,56 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
100102 regenerateId ( node ) ;
101103 } ;
102104 const removeNode = ( node : ParserField ) => {
105+ if ( node . data . type === TypeSystemDefinition . FieldDefinition ) {
106+ const parent = allNodes . find ( ( parentNode ) => parentNode . args . includes ( node ) ) ;
107+ if ( parent ) {
108+ const index = parent . args . indexOf ( node ) ;
109+ deleteFieldFromNode ( parent , index ) ;
110+ }
111+ return ;
112+ }
113+ if ( node . data . type === TypeSystemDefinition . UnionMemberDefinition ) {
114+ const parent = allNodes . find ( ( parentNode ) => parentNode . args . includes ( node ) ) ;
115+ if ( parent ) {
116+ const index = parent . args . indexOf ( node ) ;
117+ deleteFieldFromNode ( parent , index ) ;
118+ }
119+ return ;
120+ }
121+ if ( node . data . type === Instances . Argument ) {
122+ const parent = allNodes . find ( ( p ) => p . directives . some ( ( a ) => a . args . includes ( node ) ) ) ;
123+ if ( parent ) {
124+ const parentDirective = parent . directives . find ( ( d ) => d . args . some ( ( a ) => a === node ) ) ;
125+ if ( parentDirective ) {
126+ const indexInDirective = parentDirective . args . indexOf ( node ) ;
127+ deleteFieldFromNode ( parent , indexInDirective ) ;
128+ }
129+ }
130+ return ;
131+ }
132+ if ( node . data . type === ValueDefinition . InputValueDefinition ) {
133+ const parent = allNodes . find ( ( parentNode ) => parentNode . args . includes ( node ) ) ;
134+ if ( parent ) {
135+ const index = parent . args . indexOf ( node ) ;
136+ deleteFieldFromNode ( parent , index ) ;
137+ } else {
138+ const parent = allNodes . find ( ( p ) => p . args . some ( ( a ) => a . args . includes ( node ) ) ) ;
139+ const field = parent ?. args . find ( ( a ) => a . args . includes ( node ) ) ;
140+ if ( field ) {
141+ const fieldIndex = field . args . findIndex ( ( f ) => f === node ) ;
142+ deleteFieldFromNode ( field , fieldIndex ) ;
143+ }
144+ }
145+ return ;
146+ }
147+ if ( node . data . type === ValueDefinition . EnumValueDefinition ) {
148+ const parent = allNodes . find ( ( parentNode ) => parentNode . args . includes ( node ) ) ;
149+ if ( parent ) {
150+ const index = parent . args . indexOf ( node ) ;
151+ deleteFieldFromNode ( parent , index ) ;
152+ }
153+ return ;
154+ }
103155 const deletedNode = tree . nodes . findIndex ( ( n ) => n === node ) ;
104156 if ( deletedNode === - 1 ) throw new Error ( 'Error deleting a node' ) ;
105157 // co jak usuwamy extension interface
@@ -167,10 +219,9 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
167219 } ;
168220 } ;
169221 return {
170- deleteFieldFromNode,
171222 updateFieldOnNode,
172223 addFieldToNode,
173- renameNode ,
224+ renameRootNode ,
174225 removeNode,
175226 implementInterface,
176227 deImplementInterface,
0 commit comments