@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 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 [fields] = React.useState([
28
- {
29
- id: 'q-name',
30
- fieldType: 'text',
31
- question: 'What is your full name?',
32
- answer: ''
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 fields={fields} />
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
- fields={surveySchema}
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
- // Set schema type for SurveyJS schemas
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.fields = [
111
- {
112
- id: 'q-name',
113
- fieldType: 'text',
114
- question: 'Full Name',
115
- answer: ''
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
- fields=myFields
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
- myFields() {
160
- return [
161
- { id: 'q1', fieldType: 'text', question: 'Name?', answer: '' }
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 (updatedFields) => {
166
- console.log('Fields changed:', updatedFields);
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
- - `fields` - Questionnaire definition array
179
- - `schemaType` - `'inhouse'` (default) or `'surveyjs'`
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.fields` - Set/get questionnaire definition (property)
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` - Set to `'surveyjs'` for SurveyJS schemas (property)
203
- - `renderer.hideUnsupportedFields` - Boolean to hide unsupported types (property)
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
- - `fields` - Questionnaire definition array
209
- - `schemaType` - `'inhouse'` or `'surveyjs'`
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