Skip to content

Commit 816e5a6

Browse files
committed
fix: issue where initial values are not set for composite fields
1 parent 6a352da commit 816e5a6

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

src/components/Form/Form.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const $ExampleFormData = z.object({
2121
z.object({
2222
recordArrayStringInput: z.string(),
2323
showRecordArrayDynamicField: z.boolean(),
24-
recordArrayDynamicField: z.string()
24+
recordArrayDynamicField: z.string().optional()
2525
})
2626
),
2727
date: z.date().optional(),

src/components/Form/NumberRecordField.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect } from 'react';
1+
import { useEffect, useRef } from 'react';
22

33
import type {
44
NumberRecordFieldValue,
@@ -27,8 +27,13 @@ export const NumberRecordField = <T extends NumberRecordFieldValue = NumberRecor
2727
setValue: setRecordValue,
2828
value: recordValue
2929
}: NumberRecordFieldProps<T>) => {
30+
const isFirstRenderRef = useRef(true);
31+
3032
useEffect(() => {
31-
setRecordValue({});
33+
if ((isFirstRenderRef.current && !recordValue) || !isFirstRenderRef.current) {
34+
setRecordValue({});
35+
}
36+
isFirstRenderRef.current = false;
3237
}, [options]);
3338

3439
if (!recordValue) {

src/components/Form/RecordArrayField.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { memo, useEffect } from 'react';
1+
import { memo, useEffect, useRef } from 'react';
22

33
import type { RecordArrayFieldValue, RecordArrayFormField } from '@douglasneuroinformatics/libui-form-types';
44
import { MinusCircleIcon, PlusCircleIcon } from 'lucide-react';
@@ -25,12 +25,16 @@ export const RecordArrayField = memo(function RecordArrayField({
2525
setValue: setArrayValue,
2626
value: arrayValue
2727
}: RecordArrayFieldProps) {
28+
const isFirstRenderRef = useRef(true);
2829
const { t } = useTranslation('libui');
2930

3031
const createNewRecord = () => Object.fromEntries(Object.keys(fieldset).map((fieldName) => [fieldName, undefined]));
3132

3233
useEffect(() => {
33-
setArrayValue([createNewRecord()]);
34+
if ((isFirstRenderRef.current && !arrayValue) || !isFirstRenderRef.current) {
35+
setArrayValue([createNewRecord()]);
36+
}
37+
isFirstRenderRef.current = false;
3438
}, [fieldset]);
3539

3640
if (!arrayValue) {

0 commit comments

Comments
 (0)