diff --git a/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/Item/index.js b/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/Item/index.js index bc02641e8..95ca8cbee 100644 --- a/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/Item/index.js +++ b/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/Item/index.js @@ -32,6 +32,7 @@ const Item = ({ isFormPreviewOpen, onChange = null, onDelete = null, + onCancel = null, renderField = null, setIsFormModalOpen = null, setIsFormPreviewOpen = null, @@ -77,6 +78,7 @@ const Item = ({ const onFormModalCancel = () => { onChange(formDataBeforeEditingRef.current, errorsBeforeEditingRef.current); setIsFormModalOpen(false); + onCancel?.(); }; const onFieldChange = (fieldId, value, error) => { diff --git a/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/index.js b/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/index.js index 4d4f52317..327334df9 100644 --- a/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/index.js +++ b/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/SortableList/index.js @@ -45,6 +45,7 @@ const SortableList = ({ focusLocationMarker, items, onItemChange, + onItemCancel, onItemDelete, onItemMove, renderField, @@ -155,6 +156,7 @@ const SortableList = ({ isFormPreviewOpen={item.isFormPreviewOpen} key={item.id} onChange={onItemChange(index)} + onCancel={onItemCancel(index)} onDelete={onItemDelete(index)} setIsFormModalOpen={setIsItemFormModalOpen(index)} setIsFormPreviewOpen={setIsItemFormPreviewOpen(index)} diff --git a/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/index.js b/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/index.js index 432f7014c..e6048a1b8 100644 --- a/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/index.js +++ b/src/ReportManager/DetailsSection/SchemaForm/fields/Collection/index.js @@ -80,7 +80,7 @@ const Collection = ({ if (erroneousItemIndex > itemIndex) { updatedError[parseInt(erroneousItemIndex) - 1] = updatedError[erroneousItemIndex]; delete updatedError[erroneousItemIndex]; - }; + } }); } @@ -133,6 +133,14 @@ const Collection = ({ setItems([...items, { id: lastAddedItemIdRef.current, isFormModalOpen: true, isFormPreviewOpen: false }]); }; + const onItemCancel = (itemIndex) => () => { + if (Object.keys(value[itemIndex]).length === 0){ // applying the removal logic only for new items + lastAddedItemIdRef.current -= 1; + setItems(items.filter((_, index) => itemIndex !== index)); + onFieldChange(id, value.filter((_, index) => itemIndex !== index)); + } + }; + // If a location field from an item requests to focus its location marker, prefix the marker id with the collection // id and the item index. const focusLocationMarkerFromItem = (itemIndex) => (markerId) => @@ -184,6 +192,7 @@ const Collection = ({ onItemChange={onItemChange} onItemDelete={onItemDelete} onItemMove={onItemMove} + onItemCancel={onItemCancel} setIsItemFormModalOpen={setIsItemFormModalOpen} setIsItemFormPreviewOpen={setIsItemFormPreviewOpen} renderField={renderField}