@@ -35,6 +35,7 @@ const propTypes = {
3535 textareaElement : PropTypes . element ,
3636 minusMenuElement : PropTypes . element ,
3737 plusMenuElement : PropTypes . element ,
38+ beforeRemoveAction : PropTypes . func ,
3839} ;
3940// Default props
4041const defaultProps = {
@@ -108,10 +109,10 @@ class JsonObject extends Component {
108109 } ) ;
109110 }
110111
111- handleAddValueAdd ( { key, value } ) {
112+ handleAddValueAdd ( { key, newValue } ) {
112113 const { data, keyPath, deep } = this . state ;
113114 // Update data
114- data [ key ] = value ;
115+ data [ key ] = newValue ;
115116 this . setState ( {
116117 data,
117118 } ) ;
@@ -126,43 +127,48 @@ class JsonObject extends Component {
126127 keyPath,
127128 deep,
128129 key,
129- value ,
130+ newValue ,
130131 } ) ;
131132 }
132133
133134 handleRemoveValue ( key ) {
134- const { data, keyPath, deep } = this . state ;
135135 return ( ) => {
136- const objType = getObjectType ( data [ key ] ) ;
137- let deltaUpdateResult = null ;
138- if ( objType === 'Object' || objType === 'Array' ) {
139- deltaUpdateResult = {
140- type : UPDATE_DELTA_TYPE ,
141- keyPath,
142- deep,
143- key,
144- oldValue : data [ key ] ,
145- newValue : null ,
146- } ;
147- data [ key ] = null ;
148- } else {
149- deltaUpdateResult = {
150- type : REMOVE_DELTA_TYPE ,
151- keyPath,
152- deep,
153- key,
154- oldValue : data [ key ] ,
155- } ;
156- delete data [ key ] ;
157- }
158- this . setState ( {
159- data,
136+ const { beforeRemoveAction } = this . props ;
137+ const { data, keyPath, deep } = this . state ;
138+ // Before Remove Action
139+ beforeRemoveAction ( key , keyPath , deep ) . then ( ( ) => {
140+ const objType = getObjectType ( data [ key ] ) ;
141+ let deltaUpdateResult = null ;
142+ if ( objType === 'Object' || objType === 'Array' ) {
143+ deltaUpdateResult = {
144+ type : UPDATE_DELTA_TYPE ,
145+ keyPath,
146+ deep,
147+ key,
148+ oldValue : data [ key ] ,
149+ newValue : null ,
150+ } ;
151+ data [ key ] = null ;
152+ } else {
153+ deltaUpdateResult = {
154+ type : REMOVE_DELTA_TYPE ,
155+ keyPath,
156+ deep,
157+ key,
158+ oldValue : data [ key ] ,
159+ } ;
160+ delete data [ key ] ;
161+ }
162+ this . setState ( {
163+ data,
164+ } ) ;
165+ // Spread new update
166+ const { onUpdate, onDeltaUpdate } = this . props ;
167+ onUpdate ( keyPath [ keyPath . length - 1 ] , data ) ;
168+ // Spread delta update
169+ onDeltaUpdate ( deltaUpdateResult ) ;
170+ } ) . catch ( ( ) => {
160171 } ) ;
161- // Spread new update
162- const { onUpdate, onDeltaUpdate } = this . props ;
163- onUpdate ( keyPath [ keyPath . length - 1 ] , data ) ;
164- // Spread delta update
165- onDeltaUpdate ( deltaUpdateResult ) ;
166172 } ;
167173 }
168174
@@ -239,6 +245,7 @@ class JsonObject extends Component {
239245 textareaElement,
240246 minusMenuElement,
241247 plusMenuElement,
248+ beforeRemoveAction,
242249 } = this . props ;
243250
244251 const { minus, plus, addForm, ul, delimiter } = getStyle ( name , data , keyPath , deep , dataType ) ;
@@ -275,6 +282,7 @@ class JsonObject extends Component {
275282 textareaElement = { textareaElement }
276283 minusMenuElement = { minusMenuElement }
277284 plusMenuElement = { plusMenuElement }
285+ beforeRemoveAction = { beforeRemoveAction }
278286 /> ) ;
279287
280288 const startObject = '{' ;
0 commit comments