@mieweb/forms-renderer 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -41
- package/dist/blaze.js +14114 -12749
- package/dist/blaze.js.map +1 -1
- package/dist/blaze.umd.cjs +156 -182
- package/dist/blaze.umd.cjs.map +1 -1
- package/dist/react.js +288 -258
- package/dist/react.js.map +1 -1
- package/dist/standalone.js +14154 -12789
- package/dist/standalone.js.map +1 -1
- package/dist/standalone.umd.cjs +156 -182
- package/dist/standalone.umd.cjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,6 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
Questionnaire renderer with three distribution options: React component, standalone Web Component, or Blaze component for Meteor.
|
|
4
4
|
|
|
5
|
+
## 🆕 New Features
|
|
6
|
+
|
|
7
|
+
### YAML & JSON Auto-Parsing
|
|
8
|
+
Pass YAML strings, JSON strings, or parsed objects:
|
|
9
|
+
```jsx
|
|
10
|
+
// YAML string
|
|
11
|
+
const yamlData = `
|
|
12
|
+
schemaType: mieforms-v1.0
|
|
13
|
+
fields:
|
|
14
|
+
- id: name
|
|
15
|
+
fieldType: text
|
|
16
|
+
question: Name?
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
<QuestionnaireRenderer formData={yamlData} />
|
|
20
|
+
|
|
21
|
+
// JSON string or object also work!
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Schema Auto-Detection
|
|
25
|
+
Schema type is automatically detected - no need to specify:
|
|
26
|
+
```jsx
|
|
27
|
+
<QuestionnaireRenderer
|
|
28
|
+
formData={unknownSchema} // Auto-detects MIE Forms or SurveyJS
|
|
29
|
+
/>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Flexible Styling
|
|
33
|
+
Pass custom CSS classes for styling:
|
|
34
|
+
```jsx
|
|
35
|
+
<QuestionnaireRenderer
|
|
36
|
+
formData={formData}
|
|
37
|
+
className="custom-wrapper p-4"
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
5
41
|
## Examples
|
|
6
42
|
|
|
7
43
|
- [`example-react.jsx`](./examples/example-react.jsx) - React component
|
|
@@ -24,14 +60,17 @@ npm install @mieweb/forms-renderer react react-dom
|
|
|
24
60
|
import { QuestionnaireRenderer, buildQuestionnaireResponse, useFieldsArray } from '@mieweb/forms-renderer';
|
|
25
61
|
|
|
26
62
|
function MyForm() {
|
|
27
|
-
const [
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
63
|
+
const [formData] = React.useState({
|
|
64
|
+
schemaType: 'mieforms-v1.0',
|
|
65
|
+
fields: [
|
|
66
|
+
{
|
|
67
|
+
id: 'q-name',
|
|
68
|
+
fieldType: 'text',
|
|
69
|
+
question: 'What is your full name?',
|
|
70
|
+
answer: ''
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
});
|
|
35
74
|
|
|
36
75
|
const currentFields = useFieldsArray();
|
|
37
76
|
|
|
@@ -42,7 +81,7 @@ function MyForm() {
|
|
|
42
81
|
|
|
43
82
|
return (
|
|
44
83
|
<form onSubmit={handleSubmit}>
|
|
45
|
-
<QuestionnaireRenderer
|
|
84
|
+
<QuestionnaireRenderer formData={formData} />
|
|
46
85
|
<button type="submit">Submit</button>
|
|
47
86
|
</form>
|
|
48
87
|
);
|
|
@@ -65,8 +104,7 @@ function SurveyForm() {
|
|
|
65
104
|
|
|
66
105
|
return (
|
|
67
106
|
<QuestionnaireRenderer
|
|
68
|
-
|
|
69
|
-
schemaType="surveyjs"
|
|
107
|
+
formData={surveySchema}
|
|
70
108
|
hideUnsupportedFields={true}
|
|
71
109
|
/>
|
|
72
110
|
);
|
|
@@ -101,20 +139,23 @@ No peer dependencies required - bundles React internally.
|
|
|
101
139
|
<script>
|
|
102
140
|
const renderer = document.querySelector('questionnaire-renderer');
|
|
103
141
|
|
|
104
|
-
//
|
|
105
|
-
renderer.schemaType = 'surveyjs'
|
|
142
|
+
// Auto-detection enabled by default (or set explicitly)
|
|
143
|
+
// renderer.schemaType = 'mieforms'; // or 'surveyjs'
|
|
106
144
|
|
|
107
|
-
// Hide unsupported field types
|
|
145
|
+
// Hide unsupported field types (default: true)
|
|
108
146
|
renderer.hideUnsupportedFields = true;
|
|
109
147
|
|
|
110
|
-
renderer.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
148
|
+
renderer.formData = {
|
|
149
|
+
schemaType: 'mieforms-v1.0',
|
|
150
|
+
fields: [
|
|
151
|
+
{
|
|
152
|
+
id: 'q-name',
|
|
153
|
+
fieldType: 'text',
|
|
154
|
+
question: 'Full Name',
|
|
155
|
+
answer: ''
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
};
|
|
118
159
|
|
|
119
160
|
document.getElementById('myForm').addEventListener('submit', (e) => {
|
|
120
161
|
e.preventDefault();
|
|
@@ -147,8 +188,7 @@ import '@mieweb/forms-renderer/blaze';
|
|
|
147
188
|
**In your Blaze template:**
|
|
148
189
|
```handlebars
|
|
149
190
|
{{> questionnaireRenderer
|
|
150
|
-
|
|
151
|
-
schemaType="surveyjs"
|
|
191
|
+
formData=myFormData
|
|
152
192
|
hideUnsupportedFields=true
|
|
153
193
|
onChange=handleChange}}
|
|
154
194
|
```
|
|
@@ -156,14 +196,17 @@ import '@mieweb/forms-renderer/blaze';
|
|
|
156
196
|
**Helper example:**
|
|
157
197
|
```javascript
|
|
158
198
|
Template.myTemplate.helpers({
|
|
159
|
-
|
|
160
|
-
return
|
|
161
|
-
|
|
162
|
-
|
|
199
|
+
myFormData() {
|
|
200
|
+
return {
|
|
201
|
+
schemaType: 'mieforms-v1.0',
|
|
202
|
+
fields: [
|
|
203
|
+
{ id: 'q1', fieldType: 'text', question: 'Name?', answer: '' }
|
|
204
|
+
]
|
|
205
|
+
};
|
|
163
206
|
},
|
|
164
207
|
handleChange() {
|
|
165
|
-
return (
|
|
166
|
-
console.log('
|
|
208
|
+
return (updatedFormData) => {
|
|
209
|
+
console.log('Form changed:', updatedFormData);
|
|
167
210
|
};
|
|
168
211
|
}
|
|
169
212
|
});
|
|
@@ -175,12 +218,43 @@ Template.myTemplate.helpers({
|
|
|
175
218
|
|
|
176
219
|
### React Component Props
|
|
177
220
|
|
|
178
|
-
- `
|
|
179
|
-
- `schemaType` - `'
|
|
180
|
-
- `onChange` - Callback when answers change
|
|
221
|
+
- `formData` - Form data object, YAML string, or JSON string (supports auto-parsing)
|
|
222
|
+
- `schemaType` - Optional: `'mieforms'` or `'surveyjs'` (auto-detected if not provided)
|
|
223
|
+
- `onChange` - Callback when answers change (receives complete form data object)
|
|
181
224
|
- `className` - Additional CSS classes
|
|
182
225
|
- `fullHeight` - Full viewport height mode
|
|
183
|
-
- `hideUnsupportedFields` - Hide unsupported field types
|
|
226
|
+
- `hideUnsupportedFields` - Hide unsupported field types (default: `true`)
|
|
227
|
+
|
|
228
|
+
### 🔄 Breaking Changes (v0.1.14)
|
|
229
|
+
|
|
230
|
+
**Prop Rename:**
|
|
231
|
+
```jsx
|
|
232
|
+
// ❌ Before
|
|
233
|
+
<QuestionnaireRenderer fields={fields} />
|
|
234
|
+
|
|
235
|
+
// ✅ After
|
|
236
|
+
<QuestionnaireRenderer formData={formData} />
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**onChange Callback:**
|
|
240
|
+
```jsx
|
|
241
|
+
// ❌ Before
|
|
242
|
+
onChange={(fields) => console.log(fields)}
|
|
243
|
+
|
|
244
|
+
// ✅ After
|
|
245
|
+
onChange={(formData) => console.log(formData)}
|
|
246
|
+
// formData = { schemaType, ...metadata, fields: [...] }
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Default for hideUnsupportedFields:**
|
|
250
|
+
```jsx
|
|
251
|
+
// Before: default was false
|
|
252
|
+
// After: default is true
|
|
253
|
+
<QuestionnaireRenderer
|
|
254
|
+
formData={data}
|
|
255
|
+
hideUnsupportedFields={false} // Explicitly set if you want to show unsupported
|
|
256
|
+
/>
|
|
257
|
+
```
|
|
184
258
|
|
|
185
259
|
### React Helpers
|
|
186
260
|
|
|
@@ -197,20 +271,38 @@ const fhir = buildQuestionnaireResponse(currentFields, 'q-1', 'patient-123');
|
|
|
197
271
|
|
|
198
272
|
### Web Component API
|
|
199
273
|
|
|
200
|
-
- `renderer.
|
|
274
|
+
- `renderer.formData` - Set/get form data (property) - accepts object, YAML, or JSON string
|
|
201
275
|
- `renderer.onChange` - Set change callback (property)
|
|
202
|
-
- `renderer.schemaType` -
|
|
203
|
-
- `renderer.hideUnsupportedFields` - Boolean to hide unsupported types (
|
|
276
|
+
- `renderer.schemaType` - Optional: `'mieforms'` or `'surveyjs'` (auto-detected if not set)
|
|
277
|
+
- `renderer.hideUnsupportedFields` - Boolean to hide unsupported types (default: `true`)
|
|
204
278
|
- `renderer.getQuestionnaireResponse(id, subjectId)` - Get FHIR response (method)
|
|
205
279
|
|
|
280
|
+
**Migration:**
|
|
281
|
+
```js
|
|
282
|
+
// ❌ Before
|
|
283
|
+
renderer.fields = [...];
|
|
284
|
+
|
|
285
|
+
// ✅ After
|
|
286
|
+
renderer.formData = { schemaType: 'mieforms-v1.0', fields: [...] };
|
|
287
|
+
```
|
|
288
|
+
|
|
206
289
|
### Blaze Component Data Context
|
|
207
290
|
|
|
208
|
-
- `
|
|
209
|
-
- `schemaType` - `'
|
|
210
|
-
- `onChange` - Change callback function
|
|
211
|
-
- `hideUnsupportedFields` - Boolean to hide unsupported types
|
|
291
|
+
- `formData` - Form data object (with `schemaType` and `fields`)
|
|
292
|
+
- `schemaType` - Optional: `'mieforms'` or `'surveyjs'` (auto-detected if not provided)
|
|
293
|
+
- `onChange` - Change callback function (receives complete form data object)
|
|
294
|
+
- `hideUnsupportedFields` - Boolean to hide unsupported types (default: `true`)
|
|
212
295
|
- `fullHeight` - Boolean for full height mode
|
|
213
296
|
|
|
297
|
+
**Migration:**
|
|
298
|
+
```handlebars
|
|
299
|
+
<!-- ❌ Before -->
|
|
300
|
+
{{> questionnaireRenderer fields=myFields}}
|
|
301
|
+
|
|
302
|
+
<!-- ✅ After -->
|
|
303
|
+
{{> questionnaireRenderer formData=myFormData}}
|
|
304
|
+
```
|
|
305
|
+
|
|
214
306
|
## Field Types
|
|
215
307
|
|
|
216
308
|
- `text` - Single-line text input
|