@@ -13,6 +13,7 @@ export const FhirJsonForm = (
13
13
fhirQuestionnaire : R4 . IQuestionnaire
14
14
) : FhirForm => {
15
15
let ALL_PROPERTIES : any = { } ;
16
+ let requiredProperties : string [ ] = [ ] ;
16
17
let UISchema : any = { } ;
17
18
18
19
let fhirQuestionnaireResponse : R4 . IQuestionnaireResponse = {
@@ -53,21 +54,35 @@ export const FhirJsonForm = (
53
54
myProperty
54
55
] = GetItemProperties ( groupItem ) ;
55
56
57
+ if ( groupItem . required ) {
58
+ if ( ALL_PROPERTIES [ groupProperty ] [ 'required' ] === undefined ) {
59
+ ALL_PROPERTIES [ groupProperty ] [ 'required' ] = [ ]
60
+ }
61
+ ALL_PROPERTIES [ groupProperty ] [ 'required' ] . push ( myProperty )
62
+ }
63
+
56
64
if ( GetWidget ( groupItem ) !== '' ) {
57
65
UISchema [ groupProperty ] [ myProperty ] = {
58
66
'ui:widget' : GetWidget ( groupItem ) ,
59
67
} ;
60
68
}
61
69
62
- if ( GetUIOptions ( groupItem ) !== '' ) {
70
+ const uiOptions = GetUIOptions ( groupItem )
71
+ if ( uiOptions !== '' ) {
63
72
UISchema [ groupProperty ] [ myProperty ] = {
64
- 'ui:options' : GetUIOptions ( groupItem ) ,
73
+ 'ui:options' : uiOptions ,
65
74
} ;
75
+
76
+ if ( uiOptions . unit ) {
77
+ UISchema [ groupProperty ] [ myProperty ] [ 'ui:placeholder' ] = uiOptions . unit
78
+ }
66
79
}
67
80
68
81
fhirQuestionnaireResponse . item ?. push ( CreateResponseItem ( groupItem ) ) ;
69
82
} ) ;
70
83
84
+ item . required && requiredProperties . push ( groupProperty )
85
+
71
86
// Just push the fields if not a group
72
87
} else {
73
88
let myProperty =
@@ -88,13 +103,16 @@ export const FhirJsonForm = (
88
103
}
89
104
90
105
fhirQuestionnaireResponse . item ?. push ( CreateResponseItem ( item ) ) ;
106
+
107
+ item . required && requiredProperties . push ( myProperty )
91
108
}
92
109
} ) ;
93
110
94
111
let fhirJsonSchema : FhirJsonSchema = {
95
112
type : 'object' ,
96
113
title : fhirQuestionnaire . id ?. toString ( ) ,
97
114
properties : ALL_PROPERTIES ,
115
+ required : requiredProperties ,
98
116
} ;
99
117
let fhirForm : FhirForm = {
100
118
model : fhirQuestionnaireResponse ,
@@ -244,9 +262,19 @@ const GetControlType = (item: R4.IQuestionnaire_Item) => {
244
262
return 'array'
245
263
}
246
264
}
265
+
247
266
if ( item . type === R4 . Questionnaire_ItemTypeKind . _boolean ) {
248
267
return 'boolean' ;
249
268
}
269
+
270
+ if ( item . type == R4 . Questionnaire_ItemTypeKind . _decimal ) {
271
+ return 'number' ;
272
+ }
273
+
274
+ if ( item . type == R4 . Questionnaire_ItemTypeKind . _integer ) {
275
+ return 'integer' ;
276
+ }
277
+
250
278
return 'string' ;
251
279
} ;
252
280
@@ -288,7 +316,7 @@ const CreateResponseItem = (item: R4.IQuestionnaire_Item) => {
288
316
case R4 . Questionnaire_ItemTypeKind . _openChoice :
289
317
const option = ( item . answerOption || [ ] ) [ 0 ]
290
318
ans [ key ] = Object
291
- . keys ( option . valueCoding || { } )
319
+ . keys ( option ? .valueCoding || { } )
292
320
. reduce ( ( acc , prop ) => ( { ...acc , [ prop ] : '' } ) , { } )
293
321
break ;
294
322
0 commit comments