1
- import React , { useState , useRef , useEffect , useCallback , useMemo } from 'react' ;
1
+ import React , { useState , useRef , useEffect , useMemo } from 'react' ;
2
2
import Form , { FieldProps , utils } from '@rjsf/core' ;
3
3
import { JSONSchema7 } from 'json-schema' ;
4
4
import { omit , head , max as fnMax , min as fnMin , isNil } from 'lodash' ;
@@ -106,13 +106,6 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
106
106
return field ;
107
107
} , [ jsonSchema ] ) ;
108
108
109
- const customOnChange = useCallback (
110
- ( newData : Array < LinearMetadataItem > ) => {
111
- onChange ( newData . filter ( ( e ) => ( valueField ? ! isNil ( e [ valueField ] ) : true ) ) ) ;
112
- } ,
113
- [ onChange , valueField ]
114
- ) ;
115
-
116
109
const fixedData = useMemo (
117
110
( ) => fixLinearMetadataItems ( formData ?. filter ( notEmpty ) , distance ) ,
118
111
[ formData , distance ]
@@ -190,7 +183,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
190
183
if ( clickTimeout ) clearTimeout ( clickTimeout ) ;
191
184
setClickPrevent ( true ) ;
192
185
const newData = splitAt ( data , point ) ;
193
- customOnChange ( newData ) ;
186
+ onChange ( newData ) ;
194
187
} }
195
188
onWheel = { ( e , _item , _index , point ) => {
196
189
setViewBox ( getZoomedViewBox ( data , viewBox , e . deltaY > 0 ? 'OUT' : 'IN' , point ) ) ;
@@ -203,7 +196,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
203
196
setMode ( ! finalized ? 'resizing' : null ) ;
204
197
try {
205
198
const result = resizeSegment ( fixedData , index , gap , 'end' ) ;
206
- if ( finalized ) customOnChange ( result . result ) ;
199
+ if ( finalized ) onChange ( result . result ) ;
207
200
else {
208
201
setData ( result . result ) ;
209
202
// if index has changed, we need to impact the index modification
@@ -285,7 +278,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
285
278
title = { t ( 'Editor.linear-metadata.merge-with-left' ) }
286
279
disabled = { selected === 0 }
287
280
onClick = { ( ) => {
288
- customOnChange ( mergeIn ( data , selected , 'left' ) ) ;
281
+ onChange ( mergeIn ( data , selected , 'left' ) ) ;
289
282
setSelected ( selected - 1 ) ;
290
283
} }
291
284
>
@@ -299,7 +292,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
299
292
const splitPosition =
300
293
selectedData . begin + ( selectedData . end - selectedData . begin ) / 2 ;
301
294
const newData = splitAt ( data , splitPosition ) ;
302
- customOnChange ( newData ) ;
295
+ onChange ( newData ) ;
303
296
} }
304
297
>
305
298
< IoIosCut />
@@ -309,7 +302,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
309
302
type = "button"
310
303
title = { t ( 'Editor.linear-metadata.merge-with-right' ) }
311
304
disabled = { selected === data . length - 1 }
312
- onClick = { ( ) => customOnChange ( mergeIn ( data , selected , 'right' ) ) }
305
+ onClick = { ( ) => onChange ( mergeIn ( data , selected , 'right' ) ) }
313
306
>
314
307
< BsBoxArrowInRight />
315
308
</ button >
@@ -363,43 +356,41 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
363
356
} }
364
357
formData = { selectedData }
365
358
onChange = { ( e ) => {
366
- if ( e . errors . length === 0 ) {
367
- const newItem = e . formData ;
368
- const oldItem = data [ selected ] ;
369
- let newData = [ ...data ] ;
370
- // we keep the old value for begin and end
371
- // they will be change in the resize function if needed
372
- newData [ selected ] = {
373
- ...oldItem ,
374
- ...omit ( newItem , [ 'begin' , 'end' ] ) ,
375
- } ;
359
+ const newItem = e . formData ;
360
+ const oldItem = data [ selected ] ;
361
+ let newData = [ ...data ] ;
362
+ // we keep the old value for begin and end
363
+ // they will be change in the resize function if needed
364
+ newData [ selected ] = {
365
+ ...oldItem ,
366
+ ...omit ( newItem , [ 'begin' , 'end' ] ) ,
367
+ } ;
376
368
377
- // Check if there is a resize
378
- try {
379
- if ( newItem . begin !== oldItem . begin ) {
380
- const resizeBegin = resizeSegment (
381
- [ ...newData ] ,
382
- selected ,
383
- newItem . begin - oldItem . begin ,
384
- 'begin'
385
- ) ;
386
- newData = resizeBegin . result ;
387
- }
388
- if ( oldItem . end !== newItem . end ) {
389
- const resizeEnd = resizeSegment (
390
- [ ...newData ] ,
391
- selected ,
392
- newItem . end - oldItem . end ,
393
- 'end'
394
- ) ;
395
- newData = resizeEnd . result ;
396
- }
397
- customOnChange ( newData ) ;
398
- } catch ( error ) {
399
- // TODO: Should we display the resize error ?
400
- } finally {
401
- setSelectedData ( newItem ) ;
369
+ // Check if there is a resize
370
+ try {
371
+ if ( newItem . begin !== oldItem . begin ) {
372
+ const resizeBegin = resizeSegment (
373
+ [ ...newData ] ,
374
+ selected ,
375
+ newItem . begin - oldItem . begin ,
376
+ 'begin'
377
+ ) ;
378
+ newData = resizeBegin . result ;
379
+ }
380
+ if ( oldItem . end !== newItem . end ) {
381
+ const resizeEnd = resizeSegment (
382
+ [ ...newData ] ,
383
+ selected ,
384
+ newItem . end - oldItem . end ,
385
+ 'end'
386
+ ) ;
387
+ newData = resizeEnd . result ;
402
388
}
389
+ onChange ( newData ) ;
390
+ } catch ( error ) {
391
+ // TODO: Should we display the resize error ?
392
+ } finally {
393
+ setSelectedData ( newItem ) ;
403
394
}
404
395
} }
405
396
>
0 commit comments