Skip to content

Commit 7e347db

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 24c2796 commit 7e347db

File tree

1 file changed

+46
-48
lines changed

1 file changed

+46
-48
lines changed

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

+46-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]
@@ -180,6 +173,13 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
180173
// case when you click on the already selected item => reset
181174
setSelected((old) => ((old ?? -1) === index ? null : index));
182175
setHovered(null);
176+
if (valueField && isNil(_item[valueField]) && isNil(selected)) {
177+
fixedData[index] = {
178+
..._item,
179+
[valueField]: 0,
180+
}
181+
onChange(fixedData)
182+
}
183183
}
184184
setClickPrevent(false);
185185
}, 150) as number;
@@ -190,7 +190,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
190190
if (clickTimeout) clearTimeout(clickTimeout);
191191
setClickPrevent(true);
192192
const newData = splitAt(data, point);
193-
customOnChange(newData);
193+
onChange(newData);
194194
}}
195195
onWheel={(e, _item, _index, point) => {
196196
setViewBox(getZoomedViewBox(data, viewBox, e.deltaY > 0 ? 'OUT' : 'IN', point));
@@ -203,7 +203,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
203203
setMode(!finalized ? 'resizing' : null);
204204
try {
205205
const result = resizeSegment(fixedData, index, gap, 'end');
206-
if (finalized) customOnChange(result.result);
206+
if (finalized) onChange(result.result);
207207
else {
208208
setData(result.result);
209209
// if index has changed, we need to impact the index modification
@@ -285,7 +285,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
285285
title={t('Editor.linear-metadata.merge-with-left')}
286286
disabled={selected === 0}
287287
onClick={() => {
288-
customOnChange(mergeIn(data, selected, 'left'));
288+
onChange(mergeIn(data, selected, 'left'));
289289
setSelected(selected - 1);
290290
}}
291291
>
@@ -299,7 +299,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
299299
const splitPosition =
300300
selectedData.begin + (selectedData.end - selectedData.begin) / 2;
301301
const newData = splitAt(data, splitPosition);
302-
customOnChange(newData);
302+
onChange(newData);
303303
}}
304304
>
305305
<IoIosCut />
@@ -309,7 +309,7 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
309309
type="button"
310310
title={t('Editor.linear-metadata.merge-with-right')}
311311
disabled={selected === data.length - 1}
312-
onClick={() => customOnChange(mergeIn(data, selected, 'right'))}
312+
onClick={() => onChange(mergeIn(data, selected, 'right'))}
313313
>
314314
<BsBoxArrowInRight />
315315
</button>
@@ -363,43 +363,41 @@ export const FormComponent: React.FC<FieldProps> = (props) => {
363363
}}
364364
formData={selectedData}
365365
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-
};
366+
const newItem = e.formData;
367+
const oldItem = data[selected];
368+
let newData = [...data];
369+
// we keep the old value for begin and end
370+
// they will be change in the resize function if needed
371+
newData[selected] = {
372+
...oldItem,
373+
...omit(newItem, ['begin', 'end']),
374+
};
376375

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);
376+
// Check if there is a resize
377+
try {
378+
if (newItem.begin !== oldItem.begin) {
379+
const resizeBegin = resizeSegment(
380+
[...newData],
381+
selected,
382+
newItem.begin - oldItem.begin,
383+
'begin'
384+
);
385+
newData = resizeBegin.result;
386+
}
387+
if (oldItem.end !== newItem.end) {
388+
const resizeEnd = resizeSegment(
389+
[...newData],
390+
selected,
391+
newItem.end - oldItem.end,
392+
'end'
393+
);
394+
newData = resizeEnd.result;
402395
}
396+
onChange(newData);
397+
} catch (error) {
398+
// TODO: Should we display the resize error ?
399+
} finally {
400+
setSelectedData(newItem);
403401
}
404402
}}
405403
>

0 commit comments

Comments
 (0)