From 2f05cf9279d368cdbca23582773bb158ac5c3840 Mon Sep 17 00:00:00 2001 From: Pierantonio Zocchi Date: Mon, 19 Jan 2026 17:12:57 +0100 Subject: [PATCH 1/2] Manage default values when adding an item in Crud form --- src/components/RLCrudForm/RLCrudForm.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/components/RLCrudForm/RLCrudForm.tsx b/src/components/RLCrudForm/RLCrudForm.tsx index a9f2885..e0175f8 100644 --- a/src/components/RLCrudForm/RLCrudForm.tsx +++ b/src/components/RLCrudForm/RLCrudForm.tsx @@ -49,6 +49,15 @@ export const RLCrudForm = forwardRef( fieldsMap[fieldKey].side_effect?.(value, fieldsMap) } }) + } else { + // Apply default values from fields when adding new item + const defaultModel: { [key: string]: RLCrudInputValueType } = {} + Object.values(fieldsMap).forEach((field) => { + if (field.default_value !== undefined) { + defaultModel[field.value] = field.default_value + } + }) + setModel(defaultModel) } }, [initialFields, value]) From e63578c90dd046a92ec49b21d2198a51819cae14 Mon Sep 17 00:00:00 2001 From: Pierantonio Zocchi Date: Tue, 20 Jan 2026 11:24:50 +0100 Subject: [PATCH 2/2] Fix infinite render loop --- .../RLCrudFilters/RLCrudFilters.tsx | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/components/RLCrudFilters/RLCrudFilters.tsx b/src/components/RLCrudFilters/RLCrudFilters.tsx index e6825c5..d52db32 100644 --- a/src/components/RLCrudFilters/RLCrudFilters.tsx +++ b/src/components/RLCrudFilters/RLCrudFilters.tsx @@ -61,15 +61,30 @@ export const RLCrudFilters = forwardRef( onReset?.() }, [resetFields, onFiltersApplied, onReset]) + const syncModelWithAppliedFilters = useCallback(() => { + setModel((prev) => { + const target = currentFiltersStatusRef.current + const prevKeys = Object.keys(prev) + const targetKeys = Object.keys(target) + + if (prevKeys.length !== targetKeys.length) { + return { ...target } + } + + const hasChanges = prevKeys.some((key) => prev[key] !== target[key]) + return hasChanges ? { ...target } : prev + }) + }, []) + const handleShow = useCallback(() => { - setModel({ ...currentFiltersStatusRef.current }) + syncModelWithAppliedFilters() onShow?.() - }, [onShow]) + }, [onShow, syncModelWithAppliedFilters]) const handleHide = useCallback(() => { - setModel({ ...currentFiltersStatusRef.current }) + syncModelWithAppliedFilters() onHide?.() - }, [onHide]) + }, [onHide, syncModelWithAppliedFilters]) const handleKeyUp = useCallback( (e: React.KeyboardEvent) => {