@@ -47,12 +47,13 @@ const Repeat: React.FC<FormFieldInputProps> = ({ field }) => {
4747
4848 const handleAdd = useCallback (
4949 ( counter : number ) => {
50+ const clonedFieldsBuffer : FormField [ ] = [ ] ;
5051 function evaluateExpressions ( field : FormField ) {
5152 if ( field . hide ?. hideWhenExpression ) {
5253 field . isHidden = evaluateExpression (
5354 field . hide . hideWhenExpression ,
5455 { value : field , type : 'field' } ,
55- formFields ,
56+ [ ... formFields , ... clonedFieldsBuffer ] ,
5657 getValues ( ) ,
5758 {
5859 mode : sessionMode ,
@@ -64,7 +65,7 @@ const Repeat: React.FC<FormFieldInputProps> = ({ field }) => {
6465 evaluateAsyncExpression (
6566 field . questionOptions . calculate ?. calculateExpression ,
6667 { value : field , type : 'field' } ,
67- formFields ,
68+ [ ... formFields , ... clonedFieldsBuffer ] ,
6869 getValues ( ) ,
6970 {
7071 mode : sessionMode ,
@@ -80,16 +81,19 @@ const Repeat: React.FC<FormFieldInputProps> = ({ field }) => {
8081 }
8182
8283 const clonedField = cloneRepeatField ( field , null , counter ) ;
83- // run necessary expressions
84+ clonedFieldsBuffer . push ( clonedField ) ;
85+
86+ // Handle nested questions
8487 if ( clonedField . type === 'obsGroup' ) {
8588 clonedField . questions ?. forEach ( ( childField ) => {
86- evaluateExpressions ( childField ) ;
87- addFormField ( childField ) ;
89+ clonedFieldsBuffer . push ( childField ) ;
8890 } ) ;
89- } else {
90- evaluateExpressions ( clonedField ) ;
9191 }
92- addFormField ( clonedField ) ;
92+
93+ clonedFieldsBuffer . forEach ( ( field ) => {
94+ evaluateExpressions ( field ) ;
95+ addFormField ( field ) ;
96+ } ) ;
9397 setRows ( [ ...rows , clonedField ] ) ;
9498 } ,
9599 [ formFields , field , rows , context ] ,
0 commit comments