@ea-lab/reactive-json-docs 0.1.2
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-npm.md +49 -0
- package/README.md +86 -0
- package/package.json +79 -0
- package/public/rjbuild/component-doc/chartjs/components.yaml +252 -0
- package/public/rjbuild/component-doc/chartjs/overview.yaml +51 -0
- package/public/rjbuild/component-doc/core/action/HashChangeListener.md +90 -0
- package/public/rjbuild/component-doc/core/action/HashChangeListener.yaml +124 -0
- package/public/rjbuild/component-doc/core/action/Hide.md +22 -0
- package/public/rjbuild/component-doc/core/action/Hide.yaml +60 -0
- package/public/rjbuild/component-doc/core/action/MessageListener.md +93 -0
- package/public/rjbuild/component-doc/core/action/MessageListener.yaml +153 -0
- package/public/rjbuild/component-doc/core/action/Popover.md +26 -0
- package/public/rjbuild/component-doc/core/action/Popover.yaml +100 -0
- package/public/rjbuild/component-doc/core/action/ReactOnEvent.md +81 -0
- package/public/rjbuild/component-doc/core/action/ReactOnEvent.yaml +133 -0
- package/public/rjbuild/component-doc/core/action/Redirect.md +20 -0
- package/public/rjbuild/component-doc/core/action/Redirect.yaml +68 -0
- package/public/rjbuild/component-doc/core/action/Tooltip.md +22 -0
- package/public/rjbuild/component-doc/core/action/Tooltip.yaml +90 -0
- package/public/rjbuild/component-doc/core/action/VisuallyHide.md +21 -0
- package/public/rjbuild/component-doc/core/action/VisuallyHide.yaml +62 -0
- package/public/rjbuild/component-doc/core/action/index.md +214 -0
- package/public/rjbuild/component-doc/core/action/index.yaml +278 -0
- package/public/rjbuild/component-doc/core/element/form/CheckBoxField.md +276 -0
- package/public/rjbuild/component-doc/core/element/form/CheckBoxField.yaml +338 -0
- package/public/rjbuild/component-doc/core/element/form/DateField.md +189 -0
- package/public/rjbuild/component-doc/core/element/form/DateField.yaml +264 -0
- package/public/rjbuild/component-doc/core/element/form/NumberField.md +136 -0
- package/public/rjbuild/component-doc/core/element/form/NumberField.yaml +103 -0
- package/public/rjbuild/component-doc/core/element/form/SelectField.md +304 -0
- package/public/rjbuild/component-doc/core/element/form/SelectField.yaml +360 -0
- package/public/rjbuild/component-doc/core/element/form/TextAreaField.md +134 -0
- package/public/rjbuild/component-doc/core/element/form/TextAreaField.yaml +146 -0
- package/public/rjbuild/component-doc/core/element/form/TextField.md +129 -0
- package/public/rjbuild/component-doc/core/element/form/TextField.yaml +147 -0
- package/public/rjbuild/component-doc/core/element/form/formElementsCommon.md +106 -0
- package/public/rjbuild/component-doc/core/element/form/index.md +50 -0
- package/public/rjbuild/component-doc/core/element/form/index.yaml +96 -0
- package/public/rjbuild/component-doc/core/element/html/AccordionItem.yaml +47 -0
- package/public/rjbuild/component-doc/core/element/html/FolderSortableTree.yaml +81 -0
- package/public/rjbuild/component-doc/core/element/html/FormatNumeral.yaml +58 -0
- package/public/rjbuild/component-doc/core/element/html/Html.yaml +67 -0
- package/public/rjbuild/component-doc/core/element/html/LabelFromValue.yaml +54 -0
- package/public/rjbuild/component-doc/core/element/html/Modal.yaml +93 -0
- package/public/rjbuild/component-doc/core/element/html/PreformattedMarkup.yaml +37 -0
- package/public/rjbuild/component-doc/core/element/html/SortableTreeItemCollapseButton.yaml +92 -0
- package/public/rjbuild/component-doc/core/element/html/Tabs.yaml +57 -0
- package/public/rjbuild/component-doc/core/element/special/BootstrapElement.md +17 -0
- package/public/rjbuild/component-doc/core/element/special/BootstrapElement.yaml +18 -0
- package/public/rjbuild/component-doc/core/element/special/Count.md +37 -0
- package/public/rjbuild/component-doc/core/element/special/Count.yaml +325 -0
- package/public/rjbuild/component-doc/core/element/special/DataFilter.md +149 -0
- package/public/rjbuild/component-doc/core/element/special/DataFilter.yaml +315 -0
- package/public/rjbuild/component-doc/core/element/special/DelayedActions.md +51 -0
- package/public/rjbuild/component-doc/core/element/special/DelayedActions.yaml +55 -0
- package/public/rjbuild/component-doc/core/element/special/PageControls.md +126 -0
- package/public/rjbuild/component-doc/core/element/special/PageControls.yaml +133 -0
- package/public/rjbuild/component-doc/core/element/special/Phantom.md +31 -0
- package/public/rjbuild/component-doc/core/element/special/Phantom.yaml +34 -0
- package/public/rjbuild/component-doc/core/element/special/ReactiveJsonSubroot.md +27 -0
- package/public/rjbuild/component-doc/core/element/special/ReactiveJsonSubroot.yaml +51 -0
- package/public/rjbuild/component-doc/core/element/special/Switch.md +262 -0
- package/public/rjbuild/component-doc/core/element/special/Switch.yaml +348 -0
- package/public/rjbuild/component-doc/core/example/accordion.md +96 -0
- package/public/rjbuild/component-doc/core/example/accordion.yaml +64 -0
- package/public/rjbuild/component-doc/core/example/dynamic-content.md +197 -0
- package/public/rjbuild/component-doc/core/example/dynamic-content.yaml +237 -0
- package/public/rjbuild/component-doc/core/example/html.md +66 -0
- package/public/rjbuild/component-doc/core/example/html.yaml +83 -0
- package/public/rjbuild/component-doc/core/example/website.yaml +1663 -0
- package/public/rjbuild/component-doc/core/reaction/addData.md +96 -0
- package/public/rjbuild/component-doc/core/reaction/addData.yaml +133 -0
- package/public/rjbuild/component-doc/core/reaction/fetchData.md +60 -0
- package/public/rjbuild/component-doc/core/reaction/fetchData.yaml +156 -0
- package/public/rjbuild/component-doc/core/reaction/index.md +236 -0
- package/public/rjbuild/component-doc/core/reaction/index.yaml +254 -0
- package/public/rjbuild/component-doc/core/reaction/moveData.md +68 -0
- package/public/rjbuild/component-doc/core/reaction/moveData.yaml +71 -0
- package/public/rjbuild/component-doc/core/reaction/postMessage.md +63 -0
- package/public/rjbuild/component-doc/core/reaction/postMessage.yaml +68 -0
- package/public/rjbuild/component-doc/core/reaction/redirectNow.md +37 -0
- package/public/rjbuild/component-doc/core/reaction/redirectNow.yaml +37 -0
- package/public/rjbuild/component-doc/core/reaction/removeData.md +78 -0
- package/public/rjbuild/component-doc/core/reaction/removeData.yaml +56 -0
- package/public/rjbuild/component-doc/core/reaction/setClipboardData.md +44 -0
- package/public/rjbuild/component-doc/core/reaction/setClipboardData.yaml +41 -0
- package/public/rjbuild/component-doc/core/reaction/setData.md +93 -0
- package/public/rjbuild/component-doc/core/reaction/setData.yaml +85 -0
- package/public/rjbuild/component-doc/core/reaction/submitData.md +138 -0
- package/public/rjbuild/component-doc/core/reaction/submitData.yaml +141 -0
- package/public/rjbuild/component-doc/core/reaction/triggerEvent.md +59 -0
- package/public/rjbuild/component-doc/core/reaction/triggerEvent.yaml +59 -0
- package/public/rjbuild/component-doc/index.yaml +13 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
renderView:
|
|
2
|
+
- type: Markdown
|
|
3
|
+
content: |
|
|
4
|
+
# CheckBoxField
|
|
5
|
+
|
|
6
|
+
The `CheckBoxField` component renders checkbox or radio button groups using React Bootstrap. It supports both single and multiple selections, dynamic options, and intelligent data storage based on the control type and configuration.
|
|
7
|
+
|
|
8
|
+
## Properties
|
|
9
|
+
|
|
10
|
+
- `dataLocation` (string, optional): Path to bind the field value in the data context
|
|
11
|
+
- `defaultFieldValue` (any, optional): Default value when no data is present
|
|
12
|
+
- `options` (array, optional): Static array of option objects with `label` and `value` properties
|
|
13
|
+
- `dynamicOptions` (string, optional): Template path to dynamic options array
|
|
14
|
+
- `controlType` (string, optional): Type of control - "checkbox" (default) or "radio"
|
|
15
|
+
- `multiple` (boolean, optional): Force array storage for checkboxes (default: auto-detected)
|
|
16
|
+
- `attributes` (object, optional): Attributes applied to the Form.Group container
|
|
17
|
+
- `actions` (array, optional): Actions to execute based on field state
|
|
18
|
+
|
|
19
|
+
## Option Format
|
|
20
|
+
|
|
21
|
+
Each option object must have:
|
|
22
|
+
- `label` (string|object): Display text or Reactive-JSON content for the option
|
|
23
|
+
- `value` (any): The actual value to store when selected
|
|
24
|
+
- `attributes` (object, optional): Additional attributes for the specific option
|
|
25
|
+
|
|
26
|
+
## Data Storage Modes
|
|
27
|
+
|
|
28
|
+
The component uses different data storage strategies:
|
|
29
|
+
|
|
30
|
+
### Single Value Mode
|
|
31
|
+
- Used for radio buttons (`controlType: "radio"`)
|
|
32
|
+
- Used for single checkbox when `options.length === 1` and `multiple` is not set
|
|
33
|
+
- Stores the selected value directly
|
|
34
|
+
|
|
35
|
+
### Array Mode
|
|
36
|
+
- Used for multiple checkboxes when `options.length > 1` or `multiple: true`
|
|
37
|
+
- Stores selected values in an array
|
|
38
|
+
- Automatically manages array additions and removals
|
|
39
|
+
|
|
40
|
+
- type: RjBuildDescriber
|
|
41
|
+
title: "Multiple Checkboxes"
|
|
42
|
+
description: "CheckBoxField with multiple options storing values in an array"
|
|
43
|
+
toDescribe:
|
|
44
|
+
renderView:
|
|
45
|
+
- type: CheckBoxField
|
|
46
|
+
dataLocation: ~.interests
|
|
47
|
+
options:
|
|
48
|
+
- label: "Technology"
|
|
49
|
+
value: "tech"
|
|
50
|
+
- label: "Sports"
|
|
51
|
+
value: "sports"
|
|
52
|
+
- label: "Music"
|
|
53
|
+
value: "music"
|
|
54
|
+
- label: "Travel"
|
|
55
|
+
value: "travel"
|
|
56
|
+
data:
|
|
57
|
+
interests:
|
|
58
|
+
- sports
|
|
59
|
+
- travel
|
|
60
|
+
|
|
61
|
+
- type: RjBuildDescriber
|
|
62
|
+
title: "Radio Buttons"
|
|
63
|
+
description: "CheckBoxField as radio buttons for single selection"
|
|
64
|
+
toDescribe:
|
|
65
|
+
renderView:
|
|
66
|
+
- type: CheckBoxField
|
|
67
|
+
dataLocation: ~.priority
|
|
68
|
+
controlType: "radio"
|
|
69
|
+
options:
|
|
70
|
+
- label: "Low"
|
|
71
|
+
value: "low"
|
|
72
|
+
- label: "Medium"
|
|
73
|
+
value: "medium"
|
|
74
|
+
- label: "High"
|
|
75
|
+
value: "high"
|
|
76
|
+
- label: "Critical"
|
|
77
|
+
value: "critical"
|
|
78
|
+
- type: div
|
|
79
|
+
content:
|
|
80
|
+
- "Selected priority: "
|
|
81
|
+
- type: strong
|
|
82
|
+
content: ~.priority
|
|
83
|
+
data:
|
|
84
|
+
priority: ""
|
|
85
|
+
|
|
86
|
+
- type: RjBuildDescriber
|
|
87
|
+
title: "Single Checkbox"
|
|
88
|
+
description: "Single checkbox for boolean values"
|
|
89
|
+
toDescribe:
|
|
90
|
+
renderView:
|
|
91
|
+
- type: CheckBoxField
|
|
92
|
+
dataLocation: ~.acceptTerms
|
|
93
|
+
options:
|
|
94
|
+
- label: "I accept the terms and conditions"
|
|
95
|
+
value: true
|
|
96
|
+
- type: CheckBoxField
|
|
97
|
+
dataLocation: ~.newsletter
|
|
98
|
+
options:
|
|
99
|
+
- label: "Subscribe to newsletter"
|
|
100
|
+
value: true
|
|
101
|
+
- type: div
|
|
102
|
+
attributes:
|
|
103
|
+
style:
|
|
104
|
+
marginTop: "20px"
|
|
105
|
+
padding: "10px"
|
|
106
|
+
backgroundColor: "#f8f9fa"
|
|
107
|
+
borderRadius: "5px"
|
|
108
|
+
content:
|
|
109
|
+
- type: strong
|
|
110
|
+
content: "Current Values:"
|
|
111
|
+
- type: div
|
|
112
|
+
content:
|
|
113
|
+
- "Terms accepted: "
|
|
114
|
+
- type: span
|
|
115
|
+
content: "✓ Yes"
|
|
116
|
+
attributes:
|
|
117
|
+
style:
|
|
118
|
+
color: "green"
|
|
119
|
+
actions:
|
|
120
|
+
- what: hide
|
|
121
|
+
when: ~.acceptTerms
|
|
122
|
+
isNot: true
|
|
123
|
+
- type: span
|
|
124
|
+
content: "✗ No"
|
|
125
|
+
attributes:
|
|
126
|
+
style:
|
|
127
|
+
color: "red"
|
|
128
|
+
actions:
|
|
129
|
+
- what: hide
|
|
130
|
+
when: ~.acceptTerms
|
|
131
|
+
is: true
|
|
132
|
+
- type: div
|
|
133
|
+
content:
|
|
134
|
+
- "Newsletter: "
|
|
135
|
+
- type: span
|
|
136
|
+
content: "✓ Yes"
|
|
137
|
+
attributes:
|
|
138
|
+
style:
|
|
139
|
+
color: "green"
|
|
140
|
+
actions:
|
|
141
|
+
- what: hide
|
|
142
|
+
when: ~.newsletter
|
|
143
|
+
isNot: true
|
|
144
|
+
- type: span
|
|
145
|
+
content: "✗ No"
|
|
146
|
+
attributes:
|
|
147
|
+
style:
|
|
148
|
+
color: "red"
|
|
149
|
+
actions:
|
|
150
|
+
- what: hide
|
|
151
|
+
when: ~.newsletter
|
|
152
|
+
is: true
|
|
153
|
+
data:
|
|
154
|
+
acceptTerms: false
|
|
155
|
+
newsletter: false
|
|
156
|
+
|
|
157
|
+
- type: Markdown
|
|
158
|
+
content: |
|
|
159
|
+
## Value Types Limitations
|
|
160
|
+
|
|
161
|
+
**Important**: CheckBoxField has limitations with non-string value types due to HTML input behavior:
|
|
162
|
+
|
|
163
|
+
- ✅ **String values**: Work perfectly (`"tech"`, `"sports"`, etc.)
|
|
164
|
+
- ✅ **Boolean values**: Work for single checkboxes (`true`/`false`)
|
|
165
|
+
- ❌ **Numeric values**: May cause issues due to string conversion in HTML inputs
|
|
166
|
+
- ❌ **Complex objects**: Not supported in array mode
|
|
167
|
+
|
|
168
|
+
**Recommendation**: Use string values for reliability. Numeric and complex value type support may be improved in future versions.
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
# ✅ Recommended - String values
|
|
172
|
+
options:
|
|
173
|
+
- label: "Priority 1"
|
|
174
|
+
value: "priority_1"
|
|
175
|
+
- label: "Priority 2"
|
|
176
|
+
value: "priority_2"
|
|
177
|
+
|
|
178
|
+
# ❌ Avoid - Numeric values may cause issues
|
|
179
|
+
options:
|
|
180
|
+
- label: "Priority 1"
|
|
181
|
+
value: 1
|
|
182
|
+
- label: "Priority 2"
|
|
183
|
+
value: 2
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
- type: RjBuildDescriber
|
|
187
|
+
title: "Dynamic Options"
|
|
188
|
+
description:
|
|
189
|
+
type: Markdown
|
|
190
|
+
content: |
|
|
191
|
+
CheckBoxField with conditional display using `dynamicOptions` and `hide` actions.
|
|
192
|
+
|
|
193
|
+
**Technique**: Since dynamic path selection like `~.data[~.key]` is not supported,
|
|
194
|
+
we create one CheckBoxField per category and use conditional `hide` actions to show
|
|
195
|
+
only the relevant one based on the selection.
|
|
196
|
+
toDescribe:
|
|
197
|
+
renderView:
|
|
198
|
+
- type: SelectField
|
|
199
|
+
dataLocation: ~.selectedCategory
|
|
200
|
+
label: "Select Category to see available skills:"
|
|
201
|
+
options:
|
|
202
|
+
- label: "Choose category"
|
|
203
|
+
value: ""
|
|
204
|
+
- label: "Technology"
|
|
205
|
+
value: "technology"
|
|
206
|
+
- label: "Business"
|
|
207
|
+
value: "business"
|
|
208
|
+
- label: "Creative"
|
|
209
|
+
value: "creative"
|
|
210
|
+
- type: CheckBoxField
|
|
211
|
+
dataLocation: ~.techSkills
|
|
212
|
+
dynamicOptions: ~.skillCategories.technology
|
|
213
|
+
actions:
|
|
214
|
+
- what: hide
|
|
215
|
+
when: ~.selectedCategory
|
|
216
|
+
isNot: "technology"
|
|
217
|
+
- type: CheckBoxField
|
|
218
|
+
dataLocation: ~.businessSkills
|
|
219
|
+
dynamicOptions: ~.skillCategories.business
|
|
220
|
+
actions:
|
|
221
|
+
- what: hide
|
|
222
|
+
when: ~.selectedCategory
|
|
223
|
+
isNot: "business"
|
|
224
|
+
- type: CheckBoxField
|
|
225
|
+
dataLocation: ~.creativeSkills
|
|
226
|
+
dynamicOptions: ~.skillCategories.creative
|
|
227
|
+
actions:
|
|
228
|
+
- what: hide
|
|
229
|
+
when: ~.selectedCategory
|
|
230
|
+
isNot: "creative"
|
|
231
|
+
data:
|
|
232
|
+
selectedCategory: ""
|
|
233
|
+
techSkills: []
|
|
234
|
+
businessSkills: []
|
|
235
|
+
creativeSkills: []
|
|
236
|
+
skillCategories:
|
|
237
|
+
technology:
|
|
238
|
+
- label: "JavaScript"
|
|
239
|
+
value: "javascript"
|
|
240
|
+
- label: "Python"
|
|
241
|
+
value: "python"
|
|
242
|
+
- label: "React"
|
|
243
|
+
value: "react"
|
|
244
|
+
- label: "Node.js"
|
|
245
|
+
value: "nodejs"
|
|
246
|
+
business:
|
|
247
|
+
- label: "Project Management"
|
|
248
|
+
value: "pm"
|
|
249
|
+
- label: "Marketing"
|
|
250
|
+
value: "marketing"
|
|
251
|
+
- label: "Sales"
|
|
252
|
+
value: "sales"
|
|
253
|
+
- label: "Finance"
|
|
254
|
+
value: "finance"
|
|
255
|
+
creative:
|
|
256
|
+
- label: "Graphic Design"
|
|
257
|
+
value: "design"
|
|
258
|
+
- label: "Photography"
|
|
259
|
+
value: "photo"
|
|
260
|
+
- label: "Writing"
|
|
261
|
+
value: "writing"
|
|
262
|
+
- label: "Video Editing"
|
|
263
|
+
value: "video"
|
|
264
|
+
|
|
265
|
+
- type: RjBuildDescriber
|
|
266
|
+
title: "Option Attributes"
|
|
267
|
+
description: "CheckBoxField with custom attributes on options"
|
|
268
|
+
toDescribe:
|
|
269
|
+
renderView:
|
|
270
|
+
- type: CheckBoxField
|
|
271
|
+
dataLocation: ~.notifications
|
|
272
|
+
options:
|
|
273
|
+
- label: "Email notifications"
|
|
274
|
+
value: "email"
|
|
275
|
+
attributes:
|
|
276
|
+
style:
|
|
277
|
+
color: "blue"
|
|
278
|
+
- label: "SMS notifications (premium feature)"
|
|
279
|
+
value: "sms"
|
|
280
|
+
attributes:
|
|
281
|
+
disabled: true
|
|
282
|
+
title: "This feature requires a premium subscription"
|
|
283
|
+
- label: "Push notifications"
|
|
284
|
+
value: "push"
|
|
285
|
+
attributes:
|
|
286
|
+
style:
|
|
287
|
+
fontWeight: "bold"
|
|
288
|
+
- type: div
|
|
289
|
+
attributes:
|
|
290
|
+
style:
|
|
291
|
+
marginTop: "20px"
|
|
292
|
+
padding: "10px"
|
|
293
|
+
backgroundColor: "#f8f9fa"
|
|
294
|
+
borderRadius: "5px"
|
|
295
|
+
content:
|
|
296
|
+
- type: strong
|
|
297
|
+
content: "Selected Notifications:"
|
|
298
|
+
- type: div
|
|
299
|
+
content:
|
|
300
|
+
- "Current: "
|
|
301
|
+
- ~.notifications
|
|
302
|
+
- type: div
|
|
303
|
+
content: "Note: SMS is disabled (premium feature)"
|
|
304
|
+
attributes:
|
|
305
|
+
style:
|
|
306
|
+
fontSize: "12px"
|
|
307
|
+
color: "#666"
|
|
308
|
+
data:
|
|
309
|
+
notifications: []
|
|
310
|
+
|
|
311
|
+
- type: Markdown
|
|
312
|
+
content: |
|
|
313
|
+
## Limitations
|
|
314
|
+
|
|
315
|
+
### Value Types
|
|
316
|
+
- **Numeric values**: May cause issues due to string conversion in HTML input elements
|
|
317
|
+
- **Complex objects**: Cannot be used as option values in array mode
|
|
318
|
+
- **Recommendation**: Use string values for most cases. Numeric and complex value type support may be improved in future versions.
|
|
319
|
+
|
|
320
|
+
### General Limitations
|
|
321
|
+
- Option labels support template evaluation but with limited View component rendering
|
|
322
|
+
- No support for indeterminate checkbox state
|
|
323
|
+
- No built-in option grouping or hierarchical structure
|
|
324
|
+
- Array mode may not preserve object key order in older JavaScript engines
|
|
325
|
+
- No built-in validation for minimum/maximum selections
|
|
326
|
+
- Limited styling options compared to custom checkbox implementations
|
|
327
|
+
|
|
328
|
+
## Value Type Handling
|
|
329
|
+
|
|
330
|
+
The component handles special string values in radio mode:
|
|
331
|
+
- Empty string `""` becomes `undefined`
|
|
332
|
+
- String `"true"` becomes boolean `true`
|
|
333
|
+
- String `"false"` becomes boolean `false`
|
|
334
|
+
- String `"null"` becomes `null`
|
|
335
|
+
- Other strings remain as strings
|
|
336
|
+
|
|
337
|
+
templates: {}
|
|
338
|
+
data: {}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# DateField
|
|
2
|
+
|
|
3
|
+
The `DateField` component renders a date and time input field using React Bootstrap. It provides a datetime-local input type for selecting both date and time values with automatic data binding to the global data context.
|
|
4
|
+
|
|
5
|
+
> **Warning**
|
|
6
|
+
> This component has limited support and is marked as TODO in the codebase. Currently only supports `datetime-local` input type.
|
|
7
|
+
|
|
8
|
+
## Properties
|
|
9
|
+
|
|
10
|
+
- `dataLocation` (string, optional): Path to bind the field value in the data context
|
|
11
|
+
- `defaultFieldValue` (string, optional): Default value when no data is present
|
|
12
|
+
- `label` (string, optional): Field label text
|
|
13
|
+
- `attributes` (object, optional): Attributes applied to the Form.Group container
|
|
14
|
+
- `actions` (array, optional): Actions to execute based on field state. Supports both actions (hide, tooltip, etc.) and conditional reactions (setData, fetchData, etc.) with full conditional logic support
|
|
15
|
+
|
|
16
|
+
## Data Management
|
|
17
|
+
|
|
18
|
+
The component automatically synchronizes its value with the global data context as an ISO 8601 datetime string format (YYYY-MM-DDTHH:mm). When using `dataLocation`, the value is stored at the specified path. Without `dataLocation`, the value is stored in the template context using the component's `datafield`.
|
|
19
|
+
|
|
20
|
+
## Date Format
|
|
21
|
+
|
|
22
|
+
The component uses the HTML5 `datetime-local` input type which:
|
|
23
|
+
- Displays a date and time picker in the browser
|
|
24
|
+
- Returns values in ISO 8601 format: `YYYY-MM-DDTHH:mm`
|
|
25
|
+
- Does not include timezone information
|
|
26
|
+
- Appearance varies by browser and operating system
|
|
27
|
+
|
|
28
|
+
## Basic Example
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
renderView:
|
|
32
|
+
- type: DateField
|
|
33
|
+
dataLocation: ~.eventDate
|
|
34
|
+
label: "Event Date and Time:"
|
|
35
|
+
|
|
36
|
+
data:
|
|
37
|
+
eventDate: null
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## DateField with Default Value
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
renderView:
|
|
44
|
+
- type: DateField
|
|
45
|
+
dataLocation: ~.deadline
|
|
46
|
+
label: "Project Deadline:"
|
|
47
|
+
defaultFieldValue: "2024-12-31T17:00"
|
|
48
|
+
|
|
49
|
+
data:
|
|
50
|
+
deadline: null
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Multiple DateFields
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
renderView:
|
|
57
|
+
- type: DateField
|
|
58
|
+
dataLocation: ~.startDate
|
|
59
|
+
label: "Start Date:"
|
|
60
|
+
- type: DateField
|
|
61
|
+
dataLocation: ~.endDate
|
|
62
|
+
label: "End Date:"
|
|
63
|
+
- type: DateField
|
|
64
|
+
dataLocation: ~.reminderDate
|
|
65
|
+
label: "Reminder Date:"
|
|
66
|
+
|
|
67
|
+
data:
|
|
68
|
+
startDate: null
|
|
69
|
+
endDate: null
|
|
70
|
+
reminderDate: null
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Interactive Date Management
|
|
74
|
+
|
|
75
|
+
Advanced example with conditional reactions and dynamic messaging:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
renderView:
|
|
79
|
+
- type: DateField
|
|
80
|
+
dataLocation: ~.meetingDate
|
|
81
|
+
label: "Meeting Date:"
|
|
82
|
+
- type: button
|
|
83
|
+
content: "Set to Tomorrow"
|
|
84
|
+
actions:
|
|
85
|
+
- what: setData
|
|
86
|
+
on: click
|
|
87
|
+
path: ~.meetingDate
|
|
88
|
+
value: "2024-12-25T14:00"
|
|
89
|
+
- type: button
|
|
90
|
+
content: "Clear Date"
|
|
91
|
+
actions:
|
|
92
|
+
- what: setData
|
|
93
|
+
on: click
|
|
94
|
+
path: ~.meetingDate
|
|
95
|
+
value: null
|
|
96
|
+
- type: button
|
|
97
|
+
content: "Validate Meeting"
|
|
98
|
+
actions:
|
|
99
|
+
- what: setData
|
|
100
|
+
on: click
|
|
101
|
+
path: ~.message
|
|
102
|
+
value: "✓ Meeting date is set!"
|
|
103
|
+
when: ~.meetingDate
|
|
104
|
+
isEmpty: "not"
|
|
105
|
+
- what: setData
|
|
106
|
+
on: click
|
|
107
|
+
path: ~.message
|
|
108
|
+
value: "⚠ Please select a meeting date first"
|
|
109
|
+
when: ~.meetingDate
|
|
110
|
+
isEmpty: true
|
|
111
|
+
|
|
112
|
+
data:
|
|
113
|
+
meetingDate: null
|
|
114
|
+
message: null
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Complete Example
|
|
118
|
+
|
|
119
|
+
A comprehensive example showing DateField in different contexts:
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
renderView:
|
|
123
|
+
- type: DateField
|
|
124
|
+
dataLocation: ~.eventDate
|
|
125
|
+
label: "Event Date and Time:"
|
|
126
|
+
- type: DateField
|
|
127
|
+
dataLocation: ~.deadline
|
|
128
|
+
label: "Deadline:"
|
|
129
|
+
defaultFieldValue: "2024-12-31T23:59"
|
|
130
|
+
- type: div
|
|
131
|
+
content:
|
|
132
|
+
- "Event: "
|
|
133
|
+
- ~.eventDate
|
|
134
|
+
- type: div
|
|
135
|
+
content:
|
|
136
|
+
- "Deadline: "
|
|
137
|
+
- ~.deadline
|
|
138
|
+
|
|
139
|
+
data:
|
|
140
|
+
eventDate: null
|
|
141
|
+
deadline: null
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Current Limitations
|
|
145
|
+
|
|
146
|
+
> **Development Status**
|
|
147
|
+
> The DateField component is currently limited and marked as TODO in the codebase. However, it integrates fully with reactive-json's action and reaction system for rich interactivity.
|
|
148
|
+
|
|
149
|
+
### Component Limitations
|
|
150
|
+
- Only supports `datetime-local` input type (hardcoded)
|
|
151
|
+
- No support for `date` input type (date only)
|
|
152
|
+
- No support for `time` input type (time only)
|
|
153
|
+
- No support for `month` or `week` input types
|
|
154
|
+
- No built-in date formatting or localization
|
|
155
|
+
- No timezone handling or conversion
|
|
156
|
+
- No support for inputAttributes property (not implemented)
|
|
157
|
+
- No template evaluation support for label property
|
|
158
|
+
|
|
159
|
+
### Browser and Validation Limitations
|
|
160
|
+
- No date validation beyond browser defaults
|
|
161
|
+
- No support for date ranges or multiple date selection
|
|
162
|
+
- No support for custom date picker libraries
|
|
163
|
+
- Limited browser compatibility for datetime-local input
|
|
164
|
+
|
|
165
|
+
### Workarounds Available
|
|
166
|
+
- ✅ **Date validation**: Use conditional reactions with `isEmpty`, `andConditions`, `orConditions`
|
|
167
|
+
- ✅ **Interactive behavior**: Full support for conditional actions and reactions
|
|
168
|
+
- ✅ **Dynamic messaging**: Use setData reactions to provide user feedback
|
|
169
|
+
- ✅ **Complex logic**: Combine multiple DateFields with sophisticated conditional logic
|
|
170
|
+
|
|
171
|
+
## Browser Compatibility
|
|
172
|
+
|
|
173
|
+
The `datetime-local` input type has varying support across browsers:
|
|
174
|
+
- Modern browsers provide native date/time pickers
|
|
175
|
+
- Older browsers may fall back to text input
|
|
176
|
+
- Mobile browsers typically provide optimized date/time selection interfaces
|
|
177
|
+
- Appearance and behavior can vary significantly between browsers
|
|
178
|
+
|
|
179
|
+
## Future Improvements
|
|
180
|
+
|
|
181
|
+
The component is marked for future enhancement to support:
|
|
182
|
+
- Dedicated `date` input type for date-only selection
|
|
183
|
+
- Dedicated `time` input type for time-only selection
|
|
184
|
+
- Better validation and error handling
|
|
185
|
+
- Custom date formatting options
|
|
186
|
+
- Timezone support
|
|
187
|
+
- Integration with date picker libraries
|
|
188
|
+
- Support for inputAttributes property
|
|
189
|
+
- Template evaluation for label property
|