@luomus/laji-form 15.1.0 → 15.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.
Files changed (248) hide show
  1. package/CHANGELOG.md +0 -4
  2. package/dist/laji-form.js +1 -1
  3. package/jsonconfig.json +26 -0
  4. package/migrate.sh +0 -1
  5. package/package.json +8 -8
  6. package/test-export/test-utils.d.ts +100 -54
  7. package/test-export/test-utils.js +102 -84
  8. package/xsel -b +9 -0
  9. package/cypress/fixtures/example.json +0 -5
  10. package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and closes suggestion list (failed).png +0 -0
  11. package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and is marked as suggested (failed).png +0 -0
  12. package/lib/ApiClient.d.ts +0 -46
  13. package/lib/ApiClient.js +0 -93
  14. package/lib/Context.d.ts +0 -8
  15. package/lib/Context.js +0 -18
  16. package/lib/ReactContext.d.ts +0 -7
  17. package/lib/ReactContext.js +0 -5
  18. package/lib/components/BaseComponent.d.ts +0 -9
  19. package/lib/components/BaseComponent.js +0 -29
  20. package/lib/components/LajiForm.d.ts +0 -221
  21. package/lib/components/LajiForm.js +0 -615
  22. package/lib/components/VirtualSchemaField.d.ts +0 -42
  23. package/lib/components/VirtualSchemaField.js +0 -74
  24. package/lib/components/components.d.ts +0 -119
  25. package/lib/components/components.js +0 -606
  26. package/lib/components/fields/AnnotationField.d.ts +0 -34
  27. package/lib/components/fields/AnnotationField.js +0 -242
  28. package/lib/components/fields/AnyToBooleanField.d.ts +0 -18
  29. package/lib/components/fields/AnyToBooleanField.js +0 -20
  30. package/lib/components/fields/ArrayBulkField.d.ts +0 -23
  31. package/lib/components/fields/ArrayBulkField.js +0 -82
  32. package/lib/components/fields/ArrayCombinerField.d.ts +0 -36
  33. package/lib/components/fields/ArrayCombinerField.js +0 -138
  34. package/lib/components/fields/ArrayField.d.ts +0 -39
  35. package/lib/components/fields/ArrayField.js +0 -148
  36. package/lib/components/fields/AudioArrayField.d.ts +0 -22
  37. package/lib/components/fields/AudioArrayField.js +0 -100
  38. package/lib/components/fields/AutoArrayField.d.ts +0 -24
  39. package/lib/components/fields/AutoArrayField.js +0 -56
  40. package/lib/components/fields/AutosuggestField.d.ts +0 -69
  41. package/lib/components/fields/AutosuggestField.js +0 -299
  42. package/lib/components/fields/CombinedValueDisplayField.d.ts +0 -41
  43. package/lib/components/fields/CombinedValueDisplayField.js +0 -100
  44. package/lib/components/fields/ConditionalOnChangeField.d.ts +0 -42
  45. package/lib/components/fields/ConditionalOnChangeField.js +0 -107
  46. package/lib/components/fields/ConditionalUiSchemaField.d.ts +0 -123
  47. package/lib/components/fields/ConditionalUiSchemaField.js +0 -143
  48. package/lib/components/fields/ContextInjectionField.d.ts +0 -24
  49. package/lib/components/fields/ContextInjectionField.js +0 -68
  50. package/lib/components/fields/DataLeakerField.d.ts +0 -40
  51. package/lib/components/fields/DataLeakerField.js +0 -68
  52. package/lib/components/fields/DefaultValueArrayField.d.ts +0 -34
  53. package/lib/components/fields/DefaultValueArrayField.js +0 -59
  54. package/lib/components/fields/DependentBooleanField.d.ts +0 -38
  55. package/lib/components/fields/DependentBooleanField.js +0 -87
  56. package/lib/components/fields/DependentDisableField.d.ts +0 -35
  57. package/lib/components/fields/DependentDisableField.js +0 -71
  58. package/lib/components/fields/EnumRangeArrayField.d.ts +0 -27
  59. package/lib/components/fields/EnumRangeArrayField.js +0 -115
  60. package/lib/components/fields/ExtraLabelRowField.d.ts +0 -38
  61. package/lib/components/fields/ExtraLabelRowField.js +0 -100
  62. package/lib/components/fields/FakePropertyField.d.ts +0 -18
  63. package/lib/components/fields/FakePropertyField.js +0 -48
  64. package/lib/components/fields/FilterArrayField.d.ts +0 -73
  65. package/lib/components/fields/FilterArrayField.js +0 -121
  66. package/lib/components/fields/FlatField.d.ts +0 -29
  67. package/lib/components/fields/FlatField.js +0 -171
  68. package/lib/components/fields/GeocoderField.d.ts +0 -47
  69. package/lib/components/fields/GeocoderField.js +0 -372
  70. package/lib/components/fields/GridLayoutField.d.ts +0 -18
  71. package/lib/components/fields/GridLayoutField.js +0 -32
  72. package/lib/components/fields/HiddenField.d.ts +0 -10
  73. package/lib/components/fields/HiddenField.js +0 -11
  74. package/lib/components/fields/ImageArrayField.d.ts +0 -172
  75. package/lib/components/fields/ImageArrayField.js +0 -697
  76. package/lib/components/fields/ImageDisplayField.d.ts +0 -18
  77. package/lib/components/fields/ImageDisplayField.js +0 -44
  78. package/lib/components/fields/InitiallyHiddenField.d.ts +0 -21
  79. package/lib/components/fields/InitiallyHiddenField.js +0 -58
  80. package/lib/components/fields/InjectDefaultValueField.d.ts +0 -37
  81. package/lib/components/fields/InjectDefaultValueField.js +0 -68
  82. package/lib/components/fields/InjectField.d.ts +0 -46
  83. package/lib/components/fields/InjectField.js +0 -88
  84. package/lib/components/fields/InputWithDefaultValueButtonField.d.ts +0 -25
  85. package/lib/components/fields/InputWithDefaultValueButtonField.js +0 -61
  86. package/lib/components/fields/LocalityField.d.ts +0 -22
  87. package/lib/components/fields/LocalityField.js +0 -94
  88. package/lib/components/fields/LocationChooserField.d.ts +0 -27
  89. package/lib/components/fields/LocationChooserField.js +0 -440
  90. package/lib/components/fields/MapArrayField.d.ts +0 -78
  91. package/lib/components/fields/MapArrayField.js +0 -1783
  92. package/lib/components/fields/MapField.d.ts +0 -48
  93. package/lib/components/fields/MapField.js +0 -434
  94. package/lib/components/fields/MultiAnyToBooleanField.d.ts +0 -25
  95. package/lib/components/fields/MultiAnyToBooleanField.js +0 -100
  96. package/lib/components/fields/MultiArrayField.d.ts +0 -53
  97. package/lib/components/fields/MultiArrayField.js +0 -224
  98. package/lib/components/fields/MultiLanguageField.d.ts +0 -13
  99. package/lib/components/fields/MultiLanguageField.js +0 -52
  100. package/lib/components/fields/MultiTagArrayField.d.ts +0 -36
  101. package/lib/components/fields/MultiTagArrayField.js +0 -142
  102. package/lib/components/fields/NamedPlaceChooserField.d.ts +0 -29
  103. package/lib/components/fields/NamedPlaceChooserField.js +0 -380
  104. package/lib/components/fields/NamedPlaceSaverField.d.ts +0 -29
  105. package/lib/components/fields/NamedPlaceSaverField.js +0 -237
  106. package/lib/components/fields/NestField.d.ts +0 -148
  107. package/lib/components/fields/NestField.js +0 -289
  108. package/lib/components/fields/ObjectField.d.ts +0 -2
  109. package/lib/components/fields/ObjectField.js +0 -119
  110. package/lib/components/fields/PdfArrayField.d.ts +0 -21
  111. package/lib/components/fields/PdfArrayField.js +0 -40
  112. package/lib/components/fields/PrefillingArrayField.d.ts +0 -22
  113. package/lib/components/fields/PrefillingArrayField.js +0 -65
  114. package/lib/components/fields/SchemaField.d.ts +0 -7
  115. package/lib/components/fields/SchemaField.js +0 -109
  116. package/lib/components/fields/ScopeField.d.ts +0 -85
  117. package/lib/components/fields/ScopeField.js +0 -521
  118. package/lib/components/fields/SectionArrayField.d.ts +0 -38
  119. package/lib/components/fields/SectionArrayField.js +0 -618
  120. package/lib/components/fields/SelectTreeField.d.ts +0 -39
  121. package/lib/components/fields/SelectTreeField.js +0 -143
  122. package/lib/components/fields/SingleActiveArrayField.d.ts +0 -49
  123. package/lib/components/fields/SingleActiveArrayField.js +0 -974
  124. package/lib/components/fields/SingleItemArrayField.d.ts +0 -15
  125. package/lib/components/fields/SingleItemArrayField.js +0 -60
  126. package/lib/components/fields/SortArrayField.d.ts +0 -73
  127. package/lib/components/fields/SortArrayField.js +0 -351
  128. package/lib/components/fields/SplitField.d.ts +0 -28
  129. package/lib/components/fields/SplitField.js +0 -65
  130. package/lib/components/fields/StringToArrayField.d.ts +0 -24
  131. package/lib/components/fields/StringToArrayField.js +0 -48
  132. package/lib/components/fields/SumField.d.ts +0 -35
  133. package/lib/components/fields/SumField.js +0 -83
  134. package/lib/components/fields/TableField.d.ts +0 -18
  135. package/lib/components/fields/TableField.js +0 -136
  136. package/lib/components/fields/TagArrayField.d.ts +0 -38
  137. package/lib/components/fields/TagArrayField.js +0 -128
  138. package/lib/components/fields/ToggleAdditionalArrayFieldsField.d.ts +0 -26
  139. package/lib/components/fields/ToggleAdditionalArrayFieldsField.js +0 -81
  140. package/lib/components/fields/UiFieldApplierField.d.ts +0 -30
  141. package/lib/components/fields/UiFieldApplierField.js +0 -106
  142. package/lib/components/fields/UiFieldMapperArrayField.d.ts +0 -42
  143. package/lib/components/fields/UiFieldMapperArrayField.js +0 -121
  144. package/lib/components/fields/UnitCountShorthandField.d.ts +0 -22
  145. package/lib/components/fields/UnitCountShorthandField.js +0 -149
  146. package/lib/components/fields/UnitListShorthandArrayField.d.ts +0 -26
  147. package/lib/components/fields/UnitListShorthandArrayField.js +0 -108
  148. package/lib/components/fields/UnitShorthandField.d.ts +0 -32
  149. package/lib/components/fields/UnitShorthandField.js +0 -220
  150. package/lib/components/templates/ArrayFieldTemplate.d.ts +0 -85
  151. package/lib/components/templates/ArrayFieldTemplate.js +0 -417
  152. package/lib/components/templates/BaseInputTemplate.d.ts +0 -11
  153. package/lib/components/templates/BaseInputTemplate.js +0 -80
  154. package/lib/components/templates/DescriptionField.d.ts +0 -1
  155. package/lib/components/templates/DescriptionField.js +0 -37
  156. package/lib/components/templates/ErrorListTemplate.d.ts +0 -9
  157. package/lib/components/templates/ErrorListTemplate.js +0 -95
  158. package/lib/components/templates/FieldTemplate.d.ts +0 -6
  159. package/lib/components/templates/FieldTemplate.js +0 -112
  160. package/lib/components/templates/ObjectFieldTemplate.d.ts +0 -7
  161. package/lib/components/templates/ObjectFieldTemplate.js +0 -66
  162. package/lib/components/templates/TitleField.d.ts +0 -9
  163. package/lib/components/templates/TitleField.js +0 -51
  164. package/lib/components/widgets/AnyToBooleanWidget.d.ts +0 -20
  165. package/lib/components/widgets/AnyToBooleanWidget.js +0 -49
  166. package/lib/components/widgets/AutosuggestWidget.d.ts +0 -66
  167. package/lib/components/widgets/AutosuggestWidget.js +0 -1127
  168. package/lib/components/widgets/CheckboxWidget.d.ts +0 -37
  169. package/lib/components/widgets/CheckboxWidget.js +0 -139
  170. package/lib/components/widgets/DateTimeWidget.d.ts +0 -62
  171. package/lib/components/widgets/DateTimeWidget.js +0 -251
  172. package/lib/components/widgets/DateWidget.d.ts +0 -23
  173. package/lib/components/widgets/DateWidget.js +0 -41
  174. package/lib/components/widgets/HiddenWidget.d.ts +0 -15
  175. package/lib/components/widgets/HiddenWidget.js +0 -19
  176. package/lib/components/widgets/ImageSelectWidget.d.ts +0 -14
  177. package/lib/components/widgets/ImageSelectWidget.js +0 -57
  178. package/lib/components/widgets/InformalTaxonGroupChooserWidget.d.ts +0 -43
  179. package/lib/components/widgets/InformalTaxonGroupChooserWidget.js +0 -237
  180. package/lib/components/widgets/InputGroupWidget.d.ts +0 -21
  181. package/lib/components/widgets/InputGroupWidget.js +0 -36
  182. package/lib/components/widgets/InputWithDefaultValueButtonWidget.d.ts +0 -21
  183. package/lib/components/widgets/InputWithDefaultValueButtonWidget.js +0 -47
  184. package/lib/components/widgets/NumberWidget.d.ts +0 -13
  185. package/lib/components/widgets/NumberWidget.js +0 -21
  186. package/lib/components/widgets/PlainTextWidget.d.ts +0 -12
  187. package/lib/components/widgets/PlainTextWidget.js +0 -24
  188. package/lib/components/widgets/SelectWidget.d.ts +0 -52
  189. package/lib/components/widgets/SelectWidget.js +0 -158
  190. package/lib/components/widgets/SeparatedDateTimeWidget.d.ts +0 -19
  191. package/lib/components/widgets/SeparatedDateTimeWidget.js +0 -59
  192. package/lib/components/widgets/TaxonImageWidget.d.ts +0 -13
  193. package/lib/components/widgets/TaxonImageWidget.js +0 -30
  194. package/lib/components/widgets/TextSelectWidget.d.ts +0 -25
  195. package/lib/components/widgets/TextSelectWidget.js +0 -94
  196. package/lib/components/widgets/TextareaWidget.d.ts +0 -32
  197. package/lib/components/widgets/TextareaWidget.js +0 -87
  198. package/lib/components/widgets/TimeWidget.d.ts +0 -11
  199. package/lib/components/widgets/TimeWidget.js +0 -19
  200. package/lib/components/widgets/URLWidget.d.ts +0 -14
  201. package/lib/components/widgets/URLWidget.js +0 -12
  202. package/lib/components/widgets/UpperCaseWidget.d.ts +0 -13
  203. package/lib/components/widgets/UpperCaseWidget.js +0 -21
  204. package/lib/index.d.ts +0 -20
  205. package/lib/index.js +0 -50
  206. package/lib/services/blocker-service.d.ts +0 -11
  207. package/lib/services/blocker-service.js +0 -55
  208. package/lib/services/custom-event-service.d.ts +0 -17
  209. package/lib/services/custom-event-service.js +0 -35
  210. package/lib/services/dom-id-service.d.ts +0 -8
  211. package/lib/services/dom-id-service.js +0 -30
  212. package/lib/services/focus-service.d.ts +0 -13
  213. package/lib/services/focus-service.js +0 -60
  214. package/lib/services/id-service.d.ts +0 -22
  215. package/lib/services/id-service.js +0 -130
  216. package/lib/services/key-handler-service.d.ts +0 -56
  217. package/lib/services/key-handler-service.js +0 -184
  218. package/lib/services/root-instance-service.d.ts +0 -25
  219. package/lib/services/root-instance-service.js +0 -49
  220. package/lib/services/settings-service.d.ts +0 -34
  221. package/lib/services/settings-service.js +0 -154
  222. package/lib/services/singleton-map-service.d.ts +0 -23
  223. package/lib/services/singleton-map-service.js +0 -44
  224. package/lib/services/submit-hook-service.d.ts +0 -24
  225. package/lib/services/submit-hook-service.js +0 -73
  226. package/lib/styles.d.ts +0 -1
  227. package/lib/styles.js +0 -4
  228. package/lib/themes/bs3.d.ts +0 -3
  229. package/lib/themes/bs3.js +0 -133
  230. package/lib/themes/bs5.d.ts +0 -3
  231. package/lib/themes/bs5.js +0 -111
  232. package/lib/themes/glyphicon-fa-mapping.d.ts +0 -3
  233. package/lib/themes/glyphicon-fa-mapping.js +0 -271
  234. package/lib/themes/stub.d.ts +0 -3
  235. package/lib/themes/stub.js +0 -82
  236. package/lib/themes/theme.d.ts +0 -233
  237. package/lib/themes/theme.js +0 -2
  238. package/lib/translations.json +0 -847
  239. package/lib/utils.d.ts +0 -171
  240. package/lib/utils.js +0 -1191
  241. package/lib/validation.d.ts +0 -7
  242. package/lib/validation.js +0 -141
  243. package/llol +0 -10
  244. package/llol.pdf +0 -10
  245. package/playwright-report/index.html +0 -62
  246. package/q +0 -196
  247. package/rename.sh +0 -24
  248. package/trip-report.spec.ts +0 -594
