Skip to content

Commit 296a08b

Browse files
committed
front: editor-slopes-fix-form-validation
Remove local errors check in slopes form and let global form validate the form
1 parent e08d0e1 commit 296a08b

File tree

1 file changed

+39
-48
lines changed

1 file changed

+39
-48
lines changed

front/src/applications/editor/components/LinearMetadata/FormComponent.tsx

+39-48
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';
1+
import React, { useState, useRef, useEffect, useMemo } from 'react';
22
import Form, { FieldProps, utils } from '@rjsf/core';
33
import { JSONSchema7 } from 'json-schema';
44
import { omit, head, max as fnMax, min as fnMin, isNil } from 'lodash';
@@ -106,13 +106,6 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
106106
return field;
107107
}, [jsonSchema]);
108108

109-
const customOnChange = useCallback(
110-
(newData: Array<LinearMetadataItem>) => {
111-
onChange(newData.filter((e) => (valueField ? !isNil(e[valueField]) : true)));
112-
},
113-
[onChange, valueField]
114-
);
115-
116109
const fixedData = useMemo(
117110
() => fixLinearMetadataItems(formData?.filter(notEmpty), distance),
118111
[formData, distance]
@@ -190,7 +183,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
190183
if (clickTimeout) clearTimeout(clickTimeout);
191184
setClickPrevent(true);
192185
const newData = splitAt(data, point);
193-
customOnChange(newData);
186+
onChange(newData);
194187
}}
195188
onWheel={(e, _item, _index, point) => {
196189
setViewBox(getZoomedViewBox(data, viewBox, e.deltaY > 0 ? 'OUT' : 'IN', point));
@@ -203,7 +196,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
203196
setMode(!finalized ? 'resizing' : null);
204197
try {
205198
const result = resizeSegment(fixedData, index, gap, 'end');
206-
if (finalized) customOnChange(result.result);
199+
if (finalized) onChange(result.result);
207200
else {
208201
setData(result.result);
209202
// if index has changed, we need to impact the index modification
@@ -285,7 +278,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
285278
title={t('Editor.linear-metadata.merge-with-left')}
286279
disabled={selected === 0}
287280
onClick={() => {
288-
customOnChange(mergeIn(data, selected, 'left'));
281+
onChange(mergeIn(data, selected, 'left'));
289282
setSelected(selected - 1);
290283
}}
291284
>
@@ -299,7 +292,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
299292
const splitPosition =
300293
selectedData.begin + (selectedData.end - selectedData.begin) / 2;
301294
const newData = splitAt(data, splitPosition);
302-
customOnChange(newData);
295+
onChange(newData);
303296
}}
304297
>
305298
<IoIosCut />
@@ -309,7 +302,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
309302
type="button"
310303
title={t('Editor.linear-metadata.merge-with-right')}
311304
disabled={selected === data.length - 1}
312-
onClick={() => customOnChange(mergeIn(data, selected, 'right'))}
305+
onClick={() => onChange(mergeIn(data, selected, 'right'))}
313306
>
314307
<BsBoxArrowInRight />
315308
</button>
@@ -363,43 +356,41 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
363356
}}
364357
formData={selectedData}
365358
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+
};
376368

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;
402388
}
389+
onChange(newData);
390+
} catch (error) {
391+
// TODO: Should we display the resize error ?
392+
} finally {
393+
setSelectedData(newItem);
403394
}
404395
}}
405396
>

0 commit comments

Comments
 (0)