@ea-lab/reactive-json 0.0.19 → 0.0.21

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.
Files changed (124) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/types/component/action/HashChangeListener.d.ts +9 -0
  3. package/{lib/component/action/Hide.jsx → dist/esm/types/component/action/Hide.d.ts} +2 -6
  4. package/dist/esm/types/component/action/MessageListener.d.ts +9 -0
  5. package/dist/esm/types/component/action/Popover.d.ts +5 -0
  6. package/dist/esm/types/component/action/ReactOnEvent.d.ts +26 -0
  7. package/dist/esm/types/component/action/Redirect.d.ts +9 -0
  8. package/dist/esm/types/component/action/Tooltip.d.ts +5 -0
  9. package/{lib/component/action/VisuallyHide.jsx → dist/esm/types/component/action/VisuallyHide.d.ts} +1 -4
  10. package/dist/esm/types/component/element/form/CheckBoxField.d.ts +7 -0
  11. package/dist/esm/types/component/element/form/DateField.d.ts +2 -0
  12. package/dist/esm/types/component/element/form/NumberField.d.ts +7 -0
  13. package/dist/esm/types/component/element/form/SelectField.d.ts +7 -0
  14. package/dist/esm/types/component/element/form/TextAreaField.d.ts +6 -0
  15. package/dist/esm/types/component/element/form/TextField.d.ts +6 -0
  16. package/dist/esm/types/component/element/form/formElementsCommon.d.ts +23 -0
  17. package/dist/esm/types/component/element/html/AccordionItem.d.ts +16 -0
  18. package/dist/esm/types/component/element/html/FolderSortableTree.d.ts +6 -0
  19. package/dist/esm/types/component/element/html/FormatNumeral.d.ts +7 -0
  20. package/dist/esm/types/component/element/html/Html.d.ts +8 -0
  21. package/dist/esm/types/component/element/html/LabelFromValue.d.ts +22 -0
  22. package/dist/esm/types/component/element/html/Modal.d.ts +6 -0
  23. package/dist/esm/types/component/element/html/ModalForm.d.ts +9 -0
  24. package/dist/esm/types/component/element/html/Paragraph.d.ts +5 -0
  25. package/dist/esm/types/component/element/html/PreformattedMarkup.d.ts +7 -0
  26. package/dist/esm/types/component/element/html/SortableTreeItemCollapseButton.d.ts +9 -0
  27. package/dist/esm/types/component/element/html/Tabs.d.ts +18 -0
  28. package/dist/esm/types/component/element/special/BootstrapElement.d.ts +10 -0
  29. package/dist/esm/types/component/element/special/Count.d.ts +13 -0
  30. package/dist/esm/types/component/element/special/DataFilter.d.ts +11 -0
  31. package/dist/esm/types/component/element/special/DelayedActions.d.ts +25 -0
  32. package/dist/esm/types/component/element/special/PageControls.d.ts +9 -0
  33. package/dist/esm/types/component/element/special/Phantom.d.ts +17 -0
  34. package/dist/esm/types/component/element/special/Switch.d.ts +6 -0
  35. package/dist/esm/types/component/hook/usePagination.d.ts +30 -0
  36. package/dist/esm/types/component/index.d.ts +5 -0
  37. package/dist/esm/types/component/reaction/addData.d.ts +6 -0
  38. package/dist/esm/types/component/reaction/fetchData.d.ts +8 -0
  39. package/dist/esm/types/component/reaction/moveData.d.ts +6 -0
  40. package/dist/esm/types/component/reaction/postMessage.d.ts +6 -0
  41. package/dist/esm/types/component/reaction/redirectNow.d.ts +6 -0
  42. package/dist/esm/types/component/reaction/removeData.d.ts +6 -0
  43. package/dist/esm/types/component/reaction/setClipboardData.d.ts +6 -0
  44. package/dist/esm/types/component/reaction/setData.d.ts +6 -0
  45. package/dist/esm/types/component/reaction/submitData.d.ts +8 -0
  46. package/dist/esm/types/component/reaction/triggerEvent.d.ts +6 -0
  47. package/dist/esm/types/component/utility/formatString.d.ts +17 -0
  48. package/dist/esm/types/engine/Actions.d.ts +19 -0
  49. package/dist/esm/types/engine/ComponentCollector.d.ts +12 -0
  50. package/{lib/engine/EventDispatcherContext.jsx → dist/esm/types/engine/EventDispatcherContext.d.ts} +4 -7
  51. package/dist/esm/types/engine/EventDispatcherProvider.d.ts +16 -0
  52. package/{lib/engine/GlobalDataContext.jsx → dist/esm/types/engine/GlobalDataContext.d.ts} +1 -4
  53. package/dist/esm/types/engine/GlobalDataContextProvider.d.ts +11 -0
  54. package/{lib/engine/PaginationContext.jsx → dist/esm/types/engine/PaginationContext.d.ts} +3 -4
  55. package/dist/esm/types/engine/PaginationProvider.d.ts +12 -0
  56. package/dist/esm/types/engine/ReactiveJsonRoot.d.ts +28 -0
  57. package/{lib/engine/TemplateContext.jsx → dist/esm/types/engine/TemplateContext.d.ts} +1 -4
  58. package/dist/esm/types/engine/TemplateSystem.d.ts +89 -0
  59. package/dist/esm/types/engine/View.d.ts +7 -0
  60. package/dist/esm/types/index.d.ts +6 -0
  61. package/dist/esm/types/main.d.ts +10 -0
  62. package/dist/index.cjs.js +9201 -0
  63. package/dist/index.cjs.js.map +1 -0
  64. package/dist/index.d.ts +44 -0
  65. package/dist/index.esm.js +9180 -0
  66. package/dist/index.esm.js.map +1 -0
  67. package/package.json +26 -15
  68. package/dist/reactive-json.css +0 -5
  69. package/dist/reactive-json.js +0 -47707
  70. package/dist/reactive-json.js.map +0 -1
  71. package/dist/reactive-json.umd.cjs +0 -366
  72. package/dist/reactive-json.umd.cjs.map +0 -1
  73. package/lib/component/action/HashChangeListener.jsx +0 -66
  74. package/lib/component/action/MessageListener.jsx +0 -62
  75. package/lib/component/action/Popover.jsx +0 -53
  76. package/lib/component/action/ReactOnEvent.jsx +0 -118
  77. package/lib/component/action/Redirect.jsx +0 -26
  78. package/lib/component/action/Tooltip.jsx +0 -27
  79. package/lib/component/element/form/CheckBoxField.jsx +0 -215
  80. package/lib/component/element/form/DateField.jsx +0 -42
  81. package/lib/component/element/form/NumberField.jsx +0 -29
  82. package/lib/component/element/form/SelectField.jsx +0 -130
  83. package/lib/component/element/form/TextAreaField.jsx +0 -48
  84. package/lib/component/element/form/TextField.jsx +0 -65
  85. package/lib/component/element/form/formElementsCommon.jsx +0 -54
  86. package/lib/component/element/html/AccordionItem.jsx +0 -42
  87. package/lib/component/element/html/FolderSortableTree.jsx +0 -307
  88. package/lib/component/element/html/FormatNumeral.jsx +0 -118
  89. package/lib/component/element/html/Html.jsx +0 -107
  90. package/lib/component/element/html/LabelFromValue.jsx +0 -89
  91. package/lib/component/element/html/Modal.jsx +0 -77
  92. package/lib/component/element/html/ModalForm.jsx +0 -30
  93. package/lib/component/element/html/Paragraph.jsx +0 -10
  94. package/lib/component/element/html/PreformattedMarkup.jsx +0 -54
  95. package/lib/component/element/html/SortableTreeItemCollapseButton.jsx +0 -20
  96. package/lib/component/element/html/Tabs.jsx +0 -55
  97. package/lib/component/element/special/BootstrapElement.jsx +0 -32
  98. package/lib/component/element/special/Count.jsx +0 -46
  99. package/lib/component/element/special/DataFilter.jsx +0 -156
  100. package/lib/component/element/special/DelayedActions.jsx +0 -119
  101. package/lib/component/element/special/PageControls.jsx +0 -19
  102. package/lib/component/element/special/Phantom.jsx +0 -25
  103. package/lib/component/element/special/Switch.jsx +0 -131
  104. package/lib/component/hook/usePagination.jsx +0 -184
  105. package/lib/component/reaction/addData.jsx +0 -23
  106. package/lib/component/reaction/fetchData.jsx +0 -83
  107. package/lib/component/reaction/moveData.jsx +0 -52
  108. package/lib/component/reaction/postMessage.jsx +0 -43
  109. package/lib/component/reaction/redirectNow.jsx +0 -17
  110. package/lib/component/reaction/removeData.jsx +0 -48
  111. package/lib/component/reaction/setClipboardData.jsx +0 -20
  112. package/lib/component/reaction/setData.jsx +0 -23
  113. package/lib/component/reaction/submitData.jsx +0 -136
  114. package/lib/component/reaction/triggerEvent.jsx +0 -62
  115. package/lib/component/utility/formatString.jsx +0 -59
  116. package/lib/engine/Actions.jsx +0 -392
  117. package/lib/engine/ComponentCollector.js +0 -28
  118. package/lib/engine/EventDispatcherProvider.jsx +0 -80
  119. package/lib/engine/GlobalDataContextProvider.jsx +0 -33
  120. package/lib/engine/PaginationProvider.jsx +0 -61
  121. package/lib/engine/ReactiveJsonRoot.jsx +0 -318
  122. package/lib/engine/TemplateSystem.jsx +0 -302
  123. package/lib/engine/View.jsx +0 -248
  124. package/lib/main.jsx +0 -52
