@luomus/laji-form 15.1.0 → 15.1.1

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 (297) hide show
  1. package/CHANGELOG.md +0 -4
  2. package/dist/laji-form.js +1 -1
  3. package/dist/styles.css +81 -90
  4. package/jsonconfig.json +26 -0
  5. package/migrate.sh +0 -1
  6. package/package.json +8 -8
  7. package/test-export/array-spec.js +204 -0
  8. package/test-export/bird-point-count-spec.d.ts +1 -0
  9. package/test-export/bird-point-count-spec.js +62 -0
  10. package/test-export/collection-contest-form-spec.d.ts +1 -0
  11. package/test-export/collection-contest-form-spec.js +38 -0
  12. package/test-export/dataset-form-spec.d.ts +1 -0
  13. package/test-export/dataset-form-spec.js +50 -0
  14. package/test-export/date-time-widget-spec.d.ts +1 -0
  15. package/test-export/date-time-widget-spec.js +188 -0
  16. package/test-export/geocoder-spec.d.ts +1 -0
  17. package/test-export/geocoder-spec.js +135 -0
  18. package/test-export/image-array-spec.d.ts +1 -0
  19. package/test-export/image-array-spec.js +94 -0
  20. package/test-export/inject-field-spec.d.ts +1 -0
  21. package/test-export/inject-field-spec.js +148 -0
  22. package/test-export/internal-uuids-spec.d.ts +1 -0
  23. package/test-export/internal-uuids-spec.js +157 -0
  24. package/test-export/invasive-species-eradication-np-spec.d.ts +1 -0
  25. package/test-export/invasive-species-eradication-np-spec.js +18 -0
  26. package/test-export/invasive-species-eradication-spec.d.ts +1 -0
  27. package/test-export/invasive-species-eradication-spec.js +25 -0
  28. package/test-export/line-transect-spec.d.ts +1 -0
  29. package/test-export/line-transect-spec.js +121 -0
  30. package/test-export/mobile-form-spec.d.ts +1 -0
  31. package/test-export/mobile-form-spec.js +84 -0
  32. package/test-export/nafi-spec.d.ts +1 -0
  33. package/test-export/nafi-spec.js +85 -0
  34. package/test-export/select-widget-spec.d.ts +1 -0
  35. package/test-export/select-widget-spec.js +68 -0
  36. package/test-export/single-item-array-field-spec.d.ts +1 -0
  37. package/test-export/single-item-array-field-spec.js +92 -0
  38. package/test-export/syke-butterfly-spec.d.ts +1 -0
  39. package/test-export/syke-butterfly-spec.js +163 -0
  40. package/test-export/test-utils.d.ts +150 -177
  41. package/test-export/test-utils.js +218 -214
  42. package/test-export/transaction-form-spec.d.ts +1 -0
  43. package/test-export/transaction-form-spec.js +63 -0
  44. package/test-export/trip-report-autosuggest-spec.d.ts +1 -0
  45. package/test-export/trip-report-autosuggest-spec.js +272 -0
  46. package/test-export/trip-report-spec.d.ts +1 -0
  47. package/test-export/trip-report-spec.js +456 -0
  48. package/test-export/unit-list-shorthand-array-field-spec.d.ts +1 -0
  49. package/test-export/unit-list-shorthand-array-field-spec.js +71 -0
  50. package/test-export/validation-spec.d.ts +1 -0
  51. package/test-export/validation-spec.js +336 -0
  52. package/test-export/water-bird-spec.d.ts +1 -0
  53. package/test-export/water-bird-spec.js +30 -0
  54. package/test-export/wbc-spec.d.ts +1 -0
  55. package/test-export/wbc-spec.js +82 -0
  56. package/tsconfig.test.json +1 -1
  57. package/xsel -b +9 -0
  58. package/cypress/fixtures/example.json +0 -5
  59. package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and closes suggestion list (failed).png +0 -0
  60. package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and is marked as suggested (failed).png +0 -0
  61. package/lib/ApiClient.d.ts +0 -46
  62. package/lib/ApiClient.js +0 -93
  63. package/lib/Context.d.ts +0 -8
  64. package/lib/Context.js +0 -18
  65. package/lib/ReactContext.d.ts +0 -7
  66. package/lib/ReactContext.js +0 -5
  67. package/lib/components/BaseComponent.d.ts +0 -9
  68. package/lib/components/BaseComponent.js +0 -29
  69. package/lib/components/LajiForm.d.ts +0 -221
  70. package/lib/components/LajiForm.js +0 -615
  71. package/lib/components/VirtualSchemaField.d.ts +0 -42
  72. package/lib/components/VirtualSchemaField.js +0 -74
  73. package/lib/components/components.d.ts +0 -119
  74. package/lib/components/components.js +0 -606
  75. package/lib/components/fields/AnnotationField.d.ts +0 -34
  76. package/lib/components/fields/AnnotationField.js +0 -242
  77. package/lib/components/fields/AnyToBooleanField.d.ts +0 -18
  78. package/lib/components/fields/AnyToBooleanField.js +0 -20
  79. package/lib/components/fields/ArrayBulkField.d.ts +0 -23
  80. package/lib/components/fields/ArrayBulkField.js +0 -82
  81. package/lib/components/fields/ArrayCombinerField.d.ts +0 -36
  82. package/lib/components/fields/ArrayCombinerField.js +0 -138
  83. package/lib/components/fields/ArrayField.d.ts +0 -39
  84. package/lib/components/fields/ArrayField.js +0 -148
  85. package/lib/components/fields/AudioArrayField.d.ts +0 -22
  86. package/lib/components/fields/AudioArrayField.js +0 -100
  87. package/lib/components/fields/AutoArrayField.d.ts +0 -24
  88. package/lib/components/fields/AutoArrayField.js +0 -56
  89. package/lib/components/fields/AutosuggestField.d.ts +0 -69
  90. package/lib/components/fields/AutosuggestField.js +0 -299
  91. package/lib/components/fields/CombinedValueDisplayField.d.ts +0 -41
  92. package/lib/components/fields/CombinedValueDisplayField.js +0 -100
  93. package/lib/components/fields/ConditionalOnChangeField.d.ts +0 -42
  94. package/lib/components/fields/ConditionalOnChangeField.js +0 -107
  95. package/lib/components/fields/ConditionalUiSchemaField.d.ts +0 -123
  96. package/lib/components/fields/ConditionalUiSchemaField.js +0 -143
  97. package/lib/components/fields/ContextInjectionField.d.ts +0 -24
  98. package/lib/components/fields/ContextInjectionField.js +0 -68
  99. package/lib/components/fields/DataLeakerField.d.ts +0 -40
  100. package/lib/components/fields/DataLeakerField.js +0 -68
  101. package/lib/components/fields/DefaultValueArrayField.d.ts +0 -34
  102. package/lib/components/fields/DefaultValueArrayField.js +0 -59
  103. package/lib/components/fields/DependentBooleanField.d.ts +0 -38
  104. package/lib/components/fields/DependentBooleanField.js +0 -87
  105. package/lib/components/fields/DependentDisableField.d.ts +0 -35
  106. package/lib/components/fields/DependentDisableField.js +0 -71
  107. package/lib/components/fields/EnumRangeArrayField.d.ts +0 -27
  108. package/lib/components/fields/EnumRangeArrayField.js +0 -115
  109. package/lib/components/fields/ExtraLabelRowField.d.ts +0 -38
  110. package/lib/components/fields/ExtraLabelRowField.js +0 -100
  111. package/lib/components/fields/FakePropertyField.d.ts +0 -18
  112. package/lib/components/fields/FakePropertyField.js +0 -48
  113. package/lib/components/fields/FilterArrayField.d.ts +0 -73
  114. package/lib/components/fields/FilterArrayField.js +0 -121
  115. package/lib/components/fields/FlatField.d.ts +0 -29
  116. package/lib/components/fields/FlatField.js +0 -171
  117. package/lib/components/fields/GeocoderField.d.ts +0 -47
  118. package/lib/components/fields/GeocoderField.js +0 -372
  119. package/lib/components/fields/GridLayoutField.d.ts +0 -18
  120. package/lib/components/fields/GridLayoutField.js +0 -32
  121. package/lib/components/fields/HiddenField.d.ts +0 -10
  122. package/lib/components/fields/HiddenField.js +0 -11
  123. package/lib/components/fields/ImageArrayField.d.ts +0 -172
  124. package/lib/components/fields/ImageArrayField.js +0 -697
  125. package/lib/components/fields/ImageDisplayField.d.ts +0 -18
  126. package/lib/components/fields/ImageDisplayField.js +0 -44
  127. package/lib/components/fields/InitiallyHiddenField.d.ts +0 -21
  128. package/lib/components/fields/InitiallyHiddenField.js +0 -58
  129. package/lib/components/fields/InjectDefaultValueField.d.ts +0 -37
  130. package/lib/components/fields/InjectDefaultValueField.js +0 -68
  131. package/lib/components/fields/InjectField.d.ts +0 -46
  132. package/lib/components/fields/InjectField.js +0 -88
  133. package/lib/components/fields/InputWithDefaultValueButtonField.d.ts +0 -25
  134. package/lib/components/fields/InputWithDefaultValueButtonField.js +0 -61
  135. package/lib/components/fields/LocalityField.d.ts +0 -22
  136. package/lib/components/fields/LocalityField.js +0 -94
  137. package/lib/components/fields/LocationChooserField.d.ts +0 -27
  138. package/lib/components/fields/LocationChooserField.js +0 -440
  139. package/lib/components/fields/MapArrayField.d.ts +0 -78
  140. package/lib/components/fields/MapArrayField.js +0 -1783
  141. package/lib/components/fields/MapField.d.ts +0 -48
  142. package/lib/components/fields/MapField.js +0 -434
  143. package/lib/components/fields/MultiAnyToBooleanField.d.ts +0 -25
  144. package/lib/components/fields/MultiAnyToBooleanField.js +0 -100
  145. package/lib/components/fields/MultiArrayField.d.ts +0 -53
  146. package/lib/components/fields/MultiArrayField.js +0 -224
  147. package/lib/components/fields/MultiLanguageField.d.ts +0 -13
  148. package/lib/components/fields/MultiLanguageField.js +0 -52
  149. package/lib/components/fields/MultiTagArrayField.d.ts +0 -36
  150. package/lib/components/fields/MultiTagArrayField.js +0 -142
  151. package/lib/components/fields/NamedPlaceChooserField.d.ts +0 -29
  152. package/lib/components/fields/NamedPlaceChooserField.js +0 -380
  153. package/lib/components/fields/NamedPlaceSaverField.d.ts +0 -29
  154. package/lib/components/fields/NamedPlaceSaverField.js +0 -237
  155. package/lib/components/fields/NestField.d.ts +0 -148
  156. package/lib/components/fields/NestField.js +0 -289
  157. package/lib/components/fields/ObjectField.d.ts +0 -2
  158. package/lib/components/fields/ObjectField.js +0 -119
  159. package/lib/components/fields/PdfArrayField.d.ts +0 -21
  160. package/lib/components/fields/PdfArrayField.js +0 -40
  161. package/lib/components/fields/PrefillingArrayField.d.ts +0 -22
  162. package/lib/components/fields/PrefillingArrayField.js +0 -65
  163. package/lib/components/fields/SchemaField.d.ts +0 -7
  164. package/lib/components/fields/SchemaField.js +0 -109
  165. package/lib/components/fields/ScopeField.d.ts +0 -85
  166. package/lib/components/fields/ScopeField.js +0 -521
  167. package/lib/components/fields/SectionArrayField.d.ts +0 -38
  168. package/lib/components/fields/SectionArrayField.js +0 -618
  169. package/lib/components/fields/SelectTreeField.d.ts +0 -39
  170. package/lib/components/fields/SelectTreeField.js +0 -143
  171. package/lib/components/fields/SingleActiveArrayField.d.ts +0 -49
  172. package/lib/components/fields/SingleActiveArrayField.js +0 -974
  173. package/lib/components/fields/SingleItemArrayField.d.ts +0 -15
  174. package/lib/components/fields/SingleItemArrayField.js +0 -60
  175. package/lib/components/fields/SortArrayField.d.ts +0 -73
  176. package/lib/components/fields/SortArrayField.js +0 -351
  177. package/lib/components/fields/SplitField.d.ts +0 -28
  178. package/lib/components/fields/SplitField.js +0 -65
  179. package/lib/components/fields/StringToArrayField.d.ts +0 -24
  180. package/lib/components/fields/StringToArrayField.js +0 -48
  181. package/lib/components/fields/SumField.d.ts +0 -35
  182. package/lib/components/fields/SumField.js +0 -83
  183. package/lib/components/fields/TableField.d.ts +0 -18
  184. package/lib/components/fields/TableField.js +0 -136
  185. package/lib/components/fields/TagArrayField.d.ts +0 -38
  186. package/lib/components/fields/TagArrayField.js +0 -128
  187. package/lib/components/fields/ToggleAdditionalArrayFieldsField.d.ts +0 -26
  188. package/lib/components/fields/ToggleAdditionalArrayFieldsField.js +0 -81
  189. package/lib/components/fields/UiFieldApplierField.d.ts +0 -30
  190. package/lib/components/fields/UiFieldApplierField.js +0 -106
  191. package/lib/components/fields/UiFieldMapperArrayField.d.ts +0 -42
  192. package/lib/components/fields/UiFieldMapperArrayField.js +0 -121
  193. package/lib/components/fields/UnitCountShorthandField.d.ts +0 -22
  194. package/lib/components/fields/UnitCountShorthandField.js +0 -149
  195. package/lib/components/fields/UnitListShorthandArrayField.d.ts +0 -26
  196. package/lib/components/fields/UnitListShorthandArrayField.js +0 -108
  197. package/lib/components/fields/UnitShorthandField.d.ts +0 -32
  198. package/lib/components/fields/UnitShorthandField.js +0 -220
  199. package/lib/components/templates/ArrayFieldTemplate.d.ts +0 -85
  200. package/lib/components/templates/ArrayFieldTemplate.js +0 -417
  201. package/lib/components/templates/BaseInputTemplate.d.ts +0 -11
  202. package/lib/components/templates/BaseInputTemplate.js +0 -80
  203. package/lib/components/templates/DescriptionField.d.ts +0 -1
  204. package/lib/components/templates/DescriptionField.js +0 -37
  205. package/lib/components/templates/ErrorListTemplate.d.ts +0 -9
  206. package/lib/components/templates/ErrorListTemplate.js +0 -95
  207. package/lib/components/templates/FieldTemplate.d.ts +0 -6
  208. package/lib/components/templates/FieldTemplate.js +0 -112
  209. package/lib/components/templates/ObjectFieldTemplate.d.ts +0 -7
  210. package/lib/components/templates/ObjectFieldTemplate.js +0 -66
  211. package/lib/components/templates/TitleField.d.ts +0 -9
  212. package/lib/components/templates/TitleField.js +0 -51
  213. package/lib/components/widgets/AnyToBooleanWidget.d.ts +0 -20
  214. package/lib/components/widgets/AnyToBooleanWidget.js +0 -49
  215. package/lib/components/widgets/AutosuggestWidget.d.ts +0 -66
  216. package/lib/components/widgets/AutosuggestWidget.js +0 -1127
  217. package/lib/components/widgets/CheckboxWidget.d.ts +0 -37
  218. package/lib/components/widgets/CheckboxWidget.js +0 -139
  219. package/lib/components/widgets/DateTimeWidget.d.ts +0 -62
  220. package/lib/components/widgets/DateTimeWidget.js +0 -251
  221. package/lib/components/widgets/DateWidget.d.ts +0 -23
  222. package/lib/components/widgets/DateWidget.js +0 -41
  223. package/lib/components/widgets/HiddenWidget.d.ts +0 -15
  224. package/lib/components/widgets/HiddenWidget.js +0 -19
  225. package/lib/components/widgets/ImageSelectWidget.d.ts +0 -14
  226. package/lib/components/widgets/ImageSelectWidget.js +0 -57
  227. package/lib/components/widgets/InformalTaxonGroupChooserWidget.d.ts +0 -43
  228. package/lib/components/widgets/InformalTaxonGroupChooserWidget.js +0 -237
  229. package/lib/components/widgets/InputGroupWidget.d.ts +0 -21
  230. package/lib/components/widgets/InputGroupWidget.js +0 -36
  231. package/lib/components/widgets/InputWithDefaultValueButtonWidget.d.ts +0 -21
  232. package/lib/components/widgets/InputWithDefaultValueButtonWidget.js +0 -47
  233. package/lib/components/widgets/NumberWidget.d.ts +0 -13
  234. package/lib/components/widgets/NumberWidget.js +0 -21
  235. package/lib/components/widgets/PlainTextWidget.d.ts +0 -12
  236. package/lib/components/widgets/PlainTextWidget.js +0 -24
  237. package/lib/components/widgets/SelectWidget.d.ts +0 -52
  238. package/lib/components/widgets/SelectWidget.js +0 -158
  239. package/lib/components/widgets/SeparatedDateTimeWidget.d.ts +0 -19
  240. package/lib/components/widgets/SeparatedDateTimeWidget.js +0 -59
  241. package/lib/components/widgets/TaxonImageWidget.d.ts +0 -13
  242. package/lib/components/widgets/TaxonImageWidget.js +0 -30
  243. package/lib/components/widgets/TextSelectWidget.d.ts +0 -25
  244. package/lib/components/widgets/TextSelectWidget.js +0 -94
  245. package/lib/components/widgets/TextareaWidget.d.ts +0 -32
  246. package/lib/components/widgets/TextareaWidget.js +0 -87
  247. package/lib/components/widgets/TimeWidget.d.ts +0 -11
  248. package/lib/components/widgets/TimeWidget.js +0 -19
  249. package/lib/components/widgets/URLWidget.d.ts +0 -14
  250. package/lib/components/widgets/URLWidget.js +0 -12
  251. package/lib/components/widgets/UpperCaseWidget.d.ts +0 -13
  252. package/lib/components/widgets/UpperCaseWidget.js +0 -21
  253. package/lib/index.d.ts +0 -20
  254. package/lib/index.js +0 -50
  255. package/lib/services/blocker-service.d.ts +0 -11
  256. package/lib/services/blocker-service.js +0 -55
  257. package/lib/services/custom-event-service.d.ts +0 -17
  258. package/lib/services/custom-event-service.js +0 -35
  259. package/lib/services/dom-id-service.d.ts +0 -8
  260. package/lib/services/dom-id-service.js +0 -30
  261. package/lib/services/focus-service.d.ts +0 -13
  262. package/lib/services/focus-service.js +0 -60
  263. package/lib/services/id-service.d.ts +0 -22
  264. package/lib/services/id-service.js +0 -130
  265. package/lib/services/key-handler-service.d.ts +0 -56
  266. package/lib/services/key-handler-service.js +0 -184
  267. package/lib/services/root-instance-service.d.ts +0 -25
  268. package/lib/services/root-instance-service.js +0 -49
  269. package/lib/services/settings-service.d.ts +0 -34
  270. package/lib/services/settings-service.js +0 -154
  271. package/lib/services/singleton-map-service.d.ts +0 -23
  272. package/lib/services/singleton-map-service.js +0 -44
  273. package/lib/services/submit-hook-service.d.ts +0 -24
  274. package/lib/services/submit-hook-service.js +0 -73
  275. package/lib/styles.js +0 -4
  276. package/lib/themes/bs3.d.ts +0 -3
  277. package/lib/themes/bs3.js +0 -133
  278. package/lib/themes/bs5.d.ts +0 -3
  279. package/lib/themes/bs5.js +0 -111
  280. package/lib/themes/glyphicon-fa-mapping.d.ts +0 -3
  281. package/lib/themes/glyphicon-fa-mapping.js +0 -271
  282. package/lib/themes/stub.d.ts +0 -3
  283. package/lib/themes/stub.js +0 -82
  284. package/lib/themes/theme.d.ts +0 -233
  285. package/lib/themes/theme.js +0 -2
  286. package/lib/translations.json +0 -847
  287. package/lib/utils.d.ts +0 -171
  288. package/lib/utils.js +0 -1191
  289. package/lib/validation.d.ts +0 -7
  290. package/lib/validation.js +0 -141
  291. package/llol +0 -10
  292. package/llol.pdf +0 -10
  293. package/playwright-report/index.html +0 -62
  294. package/q +0 -196
  295. package/rename.sh +0 -24
  296. package/trip-report.spec.ts +0 -594
  297. /package/{lib/styles.d.ts → test-export/array-spec.d.ts} +0 -0
@@ -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
- } });