@@ -1,618 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __rest = (this && this.__rest) || function (s, e) {
9
- var t = {};
10
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
11
- t[p] = s[p];
12
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
13
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
14
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
15
- t[p[i]] = s[p[i]];
16
- }
17
- return t;
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- const React = require("react");
21
- const react_dom_1 = require("react-dom");
22
- const PropTypes = require("prop-types");
23
- const utils_1 = require("../../utils");
24
- const VirtualSchemaField_1 = require("../VirtualSchemaField");
25
- const TitleField_1 = require("../templates/TitleField");
26
- const components_1 = require("../components");
27
- const Context_1 = require("../../Context");
28
- const ReactContext_1 = require("../../ReactContext");
29
- const ArrayFieldTemplate_1 = require("../templates/ArrayFieldTemplate");
30
- const getOptions = (options) => {
31
- const { sectionField = "/section", rowDefinerField = "/units/%{row}/identifications/0/taxonVerbatim", rowDefinerFields = [
32
- "/units/%{row}/identifications/0/taxonID"
33
- ], rowValueField = "/units/%{row}/individualCount", } = options;
34
- return Object.assign(Object.assign({}, options), { sectionField, rowDefinerField, rowDefinerFields, rowValueField });
35
- };
36
- const hideFields = (schema, uiSchema, fields) => fields.reduce((_uiSchema, field) => utils_1.updateSafelyWithJSONPointer(_uiSchema, { "ui:field": "HiddenField" }, utils_1.uiSchemaJSONPointer(schema, field.replace("%{row}", "0"))), uiSchema);
37
- const walkUiOrder = (schema, uiSchema, pathToShouldBeLast) => {
38
- let [prop, ...next] = pathToShouldBeLast.split("/").filter(s => !utils_1.isEmptyString(s));
39
- if (!prop) {
40
- return uiSchema;
41
- }
42
- const nextPath = `/${next.join("/")}`;
43
- const nextSchema = utils_1.parseSchemaFromFormDataPointer(schema, prop);
44
- const nextUiSchema = utils_1.parseUiSchemaFromFormDataPointer(uiSchema, prop);
45
- if (!isNaN(prop)) {
46
- return Object.assign(Object.assign({}, uiSchema), { items: walkUiOrder(nextSchema, nextUiSchema, nextPath) });
47
- }
48
- if (schema.items && schema.items.properties) {
49
- return Object.assign(Object.assign({}, uiSchema), { items: Object.assign(Object.assign({}, (uiSchema.items || {})), { [prop]: walkUiOrder(nextSchema, nextUiSchema, nextPath), "ui:order": ["*", prop] }) });
50
- }
51
- if (schema.properties) {
52
- return Object.assign(Object.assign({}, uiSchema), { [prop]: walkUiOrder(nextSchema, nextUiSchema, nextPath), "ui:order": ["*", prop] });
53
- }
54
- };
55
- const walkFieldTemplate = (schema, uiSchema = {}, template) => {
56
- if (schema.items && schema.items.properties) {
57
- return Object.assign(Object.assign({}, uiSchema), { items: walkFieldTemplate(schema.items, uiSchema.items, template) });
58
- }
59
- if (schema.properties) {
60
- return Object.assign(Object.assign(Object.assign({}, uiSchema), { "ui:ObjectFieldTemplate": template }), Object.keys(schema.properties).reduce((props, prop) => (Object.assign(Object.assign({}, props), { [prop]: walkFieldTemplate(schema.properties[prop], uiSchema[prop], template) })), uiSchema.properties));
61
- }
62
- return uiSchema;
63
- };
64
- const InvisibleTitle = (props) => {
65
- const uiSchema = Object.assign(Object.assign({}, (props.uiSchema || {})), { "ui:options": Object.assign(Object.assign({}, utils_1.getUiOptions(props.uiSchema)), { titleClassName: "hidden-title-text" }) });
66
- return React.createElement(TitleField_1.default, Object.assign({}, props, { uiSchema: uiSchema }));
67
- };
68
- const NoLineBreakTitle = (props) => {
69
- const uiSchema = Object.assign(Object.assign({}, (props.uiSchema || {})), { "ui:options": Object.assign(Object.assign({}, utils_1.getUiOptions(props.uiSchema)), { titleClassName: "no-line-break" }) });
70
- return React.createElement(TitleField_1.default, Object.assign({}, props, { uiSchema: uiSchema }));
71
- };
72
- const invisibleStyle = { visibility: "hidden" };
73
- let SectionArrayField = class SectionArrayField extends React.Component {
74
- constructor(props) {
75
- super(props);
76
- // Assume that options don't change.
77
- this.arrayKeyFunctions = _arrayKeyFunctions(getOptions(this.getUiOptions()));
78
- }
79
- static getName() { return "SectionArrayField"; }
80
- getStateFromProps(props) {
81
- const { uiSchema, schema, registry } = props;
82
- const { sectionField, rowDefinerField } = getOptions(this.getUiOptions());
83
- const formContext = Object.assign(Object.assign({}, props.formContext), { Label: () => null, this: this, originalUiSchema: uiSchema, errorSchema: props.errorSchema, errorsAsPopup: true });
84
- let _uiSchema = hideFields(schema, Object.assign(Object.assign({}, uiSchema), { "ui:ArrayFieldTemplate": SectionArrayFieldTemplate }), [sectionField, rowDefinerField]);
85
- const [containerPointer] = rowDefinerField.split("%{row}");
86
- _uiSchema = utils_1.updateSafelyWithJSONPointer(_uiSchema, false, `/${utils_1.uiSchemaJSONPointer(schema, containerPointer)}/ui:options/removable`);
87
- _uiSchema = utils_1.updateSafelyWithJSONPointer(_uiSchema, [{ fn: "add", className: "invisible" }], `/${utils_1.uiSchemaJSONPointer(schema, containerPointer)}/ui:options/buttons`);
88
- _uiSchema = utils_1.updateSafelyWithJSONPointer(_uiSchema, containerArrayKeyFunctions, `/${utils_1.uiSchemaJSONPointer(schema, containerPointer)}/ui:options/arrayKeyFunctions`);
89
- _uiSchema = walkFieldTemplate(schema, _uiSchema, NoLabelsObjectFieldTemplate);
90
- //_uiSchema = updateSafelyWithJSONPointer(_uiSchema, {"ui:functions": [{"ui:field": "SingleItemArrayField"}, ...currentUiFunctions], ...contentUiSchema }, uiSchemaJSONPointer(schema, containerPointer));
91
- _uiSchema = walkUiOrder(schema, _uiSchema, rowDefinerField.replace("%{row}", 0));
92
- _uiSchema = utils_1.updateSafelyWithJSONPointer(_uiSchema, this.arrayKeyFunctions, "/ui:options/arrayKeyFunctions");
93
- _uiSchema = utils_1.updateSafelyWithJSONPointer(_uiSchema, true, "/ui:options/keepPropFocusOnNavigate");
94
- return {
95
- uiSchema: _uiSchema,
96
- formContext,
97
- registry: Object.assign(Object.assign({}, registry), { formContext, templates: Object.assign(Object.assign({}, registry.templates), { TitleFieldTemplate: InvisibleTitle }) })
98
- };
99
- }
100
- };
101
- SectionArrayField.propTypes = {
102
- uiSchema: PropTypes.shape({
103
- "ui:options": PropTypes.shape({})
104
- }),
105
- schema: PropTypes.shape({
106
- type: PropTypes.oneOf(["array"])
107
- }).isRequired,
108
- formData: PropTypes.array
109
- };
110
- SectionArrayField = __decorate([
111
- VirtualSchemaField_1.default
112
- ], SectionArrayField);
113
- exports.default = SectionArrayField;
114
- const Section = (_a) => {
115
- var { children, style } = _a, rest = __rest(_a, ["children", "style"]);
116
- return React.createElement("div", Object.assign({ style: style || { flexGrow: 1, width: 0, flexBasis: 0, minWidth: 1 } }, rest), children);
117
- };
118
- const emptyObj = {};
119
- const doNothing = () => { };
120
- const columnStyle = { display: "flex", flexDirection: "column" };
121
- const SectionContent = ({ delete: _delete = React.createElement(components_1.DeleteButton, { style: invisibleStyle, className: "horizontally-centered", translations: emptyObj, onClick: doNothing }), sectionSum = React.createElement("strong", { style: invisibleStyle }, "hidden"), sectionLabel = React.createElement("legend", { style: invisibleStyle }, "hidden"), content }) => (React.createElement("div", { style: columnStyle },
122
- _delete,
123
- sectionSum,
124
- sectionLabel,
125
- content));
126
- let SectionArrayFieldTemplate = class SectionArrayFieldTemplate extends React.Component {
127
- constructor(props) {
128
- super(props);
129
- this.onFocuses = [];
130
- this.getOnFocus = (i) => () => {
131
- this.props.formContext.globals[`${this.props.idSchema.$id}.activeIdx`] = i + (utils_1.getUiOptions(this.props.uiSchema).startIdx || 0);
132
- };
133
- this.getElemsForRowIdx = (rowIdx) => {
134
- const { rowValueField, rowDefinerField } = getOptions(utils_1.getUiOptions(this.props.uiSchema));
135
- return [
136
- `${this.props.idSchema.$id}_0_${utils_1.JSONPointerToId(rowDefinerField.replace("%{row}", rowIdx))}`,
137
- ...this.props.formData.map((_, idx) => `${this.props.idSchema.$id}_${idx}_${utils_1.JSONPointerToId(rowValueField.replace("%{row}", rowIdx))}`)
138
- ].map(id => document.getElementById(id));
139
- };
140
- this.onContainerFocus = (e) => {
141
- const { id } = e.target;
142
- const [rowIdx] = getIdxsFromId(this.props.idSchema, getOptions(utils_1.getUiOptions(this.props.uiSchema)), id);
143
- if (rowIdx !== undefined) {
144
- this.focusedRowIdx = rowIdx;
145
- this.getElemsForRowIdx(rowIdx).forEach(elem => {
146
- if (elem) {
147
- elem.className += " input-highlight";
148
- }
149
- });
150
- }
151
- };
152
- this.onContainerBlur = () => {
153
- if (this.focusedRowIdx !== undefined) {
154
- this.getElemsForRowIdx(this.focusedRowIdx).forEach(elem => {
155
- if (elem) {
156
- elem.className = elem.className.replace(" input-highlight", "");
157
- }
158
- });
159
- }
160
- };
161
- this.getContainerElem = () => this.ref.current;
162
- this.getAddButtonElem = () => {
163
- return react_dom_1.findDOMNode(this.addButtonRef.current);
164
- };
165
- this.showAddSection = () => {
166
- this.setState({ showAddSection: true }, () => {
167
- setTimeout(() => {
168
- react_dom_1.findDOMNode(this.sectionInputRef.current).focus();
169
- });
170
- });
171
- };
172
- this.hideAddSection = () => {
173
- this.setState({ showAddSection: false, newSection: undefined });
174
- };
175
- this.getAddSectionPopup = () => {
176
- const { translations } = this.props.formContext;
177
- const { newSection = "" } = this.state;
178
- const { Row, Col } = this.context.theme;
179
- return (React.createElement("div", { className: "laji-form" },
180
- React.createElement("div", null,
181
- React.createElement("strong", null, translations.AddNewSection)),
182
- React.createElement(Row, null,
183
- React.createElement(Col, { xs: 3 },
184
- React.createElement("label", { className: "row-height not-strong", htmlFor: `${this.props.idSchema.$id}-section-input` },
185
- translations.Number,
186
- ":")),
187
- React.createElement(Col, { xs: 9 },
188
- React.createElement("input", { className: "form-control", id: `${this.props.idSchema.$id}-section-input`, type: "text", value: newSection, onChange: this.onNewSectionChange, onKeyDown: this.onNewSectionKeyDown, ref: this.sectionInputRef }))),
189
- React.createElement("div", null, translations.EnterNewSectionNumber),
190
- React.createElement(components_1.Button, { disabled: !this.sectorIsValid(newSection), onClick: this.addSection }, translations.Add),
191
- React.createElement(components_1.Button, { onClick: this.hideAddSection, variant: "default" }, translations.Cancel)));
192
- };
193
- this.sectorIsValid = (newSection) => {
194
- const { sectionField } = getOptions(utils_1.getUiOptions(this.props.uiSchema));
195
- const existingNumbers = this.props.formData.map(item => "" + utils_1.parseJSONPointer(item, sectionField));
196
- return !(isNaN(parseInt(newSection)) || parseInt(newSection) < 0 || parseInt(newSection) > 50 || existingNumbers.includes(newSection));
197
- };
198
- this.onNewSectionChange = (e) => {
199
- this.setState({ newSection: e.target.value.replace(/[^0-9/-]/g, "") });
200
- };
201
- this.onNewSectionKeyDown = (e) => {
202
- if (e.key === "Enter") {
203
- if (!this.sectorIsValid(this.state.newSection)) {
204
- return;
205
- }
206
- this.addSection();
207
- this.hideAddSection();
208
- e.stopPropagation();
209
- }
210
- };
211
- this.addSection = () => {
212
- const { registry, formContext, uiSchema, schema } = this.props;
213
- const { newSection } = this.state;
214
- const { rowDefinerField, rowDefinerFields, sectionField } = getOptions(utils_1.getUiOptions(uiSchema));
215
- const [containerPointer] = rowDefinerField.split("/%{row}");
216
- const copiedRowDefinerData = (utils_1.parseJSONPointer(this.props.formData[0] || {}, containerPointer) || []).reduce((result, item, idx) => {
217
- return [rowDefinerField, ...rowDefinerFields].reduce((_result, field) => {
218
- const [_, parsedField] = field.split("/%{row}"); // eslint-disable-line @typescript-eslint/no-unused-vars
219
- return utils_1.updateFormDataWithJSONPointer({
220
- schema: schema.items,
221
- formData: _result,
222
- registry
223
- }, utils_1.parseJSONPointer(item, parsedField), field.replace(/%{row}/g, idx));
224
- }, result);
225
- }, utils_1.getDefaultFormState(schema.items));
226
- const tmpIdTree = formContext.services.ids.getRelativeTmpIdTree(this.props.idSchema.$id);
227
- const _item = copiedRowDefinerData;
228
- let [item] = utils_1.addLajiFormIds(_item, tmpIdTree, this.props.idSchema.$id);
229
- item = utils_1.updateFormDataWithJSONPointer({ schema: schema.items, formData: item, registry }, parseInt(newSection), sectionField);
230
- const items = [...this.props.formData, item];
231
- const idx = items.findIndex(i => i === item);
232
- const idToFocus = `${this.props.idSchema.$id}_${idx}`;
233
- let { idToScrollAfterAdd = `${this.props.idSchema.$id}-add-section` } = utils_1.getUiOptions(uiSchema || {});
234
- Context_1.default(formContext.contextId).idToFocus = idToFocus;
235
- Context_1.default(formContext.contextId).idToScroll = idToScrollAfterAdd;
236
- formContext.this.props.onChange(items);
237
- this.hideAddSection();
238
- };
239
- this.onRowDefinerChange = formData => {
240
- const { rowDefinerField, rowDefinerFields } = getOptions(utils_1.getUiOptions(this.props.uiSchema));
241
- const [containerPointer] = rowDefinerField.split("%{row}");
242
- const rowDefinerItemIdsToContainerIdxs = (utils_1.parseJSONPointer(this.props.formData[0] || {}, containerPointer) || []).reduce((map, item, idx) => {
243
- map[utils_1.getUUID(item)] = idx;
244
- return map;
245
- }, {});
246
- const tmpIdTree = this.props.formContext.services.ids.getRelativeTmpIdTree(`${this.props.idSchema.$id}_${utils_1.JSONPointerToId(containerPointer.substr(0, containerPointer.length - 1))}`);
247
- const oldIds = utils_1.getAllLajiFormIdsDeeply(this.props.formData, tmpIdTree);
248
- let ids = {};
249
- const _formData = this.props.formData.map((item, containerIdx) => {
250
- const items = utils_1.parseJSONPointer(formData, containerPointer).map((unit, idx) => {
251
- let rowDefinerItem = utils_1.parseJSONPointer(item, `${containerPointer}/${rowDefinerItemIdsToContainerIdxs[utils_1.getUUID(unit)]}`);
252
- if (!rowDefinerItem) {
253
- // If container is first and it has UUID, it's an item added to the definer column. It has a UUID already, so
254
- // we don't define it again, or else it will be rendered again and won't be autofocused properly.
255
- const [_rowDefinerItem, _ids] = containerIdx === 0 && utils_1.getUUID(unit)
256
- ? utils_1.addLajiFormIds(unit, tmpIdTree)
257
- : utils_1.addLajiFormIds(this.props.formContext.utils.filterItemIdsDeeply(unit, this.props.idSchema.$id), tmpIdTree, false);
258
- rowDefinerItem = _rowDefinerItem;
259
- ids = Object.assign(Object.assign({}, ids), _ids);
260
- }
261
- const updatedUnit = [rowDefinerField, ...rowDefinerFields].reduce((updatedNewUnit, field) => {
262
- const [_, contentPointer] = field.split("%{row}"); // eslint-disable-line @typescript-eslint/no-unused-vars
263
- const pointer = field.replace("%{row}", idx);
264
- const value = utils_1.parseJSONPointer(formData, pointer);
265
- return utils_1.updateFormDataWithJSONPointer({
266
- schema: utils_1.parseSchemaFromFormDataPointer(this.props.schema.items, containerPointer).items,
267
- formData: updatedNewUnit,
268
- registry: this.props.registry
269
- }, value, contentPointer);
270
- }, rowDefinerItem);
271
- return utils_1.addLajiFormIds(updatedUnit, tmpIdTree, false)[0];
272
- });
273
- return utils_1.updateFormDataWithJSONPointer({
274
- schema: this.props.schema.items,
275
- formData: item,
276
- registry: this.props.registry
277
- }, items, containerPointer);
278
- });
279
- this.props.formContext.this.props.onChange(_formData);
280
- Object.keys(oldIds).forEach(id => {
281
- if (!ids[id]) {
282
- this.props.formContext.services.submitHooks.remove(id);
283
- }
284
- });
285
- };
286
- this.addButtonRef = React.createRef();
287
- this.sectionInputRef = React.createRef();
288
- this.ref = React.createRef();
289
- }
290
- render() {
291
- return (React.createElement("div", { style: { display: "flex", width: "100%" }, ref: this.ref, onFocus: this.onContainerFocus, onBlur: this.onContainerBlur, tabIndex: 0 },
292
- React.createElement(Section, { key: "definer", style: { flexGrow: "initial", maxWidth: 200 }, id: `${this.props.idSchema.$id}-section-definer` }, this.renderRowDefinerColumn()),
293
- this.renderSections(),
294
- React.createElement(Section, { key: "sums", className: "bg-info", style: { maxWidth: 75 } }, this.renderRowDefinerSumColumn()),
295
- React.createElement(Section, { key: "deletes", style: { flexGrow: "initial", maxWidth: 143 } }, this.renderRowDefinerDeleteColumn())));
296
- }
297
- renderRowDefinerColumn() {
298
- const { formData, uiSchema, schema, registry } = this.props;
299
- const { rowDefinerField, rowValueField, sectionField } = getOptions(utils_1.getUiOptions(uiSchema));
300
- const [containerPointer] = rowDefinerField.split("/%{row}");
301
- const { SchemaField } = this.props.registry.fields;
302
- const { originalUiSchema } = this.props.formContext;
303
- const _schema = schema.items;
304
- const _formData = formData[0];
305
- let __uiSchema = hideFields(schema, originalUiSchema, [rowValueField, sectionField]);
306
- __uiSchema = utils_1.updateSafelyWithJSONPointer(__uiSchema.items, false, `${containerPointer}/ui:options/removable`);
307
- __uiSchema = walkUiOrder(schema.items, __uiSchema, rowDefinerField.replace("%{row}", 0));
308
- __uiSchema = walkFieldTemplate(schema.items, __uiSchema, RowDefinerObjectFieldTemplate);
309
- __uiSchema = walkUiOrder(schema.items, __uiSchema, `${containerPointer}/0/identifications`);
310
- const formContext = Object.assign(Object.assign({}, this.props.formContext), { rowDefinerField, sectionPointer: utils_1.idSchemaIdToJSONPointer(this.props.idSchema.$id) });
311
- const idSchema = this.props.registry.schemaUtils.toIdSchema(this.props.schema.items, `${this.props.idSchema.$id}_0`);
312
- const sectionLabel = (React.createElement(components_1.Affix, { className: "background", getContainer: this.getContainerElem, topOffset: this.props.formContext.topOffset, bottomOffset: this.props.formContext.bottomOffset },
313
- React.createElement("legend", null, this.props.formContext.translations.Section)));
314
- const sectionSum = React.createElement("strong", null, this.props.formContext.translations.SectionSum);
315
- const content = (React.createElement(SchemaField, Object.assign({}, this.props, { schema: _schema, uiSchema: __uiSchema, formData: _formData, idSchema: idSchema, onChange: this.onRowDefinerChange, registry: Object.assign(Object.assign({}, registry), { formContext, templates: Object.assign(Object.assign({}, registry.templates), { TitleFieldTemplate: NoLineBreakTitle }) }), formContext: formContext, errorSchema: this.props.formContext.errorSchema[0] || {} })));
316
- return React.createElement(SectionContent, { content: content, sectionLabel: sectionLabel, sectionSum: sectionSum });
317
- }
318
- renderSections() {
319
- const { sectionField, rowValueField } = getOptions(utils_1.getUiOptions(this.props.uiSchema));
320
- return (this.props.formData || []).map((item, idx) => {
321
- if (!this.props.items[idx]) {
322
- return null;
323
- }
324
- const { children, hasRemove, index, disabled, readonly, onDropIndexClick } = this.props.items[idx];
325
- const del = hasRemove && (React.createElement(components_1.DeleteButton, { id: `${this.props.idSchema.$id}_${index}`, disabled: disabled || readonly, translations: this.props.formContext.translations, onClick: onDropIndexClick(index), className: "horizontally-centered" }));
326
- const sectionLabel = (React.createElement(components_1.Affix, { className: index % 2 ? "background" : " darker", getContainer: this.getContainerElem, topOffset: this.props.formContext.topOffset, bottomOffset: this.props.formContext.bottomOffset },
327
- React.createElement("legend", { className: "horizontally-centered" }, utils_1.parseJSONPointer(this.props.formData[index], sectionField))));
328
- const [arr, field] = rowValueField.split("/%{row}");
329
- const sum = (utils_1.parseJSONPointer(item, arr) || []).reduce((sum, item) => sum + (utils_1.parseJSONPointer(item, field) || 0), 0);
330
- const sectionSum = (React.createElement("strong", { className: "horizontally-centered text-muted" }, sum));
331
- return (React.createElement(Section, { onFocus: this.getOnFocus(idx), key: utils_1.getUUID(item), className: index % 2 ? undefined : "darker", id: `${this.props.idSchema.$id}_${idx}-section` },
332
- React.createElement(SectionContent, { delete: del, sectionLabel: sectionLabel, sectionSum: sectionSum, content: children })));
333
- });
334
- }
335
- renderRowDefinerDeleteColumn() {
336
- const { schema, registry, formData } = this.props;
337
- const { rowDefinerField, rowValueField, sectionField } = getOptions(utils_1.getUiOptions(this.props.uiSchema));
338
- const [containerPointer] = rowDefinerField.split("/%{row}");
339
- const { SchemaField } = this.props.registry.fields;
340
- const { originalUiSchema } = this.props.formContext;
341
- let _schema = schema.items;
342
- const _formData = formData[0];
343
- let __uiSchema = hideFields(schema, originalUiSchema, [rowValueField, sectionField]);
344
- __uiSchema = utils_1.updateSafelyWithJSONPointer(__uiSchema, [{ fn: "add", className: "invisible" }], `/${utils_1.uiSchemaJSONPointer(schema, containerPointer)}/ui:options/buttons`);
345
- __uiSchema = walkUiOrder(schema.items, __uiSchema.items, rowDefinerField.replace("%{row}", 0));
346
- __uiSchema = walkFieldTemplate(schema.items, __uiSchema, InvisibleLabelObjectFieldTemplate);
347
- const formContext = Object.assign(Object.assign({}, this.props.formContext), { containerPointer, sectionPointer: utils_1.idSchemaIdToJSONPointer(this.props.idSchema.$id) });
348
- const { Overlay, Popover, Glyphicon } = this.context.theme;
349
- const add = (React.createElement(React.Fragment, null,
350
- React.createElement(components_1.Affix, { getContainer: this.getContainerElem, topOffset: this.props.formContext.topOffset, bottomOffset: this.props.formContext.bottomOffset },
351
- React.createElement(components_1.Button, { id: `${this.props.idSchema.$id}-add`, onClick: this.showAddSection, style: { whiteSpace: "nowrap", padding: "3.5px 12px" }, ref: this.addButtonRef },
352
- React.createElement(Glyphicon, { glyph: "plus" }),
353
- " ",
354
- this.props.formContext.translations.AddSection)),
355
- (this.state || {}).showAddSection &&
356
- React.createElement(Overlay, { show: true, placement: "left", rootClose: true, onHide: this.hideAddSection, target: this.getAddButtonElem },
357
- React.createElement(Popover, { id: `${this.props.id}-show-add-section` }, this.getAddSectionPopup()))));
358
- const delButtons = (React.createElement(SchemaField, Object.assign({}, this.props, { schema: _schema, uiSchema: __uiSchema, formData: _formData, onChange: this.onRowDefinerChange, registry: Object.assign(Object.assign({}, registry), { formContext, fields: Object.assign(Object.assign({}, registry.fields), { TitleFieldTemplate: InvisibleTitle }) }), formContext: formContext })));
359
- return React.createElement(SectionContent, { delete: add, content: delButtons });
360
- }
361
- renderRowDefinerSumColumn() {
362
- const { schema, registry, formData } = this.props;
363
- const { rowDefinerField, rowDefinerFields, rowValueField, sectionField } = getOptions(utils_1.getUiOptions(this.props.uiSchema));
364
- const [containerPointer, valueField] = rowValueField.split("/%{row}");
365
- const { SchemaField } = this.props.registry.fields;
366
- const { originalUiSchema } = this.props.formContext;
367
- let _schema = utils_1.updateSafelyWithJSONPointer(schema.items, { type: "integer" }, `/properties/${containerPointer}/items/properties/sum`);
368
- let _formData = formData[0];
369
- const sums = formData.reduce((sums, item) => {
370
- (utils_1.parseJSONPointer(item, containerPointer) || []).forEach((definerItem, idx) => {
371
- sums[idx] = (sums[idx] || 0) + (utils_1.parseJSONPointer(definerItem, valueField) || 0);
372
- });
373
- return sums;
374
- }, []);
375
- sums.forEach((sum, idx) => {
376
- _formData = utils_1.updateSafelyWithJSONPointer(_formData || {}, sum, `${containerPointer}/${idx}/sum`);
377
- });
378
- let containerUiSchema = Object.keys(utils_1.parseSchemaFromFormDataPointer(_schema, containerPointer).items.properties).reduce((uiSchema, field) => {
379
- if (field === "sum") {
380
- return uiSchema;
381
- }
382
- return Object.assign(Object.assign({}, uiSchema), { [field]: { "ui:field": "HiddenField" } });
383
- }, utils_1.parseUiSchemaFromFormDataPointer(originalUiSchema, containerPointer).items);
384
- let __uiSchema = utils_1.updateSafelyWithJSONPointer(originalUiSchema, containerUiSchema, `/items/${containerPointer}/items`);
385
- __uiSchema = hideFields(schema, __uiSchema, [rowValueField, sectionField, rowDefinerField, ...rowDefinerFields]);
386
- __uiSchema = utils_1.updateSafelyWithJSONPointer(__uiSchema.items, Object.assign(Object.assign({}, utils_1.parseJSONPointer(__uiSchema.items, `${containerPointer}/ui:options`)), { removable: false, buttons: [{ fn: "add", className: "invisible" }] }), `${containerPointer}/ui:options`);
387
- __uiSchema = utils_1.updateSafelyWithJSONPointer(__uiSchema, {
388
- "ui:widget": "PlainTextWidget",
389
- "ui:options": { strong: true, centered: true }
390
- }, `${containerPointer}/items/sum`);
391
- __uiSchema = walkFieldTemplate(schema.items, __uiSchema, SumObjectFieldTemplate);
392
- __uiSchema = walkUiOrder(schema.items, __uiSchema, rowDefinerField.replace("%{row}", 0));
393
- const formContext = Object.assign(Object.assign({}, this.props.formContext), { containerPointer, sectionPointer: utils_1.idSchemaIdToJSONPointer(this.props.idSchema.$id), rowValueField,
394
- rowDefinerField });
395
- const sumLabel = (React.createElement(components_1.Affix, { getContainer: this.getContainerElem, topOffset: this.props.formContext.topOffset, bottomOffset: this.props.formContext.bottomOffset },
396
- React.createElement("legend", { className: "bg-info horizontally-centered" }, this.props.formContext.translations.Sum)));
397
- const content = (React.createElement(SchemaField, Object.assign({}, this.props, { schema: _schema, uiSchema: __uiSchema, formData: _formData, onChange: this.onRowDefinerChange, registry: Object.assign(Object.assign({}, registry), { formContext, fields: Object.assign(Object.assign({}, registry.fields), { TitleFieldTemplate: InvisibleTitle }) }), formContext: formContext })));
398
- return React.createElement(SectionContent, { sectionLabel: sumLabel, content: content });
399
- }
400
- };
401
- SectionArrayFieldTemplate.contextType = ReactContext_1.default;
402
- SectionArrayFieldTemplate = __decorate([
403
- ArrayFieldTemplate_1.handlesArrayKeys
404
- ], SectionArrayFieldTemplate);
405
- const withoutItemPointers = pointer => pointer.replace(/\/([0-9]+|%{row})/g, "");
406
- const InvisibleLabelObjectFieldTemplate = (props) => {
407
- const { containerPointer } = props.formContext;
408
- const pointer = utils_1.idSchemaIdToJSONPointer(props.idSchema.$id);
409
- const containerPointerWithoutItemPointers = withoutItemPointers(containerPointer);
410
- const pointerWithoutItemPointers = withoutItemPointers(pointer);
411
- return props.properties.map(prop => {
412
- const propUiSchema = props.uiSchema[prop.name] || {};
413
- if (propUiSchema["ui:field"] === "HiddenField" || propUiSchema["ui:widget"] === "HiddenWidget") {
414
- return null;
415
- }
416
- if (containerPointerWithoutItemPointers.startsWith(pointerWithoutItemPointers.replace(props.formContext.sectionPointer, "") + "/" + prop.name)) {
417
- return React.createElement(React.Fragment, { key: prop.name }, prop.content);
418
- }
419
- return React.createElement("div", { key: prop.name, className: "form-group row-height" },
420
- React.createElement("label", null));
421
- });
422
- };
423
- const SumObjectFieldTemplate = (props) => {
424
- const { containerPointer } = props.formContext;
425
- const pointer = utils_1.idSchemaIdToJSONPointer(props.idSchema.$id);
426
- const containerPointerWithoutItemPointers = withoutItemPointers(containerPointer);
427
- const pointerWithoutItemPointers = withoutItemPointers(pointer);
428
- return props.properties.map(prop => {
429
- const propUiSchema = props.uiSchema[prop.name] || {};
430
- if (propUiSchema["ui:field"] === "HiddenField" || propUiSchema["ui:widget"] === "HiddenWidget") {
431
- return null;
432
- }
433
- if ((containerPointerWithoutItemPointers.startsWith(pointerWithoutItemPointers.replace(props.formContext.sectionPointer, "") + "/" + prop.name))
434
- || prop.name === "sum") {
435
- return React.createElement(React.Fragment, { key: prop.name }, prop.content);
436
- }
437
- return React.createElement("div", { key: prop.name, className: "form-group row-height " + prop.name },
438
- React.createElement("label", null));
439
- });
440
- };
441
- const NoLabelsObjectFieldTemplate = (props) => {
442
- return props.properties.map(prop => prop.content);
443
- };
444
- const RowDefinerObjectFieldTemplate = (props) => {
445
- const pointer = utils_1.idSchemaIdToJSONPointer(props.idSchema.$id);
446
- const rowDefinerFieldWithoutItemPointers = withoutItemPointers(props.formContext.rowDefinerField);
447
- const pointerWithoutItemPointers = withoutItemPointers(pointer);
448
- return props.properties.map(prop => {
449
- const propUiSchema = props.uiSchema[prop.name] || {};
450
- if (propUiSchema["ui:field"] === "HiddenField" || propUiSchema["ui:widget"] === "HiddenWidget") {
451
- return null;
452
- }
453
- if ((rowDefinerFieldWithoutItemPointers.startsWith(pointerWithoutItemPointers.replace(props.formContext.sectionPointer, "") + "/" + prop.name))) {
454
- return React.createElement(React.Fragment, { key: prop.name }, prop.content);
455
- }
456
- const title = (props.uiSchema[prop.name] || {})["ui:title"] || props.schema.properties[prop.name].title || prop.name;
457
- return React.createElement("div", { key: prop.name, className: "form-group row-height" },
458
- React.createElement("label", null, title));
459
- });
460
- };
461
- const getIdxsFromId = (idSchema, options, _id) => {
462
- const { rowDefinerField } = options;
463
- const id = idSchema.$id;
464
- const sectionIdx = _id.match(new RegExp(`${id}_(\\d+)`))
465
- && !_id.match(new RegExp(`${id}_\\d+_${utils_1.JSONPointerToId(rowDefinerField.replace("%{row}", "\\d+"))}`))
466
- ? +_id.match(new RegExp(`${id}_(\\d+)`))[1]
467
- : undefined;
468
- const [containerPointer] = rowDefinerField.split("%{row}");
469
- const horizontalIdx = _id.match(new RegExp(`${id}_\\d+_${utils_1.JSONPointerToId(containerPointer)}`))
470
- ? +_id.match(new RegExp(`${id}_\\d+_${utils_1.JSONPointerToId(containerPointer)}(\\d+)`))[1]
471
- : undefined;
472
- return [horizontalIdx, sectionIdx];
473
- };
474
- const _arrayKeyFunctions = options => {
475
- const keyFunctions = Object.assign(Object.assign({}, ArrayFieldTemplate_1.arrayKeyFunctions), { insert: (e, props) => {
476
- document.getElementById(`${props.getProps().idSchema.$id}-add`).click();
477
- }, navigateSection: (e, { getProps, left, right, up, goOverRow }) => {
478
- const { rowDefinerField, rowValueField } = options;
479
- const currentId = getProps().formContext.utils.findNearestParentSchemaElemId(document.activeElement);
480
- const amount = left || up ? -1 : 1;
481
- const id = getProps().idSchema.$id;
482
- let nextId;
483
- const [currentRow, currentSection] = getIdxsFromId(getProps().idSchema, options, currentId);
484
- if (currentRow === undefined && currentSection === undefined) {
485
- return false;
486
- }
487
- const getNonRowSectionFieldsForSectionIdx = sectionIdx => {
488
- let tabbable = utils_1.getTabbableFields(document.getElementById(`${id}_${sectionIdx}-section`));
489
- return tabbable.filter(elem => {
490
- return !elem.id.match(new RegExp(utils_1.JSONPointerToId(rowValueField.replace("%{row}", "\\d+"))));
491
- });
492
- };
493
- const goOverToNonRowLogic = (currentProp, reverse = true, last = true) => {
494
- let tabbableInSection = utils_1.getTabbableFields(document.getElementById(`${id}_${last ? getProps().formData.length - 1 : 0}-section`));
495
- if (reverse) {
496
- tabbableInSection = tabbableInSection.reverse();
497
- }
498
- let currentPropEncountered = false;
499
- const elem = tabbableInSection.find(elem => {
500
- if (!elem.id.match(new RegExp(utils_1.JSONPointerToId(rowValueField.replace("%{row}", "\\d+"))))) {
501
- if (!currentProp || currentPropEncountered) {
502
- return elem;
503
- }
504
- if (elem.id.match(currentProp)) {
505
- currentPropEncountered = true;
506
- }
507
- }
508
- });
509
- nextId = getProps().formContext.utils.findNearestParentSchemaElemId(elem);
510
- };
511
- if (left || right) {
512
- // Horizontal navigation from row definer column to row value column.
513
- if (right && currentSection === undefined) {
514
- const idSuffix = utils_1.JSONPointerToId(rowValueField.replace("%{row}", currentRow));
515
- nextId = `${id}_0_${idSuffix}`;
516
- // Horizontal navigation from row value column to row definer column.
517
- }
518
- else if (left && currentSection === 0 && currentRow !== undefined) {
519
- const idSuffix = utils_1.JSONPointerToId(rowDefinerField.replace("%{row}", currentRow));
520
- nextId = `${id}_${currentSection}_${idSuffix}`;
521
- // Horizontal navigation to next/prev row if goOverRow.
522
- }
523
- else if (right && currentSection === getProps().formData.length - 1) {
524
- if (!goOverRow) {
525
- return false;
526
- }
527
- // Horizontal navigation inside row matrix.
528
- if (currentRow !== undefined) {
529
- const idSuffix = utils_1.JSONPointerToId(rowDefinerField.replace("%{row}", currentRow + 1));
530
- nextId = `${id}_${0}_${idSuffix}`;
531
- }
532
- else {
533
- let tabbableInSection = getNonRowSectionFieldsForSectionIdx(getProps().formData.length - 1);
534
- // Horizontal navigation inside non row section field.
535
- if (currentId === getProps().formContext.utils.findNearestParentSchemaElemId(tabbableInSection[tabbableInSection.length - 1])) {
536
- nextId = `${id}_0_${utils_1.JSONPointerToId(rowDefinerField.replace("%{row}", 0))}`;
537
- // Horizontal navigation from non row section to row field.
538
- }
539
- else {
540
- const currentProp = currentId.match(`${id}_${currentSection}_(.+)`)[1];
541
- goOverToNonRowLogic(currentProp, false, false);
542
- }
543
- }
544
- }
545
- else if (left && currentSection === undefined) {
546
- if (goOverRow) {
547
- // Horizontal navigation from row field to non row section field.
548
- if (currentRow === 0) {
549
- goOverToNonRowLogic();
550
- // Horizontal navigation inside row value fields.
551
- }
552
- else {
553
- const idSuffix = utils_1.JSONPointerToId(rowValueField.replace("%{row}", currentRow - 1));
554
- nextId = `${id}_${getProps().formData.length - 1}_${idSuffix}`;
555
- }
556
- }
557
- // Horizontal navigation inside non row section fields.
558
- }
559
- else if (left && currentRow === undefined && currentSection === 0) {
560
- if (goOverRow) {
561
- const currentProp = currentId.match(`${id}_${currentSection}_(.+)`)[1];
562
- goOverToNonRowLogic(currentProp);
563
- }
564
- // Horizontal navigation inside value matrix.
565
- }
566
- else {
567
- const [idPrefix] = currentId.match(new RegExp(`${id}_(\\d+)`));
568
- const idSuffix = currentId.replace(`${idPrefix}_`, "");
569
- nextId = `${id}_${+currentSection + amount}_${idSuffix}`;
570
- }
571
- }
572
- else {
573
- // Vertical navigation.
574
- const containerId = currentSection !== undefined
575
- ? `${id}_${currentSection}-section`
576
- : `${id}-section-definer`;
577
- const tabbableOutsideContainer = utils_1.getTabbableFields(document.getElementById(containerId));
578
- const tabbableIdx = tabbableOutsideContainer.findIndex(e => e === document.activeElement);
579
- nextId = getProps().formContext.utils.findNearestParentSchemaElemId(tabbableOutsideContainer[tabbableIdx + amount]);
580
- if (nextId === "root") {
581
- return true;
582
- }
583
- }
584
- getProps().formContext.utils.focusAndScroll(nextId);
585
- } });
586
- keyFunctions.navigate = (e, props) => {
587
- const { getProps, reverse } = props;
588
- const id = getProps().idSchema.$id;
589
- if (!reverse) {
590
- const lastSectionElems = utils_1.getTabbableFields(document.getElementById(`${id}_${getProps().formData.length - 1}-section`));
591
- const lastElem = lastSectionElems[lastSectionElems.length - 1];
592
- if (document.activeElement === lastElem) {
593
- return false;
594
- }
595
- }
596
- else {
597
- const { rowDefinerField } = options;
598
- const firstElem = utils_1.getTabbableFields(document.getElementById(`${id}_0-section`))[0];
599
- if (document.activeElement === firstElem) {
600
- const allTabbableFields = utils_1.getTabbableFields(react_dom_1.findDOMNode(getProps().formContext.formRef.current));
601
- const matcher = new RegExp(utils_1.JSONPointerToId(rowDefinerField.replace("%{row}", "\\d+")));
602
- const allTabbableFieldsWithoutRowDefinerInputs = allTabbableFields.filter(f => !f.id.match(matcher));
603
- const input = getProps().formContext.utils.getNextInputInInputs(undefined, true, allTabbableFieldsWithoutRowDefinerInputs);
604
- if (input) {
605
- input.focus();
606
- }
607
- return true;
608
- }
609
- }
610
- return keyFunctions.navigateSection(e, Object.assign(Object.assign({}, props), { right: !props.reverse, left: props.reverse, goOverRow: true }));
611
- };
612
- return keyFunctions;
613
- };
614
- const containerArrayKeyFunctions = Object.assign(Object.assign({}, ArrayFieldTemplate_1.arrayKeyFunctions), {
615
- // Disable insert, insert should bubble to section adding.
616
- insert: () => {
617
- return false;
618
- } });