@@ -1,248 +0,0 @@
1
- import {useContext} from 'react';
2
- import CheckBoxField from "../component/element/form/CheckBoxField";
3
- import DateField from "../component/element/form/DateField";
4
- import NumberField from "../component/element/form/NumberField";
5
- import SelectField from "../component/element/form/SelectField";
6
- import TextAreaField from "../component/element/form/TextAreaField";
7
- import TextField from "../component/element/form/TextField";
8
- import AccordionItem from "../component/element/html/AccordionItem";
9
- import FolderSortableTree from "../component/element/html/FolderSortableTree";
10
- import FormatNumeral from "../component/element/html/FormatNumeral";
11
- import Html from "../component/element/html/Html";
12
- import LabelFromValue from "../component/element/html/LabelFromValue";
13
- import Modal from "../component/element/html/Modal";
14
- import Paragraph from "../component/element/html/Paragraph";
15
- import PreformattedMarkup from "../component/element/html/PreformattedMarkup";
16
- import SortableTreeItemCollapseButton from "../component/element/html/SortableTreeItemCollapseButton";
17
- import Tabs from "../component/element/html/Tabs";
18
- import BootstrapElement from "../component/element/special/BootstrapElement";
19
- import Count from "../component/element/special/Count";
20
- import DataFilter from "../component/element/special/DataFilter";
21
- import DelayedActions from "../component/element/special/DelayedActions";
22
- import PageControls from "../component/element/special/PageControls";
23
- import Phantom from "../component/element/special/Phantom";
24
- import Switch from "../component/element/special/Switch";
25
- import GlobalDataContext from "./GlobalDataContext";
26
- import TemplateContext from "./TemplateContext";
27
- import TemplateValue, {dataLocationToPath, evaluateTemplateValue} from "./TemplateSystem";
28
- import {
29
- Accordion,
30
- Alert,
31
- Badge,
32
- Button,
33
- } from "react-bootstrap";
34
-
35
- function View({props, currentData, datafield, path}) {
36
- const globalDataContext = useContext(GlobalDataContext);
37
- const templateContext = useContext(TemplateContext);
38
-
39
- const plugins = globalDataContext.plugins ?? {
40
- "element": {
41
- "Azerty": Html,
42
- }
43
- };
44
-
45
- const test = {
46
- "element": {
47
- "Qsdfgh": Html,
48
- }
49
- }
50
-
51
- const components = {
52
- AccordionItem,
53
- CheckBoxField,
54
- Count,
55
- DateField,
56
- DataFilter,
57
- DelayedActions,
58
- FolderSortableTree,
59
- FormatNumeral,
60
- Html,
61
- LabelFromValue,
62
- Modal,
63
- NumberField,
64
- PageControls,
65
- Paragraph,
66
- Phantom,
67
- PreformattedMarkup,
68
- SelectField,
69
- SortableTreeItemCollapseButton,
70
- Switch,
71
- Tabs,
72
- TextAreaField,
73
- TextField,
74
- ...plugins?.element,
75
- ...test?.element,
76
- "Ijiji": TextAreaField,
77
- };
78
-
79
- /**
80
- * Gives direct access to React Bootstrap components.
81
- */
82
- const bootstrapComponents = {
83
- BsAccordion: Accordion,
84
- BsAlert: Alert,
85
- BsBadge: Badge,
86
- BsButton: Button,
87
- };
88
-
89
- const {element} = globalDataContext;
90
-
91
- if (currentData === undefined) {
92
- currentData = "";
93
- }
94
-
95
- if (props?.type) {
96
- // A type is specified.
97
- // First, try to find a component matching the given type by name.
98
- // When not found, we map to a Html component as fallback.
99
- // TODO: make this generic by moving bootstrap related code outside View.
100
- let componentRegistryId = undefined;
101
- let ComponentToRender = undefined;
102
-
103
- const componentRegistries = [
104
- {"registryId": "module", "components": components},
105
- {"registryId": "bootstrap", "components": bootstrapComponents},
106
- ];
107
-
108
- while (componentRegistries.length) {
109
- const {registryId, components: registryComponents} = componentRegistries.shift();
110
-
111
- ComponentToRender = registryComponents[props.type] ?? undefined;
112
-
113
- if (ComponentToRender !== undefined) {
114
- componentRegistryId = registryId;
115
- break;
116
- }
117
- }
118
-
119
- if (ComponentToRender === undefined) {
120
- // Use the module:Html component as fallback.
121
- ComponentToRender = Html;
122
- componentRegistryId = "module";
123
- }
124
-
125
- if (componentRegistryId === "bootstrap") {
126
- return <BootstrapElement
127
- bsComponent={ComponentToRender}
128
- path={path}
129
- props={props}
130
- currentData={currentData}
131
- datafield={datafield}/>;
132
- }
133
-
134
- if (Html === ComponentToRender) {
135
- // Either the user has specifically asked for a Html component,
136
- // or this is a fallback for an unknown type.
137
- // Make sure the tag is set.
138
- props.tag = props.tag ?? props.type;
139
- }
140
-
141
- return <ComponentToRender
142
- path={path}
143
- props={props}
144
- currentData={currentData}
145
- datafield={datafield}/>;
146
- }
147
-
148
- if (props?.load) {
149
- // An external render source must be loaded.
150
- // let load = props.load;
151
- let loadedRenderArray;
152
-
153
- const _customDataLocation = props?.customDataLocation ?? undefined;
154
- if (_customDataLocation) debugger;
155
-
156
- // Determine which data to use.
157
- const finalCurrentData = _customDataLocation
158
- // The data is located somewhere in the current data.
159
- ? evaluateTemplateValue({
160
- globalDataContext: globalDataContext,
161
- templateContext: templateContext,
162
- valueToEvaluate: _customDataLocation,
163
- })
164
- // The data is the current data.
165
- : currentData;
166
-
167
- // The data path must be set accordingly.
168
- const finalDataPath = _customDataLocation
169
- ? dataLocationToPath({dataLocation: _customDataLocation, currentPath: path, globalDataContext, templateContext})
170
- : path;
171
-
172
- // This external source can return a single component to render,
173
- // or a collection of components.
174
- if (typeof props.load === "function") {
175
- // A JS function has been defined. Execute it with the currentData.
176
- // The function must return a render array.
177
- loadedRenderArray = props.load(finalCurrentData);
178
- } else {
179
- // Load the render array from the registry.
180
- loadedRenderArray = element[props.load];
181
- }
182
-
183
- // Override any values of the registry render array with the current render array,
184
- // without the properties specific to the "load" method.
185
- const {load, customDataLocation, ...propsWithoutLoadKey} = props;
186
- loadedRenderArray = {...loadedRenderArray, ...propsWithoutLoadKey};
187
-
188
- // Now that we have our render array, recurse on the View component.
189
- if (props.keepTemplateContext) {
190
- // Keep the current template context.
191
- return (
192
- <View
193
- currentData={finalCurrentData}
194
- datafield={datafield}
195
- path={finalDataPath}
196
- props={loadedRenderArray}
197
- />
198
- );
199
- }
200
-
201
- // We open a new template context in the process.
202
- return (
203
- <TemplateContext.Provider value={{templateData: finalCurrentData, templatePath: finalDataPath}}>
204
- <View
205
- currentData={finalCurrentData}
206
- datafield={datafield}
207
- path={finalDataPath}
208
- props={loadedRenderArray}
209
- />
210
- </TemplateContext.Provider>
211
- );
212
- }
213
-
214
- // Try to go deeper to render something.
215
- if (Array.isArray(props)) {
216
- return props.map((item, index) =>
217
- <View
218
- currentData={currentData[index] ?? undefined}
219
- datafield={index}
220
- key={path + "." + index}
221
- path={path + "." + index}
222
- props={item ?? undefined}
223
- />
224
- );
225
- }
226
-
227
- if (typeof props === "object") {
228
- return Object.entries(props).map(([itemKey, item]) => {
229
- return <View
230
- currentData={currentData[itemKey] ?? undefined}
231
- datafield={itemKey ?? undefined}
232
- key={path + "." + itemKey}
233
- path={path + "." + itemKey}
234
- props={item}
235
- />
236
- }
237
- );
238
- }
239
-
240
- // Display the content directly.
241
- // The content tries to use the currentData in case the data wants to rewrite the output.
242
- // If not available, we simply use the given props, which is usually a string, which can
243
- // also be a reference to a template context data.
244
- // If no props is available, do not render anything.
245
- return <TemplateValue valueToEvaluate={currentData || (props ?? null)}/>;
246
- }
247
-
248
- export default View;
package/lib/main.jsx DELETED
@@ -1,52 +0,0 @@
1
- /**
2
- * Entry point for the lib.
3
- */
4
- import "bootstrap/dist/css/bootstrap.min.css";
5
-
6
- import ReactiveJsonRoot from "./engine/ReactiveJsonRoot.jsx";
7
- import {mergeComponentCollections} from "./engine/ComponentCollector.js";
8
- import {StrictMode} from "react"
9
- import {createRoot} from "react-dom/client";
10
-
11
- /**
12
- * mergeComponentCollections helps in loading plugins when reactive-json is loaded in library mode.
13
- */
14
- export {ReactiveJsonRoot, mergeComponentCollections};
15
-
16
- /**
17
- * Standalone mode.
18
- * @example
19
- * <reactive-json data-method="GET" data-url="https://your-site.example/rjs-build/build.json">
20
- * <data-source-request-header data-header-field="X-Header-Field-Name" data-header-value="Your value"></data-source-request-header>
21
- * </reactive-json>
22
- */
23
- document.querySelectorAll("reactive-json").forEach((element) => {
24
- // Use this to change the fetch method.
25
- const maybeMethod = element.dataset?.method;
26
-
27
- // Get data included in the root element.
28
- const headersForData_asElements = element.querySelectorAll("data-source-request-header");
29
- const headersForData = headersForData_asElements.length ? {} : undefined;
30
-
31
- headersForData_asElements.forEach((headerElement, key, parent) => {
32
- const headerField = headerElement?.dataset?.headerField;
33
- const headerValue = headerElement?.dataset?.headerValue;
34
-
35
- if (!headerField || !headerValue) {
36
- return;
37
- }
38
-
39
- headersForData[headerField] = headerValue;
40
- });
41
-
42
- // TODO: Retrieve the reactive-json plugins and inject them in ReactiveJsonRoot.
43
- createRoot(element).render(
44
- <StrictMode>
45
- <ReactiveJsonRoot
46
- dataFetchMethod={maybeMethod}
47
- dataUrl={element.dataset.url}
48
- headersForData={headersForData}
49
- />
50
- </StrictMode>,
51
- );
52
- });