@@ -193,7 +193,7 @@ function isGroup(question: QuestionnaireItem) {
193193
194194function isFormGroupItems (
195195 question : QuestionnaireItem ,
196- answers : FormGroupItems | FormAnswerItems [ ] ,
196+ answers : FormGroupItems | ( FormAnswerItems | undefined ) [ ] ,
197197) : answers is FormGroupItems {
198198 return isGroup ( question ) && _ . isPlainObject ( answers ) ;
199199}
@@ -249,21 +249,19 @@ function mapFormToResponseRecursive(
249249 } , acc ) ;
250250 }
251251
252- const qrItemAnswers = answers
253- . filter ( ( answer ) => ! isAnswerValueEmpty ( answer . value ) )
254- . reduce ( ( answersAcc , answer ) => {
255- const items = hasSubAnswerItems ( answer . items )
256- ? mapFormToResponseRecursive ( answer . items , question . item ?? [ ] )
257- : [ ] ;
252+ const qrItemAnswers = cleanFormAnswerItems ( answers ) . reduce ( ( answersAcc , answer ) => {
253+ const items = hasSubAnswerItems ( answer . items )
254+ ? mapFormToResponseRecursive ( answer . items , question . item ?? [ ] )
255+ : [ ] ;
258256
259- return [
260- ...answersAcc ,
261- {
262- ...toFHIRAnswerValue ( answer . value ! , 'value' ) ,
263- ...( items . length ? { item : items } : { } ) ,
264- } ,
265- ] ;
266- } , [ ] as QuestionnaireResponseItemAnswer [ ] ) ;
257+ return [
258+ ...answersAcc ,
259+ {
260+ ...toFHIRAnswerValue ( answer . value ! , 'value' ) ,
261+ ...( items . length ? { item : items } : { } ) ,
262+ } ,
263+ ] ;
264+ } , [ ] as QuestionnaireResponseItemAnswer [ ] ) ;
267265
268266 if ( ! qrItemAnswers . length ) {
269267 return acc ;
@@ -386,7 +384,7 @@ export function mapResponseToForm(resource: QuestionnaireResponse, questionnaire
386384 return mapResponseToFormRecursive ( resource . item ?? [ ] , questionnaire . item ?? [ ] ) ;
387385}
388386
389- export function findAnswersForQuestionsRecursive ( linkId : string , values ?: FormItems ) : any | null {
387+ function findAnswersForQuestionsRecursive ( linkId : string , values ?: FormItems ) : any | null {
390388 if ( values && _ . has ( values , linkId ) ) {
391389 return values [ linkId ] ;
392390 }
@@ -410,7 +408,7 @@ export function findAnswersForQuestionsRecursive(linkId: string, values?: FormIt
410408 return acc2 ;
411409 }
412410
413- return findAnswersForQuestionsRecursive ( linkId , v2 . items ) ;
411+ return findAnswersForQuestionsRecursive ( linkId , v2 ? .items ) ;
414412 } ,
415413 null ,
416414 ) ;
@@ -434,7 +432,7 @@ export function findAnswersForQuestionsRecursive(linkId: string, values?: FormIt
434432 ) ;
435433}
436434
437- function findAnswersForQuestion ( linkId : string , parentPath : string [ ] , values : FormItems ) : Array < FormAnswerItems > {
435+ export function findAnswersForQuestion ( linkId : string , parentPath : string [ ] , values : FormItems ) : FormAnswerItems [ ] {
438436 const p = _ . cloneDeep ( parentPath ) ;
439437
440438 // Go up
@@ -447,15 +445,15 @@ function findAnswersForQuestion(linkId: string, parentPath: string[], values: Fo
447445 const parentGroup = _ . get ( values , [ ...p , part ] ) ;
448446
449447 if ( typeof parentGroup === 'object' && linkId in parentGroup ) {
450- return parentGroup [ linkId ] ;
448+ return cleanFormAnswerItems ( parentGroup [ linkId ] ) ;
451449 }
452450 }
453451 }
454452
455453 // Go down
456454 const answers = findAnswersForQuestionsRecursive ( linkId , values ) ;
457455
458- return answers ? answers : [ ] ;
456+ return answers ? cleanFormAnswerItems ( answers ) : [ ] ;
459457}
460458
461459export function compareValue ( firstAnswerValue : AnswerValue , secondAnswerValue : AnswerValue ) {
@@ -696,21 +694,19 @@ function removeDisabledAnswersRecursive(args: RemoveDisabledAnswersRecursiveArgs
696694
697695 return {
698696 ...acc ,
699- [ linkId ! ] : answers
700- . filter ( ( answer ) => ! isAnswerValueEmpty ( answer . value ) )
701- . reduce ( ( answersAcc , answer , index ) => {
702- const items = hasSubAnswerItems ( answer . items )
703- ? removeDisabledAnswersRecursive ( {
704- questionnaireItems : questionnaireItem . item ?? [ ] ,
705- parentPath : [ ...args . parentPath , linkId ! , index . toString ( ) , 'items' ] ,
706- answersItems : answer . items ,
707- initialValues : { ...values , [ linkId ! ] : [ ...answersAcc , { ...answer , items : [ ] } ] } ,
708- context : args . context ,
709- } )
710- : { } ;
711-
712- return [ ...answersAcc , { ...answer , items } ] ;
713- } , [ ] as any ) ,
697+ [ linkId ! ] : cleanFormAnswerItems ( answers ) . reduce ( ( answersAcc , answer , index ) => {
698+ const items = hasSubAnswerItems ( answer . items )
699+ ? removeDisabledAnswersRecursive ( {
700+ questionnaireItems : questionnaireItem . item ?? [ ] ,
701+ parentPath : [ ...args . parentPath , linkId ! , index . toString ( ) , 'items' ] ,
702+ answersItems : answer . items ,
703+ initialValues : { ...values , [ linkId ! ] : [ ...answersAcc , { ...answer , items : [ ] } ] } ,
704+ context : args . context ,
705+ } )
706+ : { } ;
707+
708+ return [ ...answersAcc , { ...answer , items } ] ;
709+ } , [ ] as any ) ,
714710 } ;
715711 } , { } as any ) ;
716712}
@@ -871,6 +867,10 @@ export function isAnswerValueEmpty(value: AnswerValue | undefined | null) {
871867 return isValueEmpty ( value ) || _ . every ( _ . mapValues ( value , isValueEmpty ) ) ;
872868}
873869
870+ export function cleanFormAnswerItems ( answerItems : ( FormAnswerItems | undefined ) [ ] ) : FormAnswerItems [ ] {
871+ return answerItems . filter ( ( answer ) => ! ! answer ) . filter ( ( answer ) => ! isAnswerValueEmpty ( answer . value ) ) ;
872+ }
873+
874874export function isValueEmpty ( value : any ) {
875875 if ( _ . isNaN ( value ) ) {
876876 console . warn (
0 commit comments