@luomus/laji-form 15.0.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 -176
  41. package/test-export/test-utils.js +218 -210
  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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const test_utils_1 = require("./test-utils");
13
+ const moment = require("moment");
14
+ describe("Date & time widgets", () => {
15
+ let form;
16
+ let widget;
17
+ const schema = {
18
+ type: "string"
19
+ };
20
+ const formData = null;
21
+ const today = moment();
22
+ const today0100 = moment(`${moment().format("YYYY-MM-DD")}T01:00`);
23
+ const yesterday = moment().add(-1, "days");
24
+ const ISO8601DateFormat = "YYYY-MM-DD";
25
+ const ISO8601TimeFormat = "HH:mm";
26
+ const ISO8601FullFormat = `${ISO8601DateFormat}T${ISO8601TimeFormat}`;
27
+ const displayDateFormat = "DD.MM.YYYY";
28
+ const displayTimeFormat = "HH.mm";
29
+ const displayFullFormat = `${displayDateFormat}, ${displayTimeFormat}`;
30
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
31
+ form = yield test_utils_1.createForm();
32
+ widget = form.getDateWidget("");
33
+ }));
34
+ describe("DateTimeWidget", () => {
35
+ const uiSchema = {
36
+ "ui:widget": "DateTimeWidget",
37
+ };
38
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
39
+ yield form.setState({ schema, uiSchema, formData });
40
+ }));
41
+ it("renders date button", () => __awaiter(void 0, void 0, void 0, function* () {
42
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$date)).toBe(true);
43
+ }));
44
+ it("renders time button", () => __awaiter(void 0, void 0, void 0, function* () {
45
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$time)).toBe(true);
46
+ }));
47
+ it("selecting date from calendar adds only date", () => __awaiter(void 0, void 0, void 0, function* () {
48
+ yield widget.buttons.$date.click();
49
+ yield widget.calendar.waitAnimation();
50
+ yield widget.calendar.$today.click();
51
+ expect(yield widget.$input.getAttribute("value")).toBe(today.format(displayDateFormat));
52
+ expect(yield form.getChangedData()).toBe(today.format(ISO8601DateFormat));
53
+ }));
54
+ it("selecting time adds time", () => __awaiter(void 0, void 0, void 0, function* () {
55
+ yield widget.buttons.$time.click();
56
+ yield widget.clock.waitAnimation();
57
+ yield widget.clock["$01:00"].click();
58
+ expect(yield widget.$input.getAttribute("value")).toBe(today0100.format(displayFullFormat));
59
+ expect(yield form.getChangedData()).toBe(today0100.format(ISO8601FullFormat));
60
+ }));
61
+ it("time can be typed", () => __awaiter(void 0, void 0, void 0, function* () {
62
+ yield test_utils_1.updateValue(widget.$input, `${today.format(displayDateFormat)}, 10`);
63
+ expect(yield widget.$input.getAttribute("value")).toBe(`${today.format(displayDateFormat)}, 10.00`);
64
+ expect(yield form.getChangedData()).toBe(`${today.format(ISO8601DateFormat)}T10:00`);
65
+ }));
66
+ it("time can be removed by clearing it from input", () => __awaiter(void 0, void 0, void 0, function* () {
67
+ yield test_utils_1.updateValue(widget.$input, today.format(displayDateFormat));
68
+ expect(yield widget.$input.getAttribute("value")).toBe(today.format(displayDateFormat));
69
+ expect(yield form.getChangedData()).toBe(today.format(ISO8601DateFormat));
70
+ }));
71
+ it("whole value can be cleared", () => __awaiter(void 0, void 0, void 0, function* () {
72
+ yield test_utils_1.updateValue(widget.$input, "");
73
+ expect(yield widget.$input.getAttribute("value")).toBe("");
74
+ expect(yield form.getChangedData()).toBe(null);
75
+ }));
76
+ it("date can be typed", () => __awaiter(void 0, void 0, void 0, function* () {
77
+ yield test_utils_1.updateValue(widget.$input, "2.4.2012");
78
+ expect(yield widget.$input.getAttribute("value")).toBe("02.04.2012");
79
+ expect(yield form.getChangedData()).toBe("2012-04-02");
80
+ }));
81
+ describe("today & yesterday buttons", () => {
82
+ it("not displayed by default", () => __awaiter(void 0, void 0, void 0, function* () {
83
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$today)).toBe(false);
84
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$yesterday)).toBe(false);
85
+ }));
86
+ it("displayed if showButtons true", () => __awaiter(void 0, void 0, void 0, function* () {
87
+ yield form.setState({ uiSchema: Object.assign(Object.assign({}, uiSchema), { "ui:options": { showButtons: true } }) });
88
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$today)).toBe(true);
89
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$yesterday)).toBe(true);
90
+ }));
91
+ it("yesterday works", () => __awaiter(void 0, void 0, void 0, function* () {
92
+ yield widget.buttons.$yesterday.click();
93
+ expect(yield widget.$input.getAttribute("value")).toBe(yesterday.format(displayDateFormat));
94
+ expect(yield form.getChangedData()).toBe(yesterday.format(ISO8601DateFormat));
95
+ }));
96
+ it("today works", () => __awaiter(void 0, void 0, void 0, function* () {
97
+ yield widget.buttons.$today.click();
98
+ expect(yield widget.$input.getAttribute("value")).toBe(today.format(displayDateFormat));
99
+ expect(yield form.getChangedData()).toBe(today.format(ISO8601DateFormat));
100
+ }));
101
+ });
102
+ describe("typing only year when option allowOnlyYear", () => {
103
+ const year = "" + moment().year();
104
+ it("is off should enter full date", () => __awaiter(void 0, void 0, void 0, function* () {
105
+ yield test_utils_1.updateValue(widget.$input, year);
106
+ expect(yield widget.$input.getAttribute("value")).toBe(`01.01.${year}`);
107
+ expect(yield form.getChangedData()).toBe(today.format(`${year}-01-01`));
108
+ }));
109
+ it("is on works", () => __awaiter(void 0, void 0, void 0, function* () {
110
+ yield form.setState({ uiSchema: Object.assign(Object.assign({}, uiSchema), { "ui:options": { allowOnlyYear: true } }) });
111
+ yield test_utils_1.updateValue(widget.$input, year);
112
+ expect(yield widget.$input.getAttribute("value")).toBe(year);
113
+ expect(yield form.getChangedData()).toBe(year);
114
+ }));
115
+ });
116
+ describe("same button", () => {
117
+ let startWidget;
118
+ let endWidget;
119
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
120
+ yield form.setState({
121
+ schema: { type: "object", properties: { start: { type: "string" }, end: { type: "string" } } },
122
+ uiSchema: {
123
+ start: Object.assign(Object.assign({}, uiSchema), { "ui:options": { showButtons: true } }),
124
+ end: Object.assign(Object.assign({}, uiSchema), { "ui:options": { showButtons: { same: { path: "/start" } } } })
125
+ },
126
+ formData: {}
127
+ });
128
+ startWidget = form.getDateWidget("start");
129
+ endWidget = form.getDateWidget("end");
130
+ }));
131
+ it("not displayed by if showButtons true", () => __awaiter(void 0, void 0, void 0, function* () {
132
+ expect(yield test_utils_1.isDisplayed(startWidget.buttons.$same)).toBe(false);
133
+ }));
134
+ it("displayed if showButtons has {same: true}", () => __awaiter(void 0, void 0, void 0, function* () {
135
+ expect(yield test_utils_1.isDisplayed(endWidget.buttons.$same)).toBe(true);
136
+ }));
137
+ it("click works", () => __awaiter(void 0, void 0, void 0, function* () {
138
+ yield test_utils_1.updateValue(startWidget.$input, "2.4.2012");
139
+ yield endWidget.buttons.$same.click();
140
+ expect(yield endWidget.$input.getAttribute("value")).toBe("02.04.2012");
141
+ expect((yield form.getChangedData()).end).toBe("2012-04-02");
142
+ }));
143
+ });
144
+ });
145
+ describe("DateWidget", () => {
146
+ const uiSchema = {
147
+ "ui:widget": "DateWidget",
148
+ };
149
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
150
+ yield form.setState({ schema, uiSchema, formData });
151
+ }));
152
+ it("renders date button", () => __awaiter(void 0, void 0, void 0, function* () {
153
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$date)).toBe(true);
154
+ }));
155
+ it("doesn't render time button", () => __awaiter(void 0, void 0, void 0, function* () {
156
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$time)).not.toBe(true);
157
+ }));
158
+ it("clears time if typed", () => __awaiter(void 0, void 0, void 0, function* () {
159
+ yield test_utils_1.updateValue(widget.$input, `${today.format(displayDateFormat)}, 10.00`);
160
+ expect(yield widget.$input.getAttribute("value")).toBe(today.format(displayDateFormat));
161
+ expect(yield form.getChangedData()).toBe(today.format(ISO8601DateFormat));
162
+ }));
163
+ });
164
+ describe("TimeWidget", () => {
165
+ const uiSchema = {
166
+ "ui:widget": "TimeWidget",
167
+ };
168
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
169
+ yield test_utils_1.updateValue(widget.$input, "");
170
+ yield form.setState({ schema, uiSchema });
171
+ }));
172
+ it("renders time button", () => __awaiter(void 0, void 0, void 0, function* () {
173
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$time)).toBe(true);
174
+ }));
175
+ it("doesn't render date button", () => __awaiter(void 0, void 0, void 0, function* () {
176
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$date)).not.toBe(true);
177
+ }));
178
+ it("time can be typed", () => __awaiter(void 0, void 0, void 0, function* () {
179
+ yield test_utils_1.updateValue(widget.$input, "10.00");
180
+ expect(yield widget.$input.getAttribute("value")).toBe("10.00");
181
+ expect(yield form.getChangedData()).toBe("10:00");
182
+ }));
183
+ it("showTimeList hides time button", () => __awaiter(void 0, void 0, void 0, function* () {
184
+ yield form.setState({ uiSchema: Object.assign(Object.assign({}, uiSchema), { "ui:options": { showTimeList: false } }) });
185
+ expect(yield test_utils_1.isDisplayed(widget.buttons.$time)).toBe(false);
186
+ }));
187
+ });
188
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const test_utils_1 = require("./test-utils");
13
+ const protractor_1 = require("protractor");
14
+ describe("Geocoder", () => {
15
+ let form;
16
+ const schema = {
17
+ type: "object",
18
+ properties: {
19
+ country: {
20
+ type: "string"
21
+ },
22
+ municipality: {
23
+ type: "string"
24
+ },
25
+ biologicalProvince: {
26
+ type: "string"
27
+ },
28
+ geometry: {
29
+ type: "object",
30
+ properties: {
31
+ coordinates: {
32
+ type: "array",
33
+ items: {
34
+ type: "number"
35
+ }
36
+ },
37
+ type: {
38
+ type: "string"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ };
44
+ const uiSchema = {
45
+ "ui:field": "GeocoderField"
46
+ };
47
+ const formData = { geometry: { type: "Point", coordinates: [25, 60] } };
48
+ const response = {
49
+ "status": "OK",
50
+ "results": [
51
+ {
52
+ "address_components": [
53
+ {
54
+ "long_name": "Nylandia",
55
+ "short_name": "N",
56
+ "types": [
57
+ "biogeographicalProvince"
58
+ ]
59
+ }
60
+ ],
61
+ "types": [
62
+ "biogeographicalProvince"
63
+ ]
64
+ },
65
+ {
66
+ "address_components": [
67
+ {
68
+ "short_name": "Helsinki",
69
+ "types": [
70
+ "municipality"
71
+ ]
72
+ }
73
+ ],
74
+ "formatted_address": "Helsinki",
75
+ "types": [
76
+ "municipality"
77
+ ]
78
+ }
79
+ ]
80
+ };
81
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
82
+ form = yield test_utils_1.createForm();
83
+ }));
84
+ it("parses location in Finland correctly", () => __awaiter(void 0, void 0, void 0, function* () {
85
+ const { resolve, remove } = yield form.setMockResponse("/coordinates/location", false);
86
+ yield form.setState({ schema, uiSchema, formData });
87
+ expect(yield form.$locate("country").$("input").getAttribute("value")).toBe("");
88
+ expect(yield form.$locate("municipality").$("input").getAttribute("value")).toBe("");
89
+ expect(yield form.$locate("biologicalProvince").$("input").getAttribute("value")).toBe("");
90
+ yield resolve(response);
91
+ yield remove();
92
+ expect(yield form.$locate("country").$("input").getAttribute("value")).toBe("Suomi");
93
+ expect(yield form.$locate("municipality").$("input").getAttribute("value")).toBe("Helsinki");
94
+ expect(yield form.$locate("biologicalProvince").$("input").getAttribute("value")).toBe("Nylandia");
95
+ }));
96
+ const $runningJobs = protractor_1.$(".running-jobs");
97
+ it("blocks submit until done", () => __awaiter(void 0, void 0, void 0, function* () {
98
+ const { resolve, remove } = yield form.setMockResponse("/coordinates/location", false);
99
+ yield form.setState({ schema, uiSchema, formData });
100
+ yield form.e("submit()");
101
+ expect(yield $runningJobs.isDisplayed()).toBe(true);
102
+ yield resolve(response);
103
+ yield remove();
104
+ expect(yield $runningJobs.isPresent()).toBe(false);
105
+ expect(yield form.$locate("country").$("input").getAttribute("value")).toBe("Suomi");
106
+ expect(yield form.getSubmittedData()).not.toBe(null);
107
+ }));
108
+ describe("rejecting", () => {
109
+ it("blocks submit", () => __awaiter(void 0, void 0, void 0, function* () {
110
+ const { reject, remove } = yield form.setMockResponse("/coordinates/location", false);
111
+ yield form.setState({ schema, uiSchema, formData });
112
+ yield form.setState({ formData: {} });
113
+ yield form.setState({ formData });
114
+ yield form.e("submit()");
115
+ expect(yield form.getSubmittedData()).toBe(null);
116
+ expect(yield $runningJobs.isDisplayed()).toBe(true);
117
+ yield reject();
118
+ yield remove();
119
+ expect(yield protractor_1.$$(".laji-form-failed-jobs-list .list-group-item").count()).toBe(1);
120
+ expect(yield $runningJobs.isPresent()).toBe(false);
121
+ expect(yield form.getSubmittedData()).not.toBe(null);
122
+ }));
123
+ it("and then locating again removes old bg job", () => __awaiter(void 0, void 0, void 0, function* () {
124
+ const { resolve, remove } = yield form.setMockResponse("/coordinates/location", false);
125
+ yield form.setState({ schema, uiSchema, formData });
126
+ yield form.e("submit()");
127
+ expect(yield protractor_1.$$(".laji-form-failed-jobs-list .list-group-item").count()).toBe(0);
128
+ expect(yield $runningJobs.isDisplayed()).toBe(true);
129
+ yield resolve(response);
130
+ yield remove();
131
+ expect(yield protractor_1.$$(".laji-form-failed-jobs-list .list-group-item").count()).toBe(0);
132
+ expect(yield $runningJobs.isPresent()).toBe(false);
133
+ }));
134
+ });
135
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const test_utils_1 = require("./test-utils");
13
+ const protractor_1 = require("protractor");
14
+ const properties = require("../properties.json");
15
+ describe("Image array", () => {
16
+ let form;
17
+ let imgArrayField;
18
+ const schema = {
19
+ type: "array",
20
+ items: {
21
+ type: "string"
22
+ }
23
+ };
24
+ const uiSchema = {
25
+ "ui:field": "ImageArrayField",
26
+ "ui:options": {
27
+ "deleteConfirmPlacement": "bottom"
28
+ }
29
+ };
30
+ const uiSchemaContext = {
31
+ creator: properties.userId
32
+ };
33
+ describe("", () => {
34
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
35
+ form = yield test_utils_1.createForm();
36
+ yield form.setState({ schema, uiSchema, uiSchemaContext });
37
+ imgArrayField = form.getImageArrayField("");
38
+ }));
39
+ it("renders correctly", () => __awaiter(void 0, void 0, void 0, function* () {
40
+ expect(yield imgArrayField.$container.isDisplayed()).toBe(true);
41
+ expect(yield imgArrayField.$dropzone.isDisplayed()).toBe(true);
42
+ }));
43
+ it("adds image", () => __awaiter(void 0, void 0, void 0, function* () {
44
+ const { resolve, remove } = yield form.mockImageUpload("");
45
+ yield resolve();
46
+ expect(yield imgArrayField.$$imgs.count()).toBe(1);
47
+ yield remove();
48
+ }));
49
+ it("open metadata modal on click", () => __awaiter(void 0, void 0, void 0, function* () {
50
+ const { resolve, remove } = yield form.setMockResponse("/images/mock", false);
51
+ yield imgArrayField.$$imgInteractives.first().click();
52
+ yield resolve(test_utils_1.mockImageMetadata);
53
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf(imgArrayField.$modal), 5000, "metadata modal didn't show up");
54
+ expect(yield imgArrayField.$modal.isDisplayed()).toBe(true);
55
+ yield remove();
56
+ yield imgArrayField.$modalClose.click();
57
+ }));
58
+ it("deletes image", () => __awaiter(void 0, void 0, void 0, function* () {
59
+ yield protractor_1.browser.sleep(1000);
60
+ expect(yield imgArrayField.$$imgs.count()).toBe(1);
61
+ expect(yield imgArrayField.$$imgRemoves.first().isDisplayed()).toBe(true);
62
+ const { resolve, remove } = yield form.setMockResponse("/images/mock", false);
63
+ yield imgArrayField.$$imgRemoves.first().click();
64
+ yield imgArrayField.$imgRemoveConfirmButton("0").click();
65
+ expect(yield imgArrayField.$$imgs.count()).toBe(0);
66
+ yield resolve();
67
+ yield remove();
68
+ }));
69
+ });
70
+ it("Image saves even if the image component unmounts", () => __awaiter(void 0, void 0, void 0, function* () {
71
+ const _schema = {
72
+ type: "array",
73
+ minItems: 1,
74
+ items: {
75
+ type: "object",
76
+ properties: {
77
+ images: schema
78
+ }
79
+ }
80
+ };
81
+ const _uiSchema = {
82
+ items: {
83
+ images: uiSchema
84
+ }
85
+ };
86
+ yield form.setState({ schema: _schema, uiSchema: _uiSchema, formData: [{}] });
87
+ const { resolve, remove } = yield form.mockImageUpload("0");
88
+ yield form.setState({ uiSchema: Object.assign(Object.assign({}, _uiSchema), { "ui:field": "HiddenField" }) });
89
+ yield resolve();
90
+ yield form.setState({ uiSchema: _uiSchema });
91
+ expect(yield protractor_1.$$(".media-container").count()).toBe(1);
92
+ yield remove();
93
+ }));
94
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const test_utils_1 = require("./test-utils");
13
+ const protractor_1 = require("protractor");
14
+ const merge = require("deepmerge");
15
+ describe("InjectField", () => {
16
+ const schema = {
17
+ type: "object",
18
+ properties: {
19
+ a: {
20
+ type: "object",
21
+ properties: {
22
+ aa: {
23
+ type: "object",
24
+ properties: {
25
+ aaa: { type: "string" }
26
+ }
27
+ },
28
+ ab: { type: "string" }
29
+ }
30
+ },
31
+ b: {
32
+ type: "object",
33
+ properties: {
34
+ ba: { type: "string" }
35
+ }
36
+ }
37
+ }
38
+ };
39
+ const uiSchemaBase = {
40
+ a: {
41
+ "classNames": "foobar",
42
+ aa: {
43
+ aaa: {
44
+ "classNames": "foo"
45
+ }
46
+ }
47
+ },
48
+ b: {
49
+ ba: {
50
+ "classNames": "bar"
51
+ }
52
+ }
53
+ };
54
+ const test = (injections) => {
55
+ let uiSchema = uiSchemaBase;
56
+ for (let injection of injections) {
57
+ const [target, field] = injection;
58
+ uiSchema = merge(uiSchema, {
59
+ "ui:field": "InjectField",
60
+ "ui:options": {
61
+ injections: [
62
+ {
63
+ fields: [field],
64
+ target
65
+ }
66
+ ]
67
+ }
68
+ });
69
+ }
70
+ let form;
71
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
72
+ form = yield test_utils_1.createForm({ schema, uiSchema });
73
+ }));
74
+ it("displays all fields and their ids are kept intact", () => __awaiter(void 0, void 0, void 0, function* () {
75
+ for (let locator of ["a", "a.aa", "a.ab", "a.ab", "b", "b.ba"]) {
76
+ expect(yield form.$locate(locator).isPresent()).toBe(true, `${locator} not displayed`);
77
+ }
78
+ }));
79
+ it("displays injected field as child of target", () => __awaiter(void 0, void 0, void 0, function* () {
80
+ for (let injection of injections) {
81
+ const [target, field] = injection;
82
+ expect(yield protractor_1.$(test_utils_1.lajiFormLocator(test_utils_1.maybeJSONPointerToLocator(target)))
83
+ .$(test_utils_1.lajiFormLocator(test_utils_1.maybeJSONPointerToLocator(field)))
84
+ .isDisplayed()).toBe(true);
85
+ }
86
+ }));
87
+ it("uiSchema is kept for injected fields and target", () => __awaiter(void 0, void 0, void 0, function* () {
88
+ expect(yield form.$locate("a").getAttribute("className")).toMatch(uiSchemaBase.a.classNames);
89
+ expect(yield form.$locate("a.aa.aaa").getAttribute("className")).toMatch(uiSchemaBase.a.aa.aaa.classNames);
90
+ expect(yield form.$locate("b.ba").getAttribute("className")).toMatch(uiSchemaBase.b.ba.classNames);
91
+ }));
92
+ it("modifying formData works and doesn't spill properties", () => __awaiter(void 0, void 0, void 0, function* () {
93
+ yield test_utils_1.updateValue(form.$getInputWidget("a.aa.aaa"), "foo");
94
+ yield test_utils_1.updateValue(form.$getInputWidget("a.ab"), "foofoo");
95
+ yield test_utils_1.updateValue(form.$getInputWidget("b.ba"), "bar");
96
+ expect(yield form.$getInputWidget("a.aa.aaa").getAttribute("value")).toBe("foo");
97
+ expect(yield form.$getInputWidget("a.ab").getAttribute("value")).toBe("foofoo");
98
+ expect(yield form.$getInputWidget("b.ba").getAttribute("value")).toBe("bar");
99
+ expect(yield form.getChangedData()).toEqual({
100
+ a: {
101
+ aa: {
102
+ aaa: "foo"
103
+ },
104
+ ab: "foofoo"
105
+ },
106
+ b: {
107
+ ba: "bar"
108
+ }
109
+ });
110
+ }));
111
+ it("errors are rendered", () => __awaiter(void 0, void 0, void 0, function* () {
112
+ yield form.setState({ formData: {
113
+ a: {
114
+ aa: {
115
+ aaa: 1
116
+ },
117
+ ab: 1
118
+ },
119
+ b: {
120
+ ba: 1
121
+ }
122
+ }
123
+ });
124
+ yield form.submit();
125
+ expect(yield form.$$getFieldErrors("a.aa.aaa").count()).toBe(1);
126
+ expect(yield form.$$getFieldErrors("a.ab").count()).toBe(1);
127
+ expect(yield form.$$getFieldErrors("b.ba").count()).toBe(1);
128
+ }));
129
+ };
130
+ describe("simple field, simple target", () => {
131
+ test([["b", "a"]]);
132
+ });
133
+ describe("simple field, simple JSON pointer target", () => {
134
+ test([["/b", "a"]]);
135
+ });
136
+ describe("simple target, JSON pointer field", () => {
137
+ test([["b", "/a/aa/aaa"]]);
138
+ });
139
+ describe("JSON pointer target, JSON Pointer field", () => {
140
+ test([["/a/aa", "/b/ba"]]);
141
+ });
142
+ describe("second injection depending on first injection", () => {
143
+ test([
144
+ ["/a/aa", "/a/ab"],
145
+ ["/b", "/a/aa"]
146
+ ]);
147
+ });
148
+ });
@@ -0,0 +1 @@
1
+ export {};