@stubber/form-fields 1.7.10 → 2.0.0

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 (254) hide show
  1. package/dist/{fields2 → form-fields}/sub/currency-field.svelte +2 -3
  2. package/dist/{fields2 → form-fields}/sub/select-field.svelte +6 -3
  3. package/dist/{fields2 → form-fields}/utils.d.ts +1 -0
  4. package/dist/{fields2 → form-fields}/utils.js +9 -1
  5. package/dist/utils/input_regex_mask.d.ts +3 -0
  6. package/dist/utils/input_regex_mask.js +25 -0
  7. package/package.json +4 -8
  8. package/dist/Field.svelte +0 -36
  9. package/dist/Field.svelte.d.ts +0 -33
  10. package/dist/Form.svelte +0 -34
  11. package/dist/Form.svelte.d.ts +0 -31
  12. package/dist/NullFieldWrapper.svelte +0 -6
  13. package/dist/NullFieldWrapper.svelte.d.ts +0 -27
  14. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte +0 -74
  15. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte.d.ts +0 -31
  16. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte +0 -8
  17. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte.d.ts +0 -27
  18. package/dist/fields/components/AgGrid.svelte +0 -46
  19. package/dist/fields/components/AgGrid.svelte.d.ts +0 -20
  20. package/dist/fields/components/Arraybuilder.svelte +0 -98
  21. package/dist/fields/components/Arraybuilder.svelte.d.ts +0 -27
  22. package/dist/fields/components/Checkbox.svelte +0 -89
  23. package/dist/fields/components/Checkbox.svelte.d.ts +0 -25
  24. package/dist/fields/components/CheckboxAutocomplete.svelte +0 -95
  25. package/dist/fields/components/CheckboxAutocomplete.svelte.d.ts +0 -25
  26. package/dist/fields/components/Code.svelte +0 -133
  27. package/dist/fields/components/Code.svelte.d.ts +0 -18
  28. package/dist/fields/components/Contactselector.svelte +0 -71
  29. package/dist/fields/components/Contactselector.svelte.d.ts +0 -27
  30. package/dist/fields/components/Currency.svelte +0 -264
  31. package/dist/fields/components/Currency.svelte.d.ts +0 -25
  32. package/dist/fields/components/Dataindication.svelte +0 -31
  33. package/dist/fields/components/Dataindication.svelte.d.ts +0 -25
  34. package/dist/fields/components/Date.svelte +0 -97
  35. package/dist/fields/components/Date.svelte.d.ts +0 -25
  36. package/dist/fields/components/Datetime.svelte +0 -97
  37. package/dist/fields/components/Datetime.svelte.d.ts +0 -25
  38. package/dist/fields/components/Email.svelte +0 -125
  39. package/dist/fields/components/Email.svelte.d.ts +0 -25
  40. package/dist/fields/components/Fieldbuilder.svelte +0 -343
  41. package/dist/fields/components/Fieldbuilder.svelte.d.ts +0 -27
  42. package/dist/fields/components/Fieldsbuilder.svelte +0 -122
  43. package/dist/fields/components/Fieldsbuilder.svelte.d.ts +0 -27
  44. package/dist/fields/components/File.svelte +0 -231
  45. package/dist/fields/components/File.svelte.d.ts +0 -27
  46. package/dist/fields/components/Heading.svelte +0 -17
  47. package/dist/fields/components/Heading.svelte.d.ts +0 -25
  48. package/dist/fields/components/Hidden.svelte +0 -7
  49. package/dist/fields/components/Hidden.svelte.d.ts +0 -25
  50. package/dist/fields/components/Hiddenlocation.svelte +0 -28
  51. package/dist/fields/components/Hiddenlocation.svelte.d.ts +0 -25
  52. package/dist/fields/components/Html.svelte +0 -13
  53. package/dist/fields/components/Html.svelte.d.ts +0 -25
  54. package/dist/fields/components/Jsoneditor.svelte +0 -133
  55. package/dist/fields/components/Jsoneditor.svelte.d.ts +0 -25
  56. package/dist/fields/components/Map.svelte +0 -192
  57. package/dist/fields/components/Map.svelte.d.ts +0 -27
  58. package/dist/fields/components/Multicheckbox.svelte +0 -77
  59. package/dist/fields/components/Multicheckbox.svelte.d.ts +0 -25
  60. package/dist/fields/components/Multistep.svelte +0 -86
  61. package/dist/fields/components/Multistep.svelte.d.ts +0 -27
  62. package/dist/fields/components/Note.svelte +0 -92
  63. package/dist/fields/components/Note.svelte.d.ts +0 -25
  64. package/dist/fields/components/Number.svelte +0 -119
  65. package/dist/fields/components/Number.svelte.d.ts +0 -25
  66. package/dist/fields/components/Objectbuilder.svelte +0 -154
  67. package/dist/fields/components/Objectbuilder.svelte.d.ts +0 -27
  68. package/dist/fields/components/Qrcodescanner.svelte +0 -196
  69. package/dist/fields/components/Qrcodescanner.svelte.d.ts +0 -25
  70. package/dist/fields/components/Radio.svelte +0 -117
  71. package/dist/fields/components/Radio.svelte.d.ts +0 -25
  72. package/dist/fields/components/Renderfield.svelte +0 -58
  73. package/dist/fields/components/Renderfield.svelte.d.ts +0 -27
  74. package/dist/fields/components/Screenrecorder.svelte +0 -276
  75. package/dist/fields/components/Screenrecorder.svelte.d.ts +0 -27
  76. package/dist/fields/components/Screenshot.svelte +0 -269
  77. package/dist/fields/components/Screenshot.svelte.d.ts +0 -27
  78. package/dist/fields/components/Scrollandreaddisplay.svelte +0 -122
  79. package/dist/fields/components/Scrollandreaddisplay.svelte.d.ts +0 -25
  80. package/dist/fields/components/Section.svelte +0 -87
  81. package/dist/fields/components/Section.svelte.d.ts +0 -27
  82. package/dist/fields/components/Select.svelte +0 -161
  83. package/dist/fields/components/Select.svelte.d.ts +0 -31
  84. package/dist/fields/components/Selectresource.svelte +0 -57
  85. package/dist/fields/components/Selectresource.svelte.d.ts +0 -27
  86. package/dist/fields/components/Signature.svelte +0 -152
  87. package/dist/fields/components/Signature.svelte.d.ts +0 -27
  88. package/dist/fields/components/Slider.svelte +0 -101
  89. package/dist/fields/components/Slider.svelte.d.ts +0 -25
  90. package/dist/fields/components/SmartText.svelte +0 -351
  91. package/dist/fields/components/SmartText.svelte.d.ts +0 -25
  92. package/dist/fields/components/Telephone.svelte +0 -156
  93. package/dist/fields/components/Telephone.svelte.d.ts +0 -25
  94. package/dist/fields/components/Text.svelte +0 -107
  95. package/dist/fields/components/Text.svelte.d.ts +0 -25
  96. package/dist/fields/components/Voicenote.svelte +0 -267
  97. package/dist/fields/components/Voicenote.svelte.d.ts +0 -27
  98. package/dist/fields/components/index.d.ts +0 -84
  99. package/dist/fields/components/index.js +0 -85
  100. package/dist/fields/definitions/all.json +0 -38
  101. package/dist/fields/definitions/arraybuilder.json +0 -39
  102. package/dist/fields/definitions/checkbox.json +0 -44
  103. package/dist/fields/definitions/code.json +0 -15
  104. package/dist/fields/definitions/contactselector.json +0 -15
  105. package/dist/fields/definitions/currency.json +0 -42
  106. package/dist/fields/definitions/dataindication.json +0 -16
  107. package/dist/fields/definitions/date.json +0 -16
  108. package/dist/fields/definitions/datetime.json +0 -15
  109. package/dist/fields/definitions/email.json +0 -16
  110. package/dist/fields/definitions/fieldbuilder.json +0 -64
  111. package/dist/fields/definitions/fieldsbuilder.json +0 -38
  112. package/dist/fields/definitions/file.json +0 -42
  113. package/dist/fields/definitions/grid.json +0 -47
  114. package/dist/fields/definitions/heading.json +0 -38
  115. package/dist/fields/definitions/hidden.json +0 -89
  116. package/dist/fields/definitions/hiddenlocation.json +0 -15
  117. package/dist/fields/definitions/html.json +0 -34
  118. package/dist/fields/definitions/index.d.ts +0 -90
  119. package/dist/fields/definitions/index.js +0 -99
  120. package/dist/fields/definitions/jsoneditor.json +0 -33
  121. package/dist/fields/definitions/map.json +0 -36
  122. package/dist/fields/definitions/multicheckbox.json +0 -47
  123. package/dist/fields/definitions/multistep.json +0 -35
  124. package/dist/fields/definitions/note.json +0 -16
  125. package/dist/fields/definitions/number.json +0 -42
  126. package/dist/fields/definitions/objectbuilder.json +0 -39
  127. package/dist/fields/definitions/placeholder.json +0 -15
  128. package/dist/fields/definitions/qrcodescanner.json +0 -16
  129. package/dist/fields/definitions/radio.json +0 -47
  130. package/dist/fields/definitions/renderfield.json +0 -36
  131. package/dist/fields/definitions/richtext.json +0 -16
  132. package/dist/fields/definitions/screenrecorder.json +0 -42
  133. package/dist/fields/definitions/screenshot.json +0 -42
  134. package/dist/fields/definitions/scrollandreaddisplay.json +0 -49
  135. package/dist/fields/definitions/section.json +0 -50
  136. package/dist/fields/definitions/select.json +0 -47
  137. package/dist/fields/definitions/selectresource.json +0 -48
  138. package/dist/fields/definitions/signature.json +0 -16
  139. package/dist/fields/definitions/slider.json +0 -78
  140. package/dist/fields/definitions/smarttext.json +0 -101
  141. package/dist/fields/definitions/telephone.json +0 -16
  142. package/dist/fields/definitions/text.json +0 -35
  143. package/dist/fields/definitions/validfieldtype.json +0 -220
  144. package/dist/fields/definitions/voicenote.json +0 -43
  145. package/dist/index.d.ts +0 -2
  146. package/dist/index.js +0 -3
  147. package/dist/thirdparty/mapbox/GeoCoder.svelte +0 -10
  148. package/dist/thirdparty/mapbox/GeoCoder.svelte.d.ts +0 -27
  149. package/dist/thirdparty/mapbox/Map.svelte +0 -30
  150. package/dist/thirdparty/mapbox/Map.svelte.d.ts +0 -22
  151. package/dist/thirdparty/mapbox/MapMarker.svelte +0 -13
  152. package/dist/thirdparty/mapbox/MapMarker.svelte.d.ts +0 -33
  153. package/dist/utils/createField.d.ts +0 -6
  154. package/dist/utils/createField.js +0 -33
  155. package/dist/utils/createForm.d.ts +0 -1
  156. package/dist/utils/createForm.js +0 -501
  157. package/dist/utils/index.d.ts +0 -18
  158. package/dist/utils/index.js +0 -126
  159. package/dist/utils/syncing.d.ts +0 -11
  160. package/dist/utils/syncing.js +0 -134
  161. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte +0 -0
  162. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte.d.ts +0 -0
  163. /package/dist/{fields2 → form-fields}/FieldLabel.svelte +0 -0
  164. /package/dist/{fields2 → form-fields}/FieldLabel.svelte.d.ts +0 -0
  165. /package/dist/{fields2 → form-fields}/FieldMessage.svelte +0 -0
  166. /package/dist/{fields2 → form-fields}/FieldMessage.svelte.d.ts +0 -0
  167. /package/dist/{fields2 → form-fields}/Form.svelte +0 -0
  168. /package/dist/{fields2 → form-fields}/Form.svelte.d.ts +0 -0
  169. /package/dist/{fields2 → form-fields}/fileserver.d.ts +0 -0
  170. /package/dist/{fields2 → form-fields}/fileserver.js +0 -0
  171. /package/dist/{fields2 → form-fields}/form-field.svelte +0 -0
  172. /package/dist/{fields2 → form-fields}/form-field.svelte.d.ts +0 -0
  173. /package/dist/{fields2 → form-fields}/index.d.ts +0 -0
  174. /package/dist/{fields2 → form-fields}/index.js +0 -0
  175. /package/dist/{fields2 → form-fields}/interfaces.d.ts +0 -0
  176. /package/dist/{fields2 → form-fields}/interfaces.js +0 -0
  177. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte +0 -0
  178. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte.d.ts +0 -0
  179. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte +0 -0
  180. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte.d.ts +0 -0
  181. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte +0 -0
  182. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte.d.ts +0 -0
  183. /package/dist/{fields2 → form-fields}/sub/code-field.svelte +0 -0
  184. /package/dist/{fields2 → form-fields}/sub/code-field.svelte.d.ts +0 -0
  185. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte +0 -0
  186. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte.d.ts +0 -0
  187. /package/dist/{fields2 → form-fields}/sub/currency-field.svelte.d.ts +0 -0
  188. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte +0 -0
  189. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte.d.ts +0 -0
  190. /package/dist/{fields2 → form-fields}/sub/date-field.svelte +0 -0
  191. /package/dist/{fields2 → form-fields}/sub/date-field.svelte.d.ts +0 -0
  192. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte +0 -0
  193. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte.d.ts +0 -0
  194. /package/dist/{fields2 → form-fields}/sub/email-field.svelte +0 -0
  195. /package/dist/{fields2 → form-fields}/sub/email-field.svelte.d.ts +0 -0
  196. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte +0 -0
  197. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte.d.ts +0 -0
  198. /package/dist/{fields2 → form-fields}/sub/file-field.svelte +0 -0
  199. /package/dist/{fields2 → form-fields}/sub/file-field.svelte.d.ts +0 -0
  200. /package/dist/{fields2 → form-fields}/sub/grid-field.svelte +0 -0
  201. /package/dist/{fields2 → form-fields}/sub/grid-field.svelte.d.ts +0 -0
  202. /package/dist/{fields2 → form-fields}/sub/heading-field.svelte +0 -0
  203. /package/dist/{fields2 → form-fields}/sub/heading-field.svelte.d.ts +0 -0
  204. /package/dist/{fields2 → form-fields}/sub/hidden-field.svelte +0 -0
  205. /package/dist/{fields2 → form-fields}/sub/hidden-field.svelte.d.ts +0 -0
  206. /package/dist/{fields2 → form-fields}/sub/hidden-location-field.svelte +0 -0
  207. /package/dist/{fields2 → form-fields}/sub/hidden-location-field.svelte.d.ts +0 -0
  208. /package/dist/{fields2 → form-fields}/sub/html-field.svelte +0 -0
  209. /package/dist/{fields2 → form-fields}/sub/html-field.svelte.d.ts +0 -0
  210. /package/dist/{fields2 → form-fields}/sub/json-editor-bound.svelte +0 -0
  211. /package/dist/{fields2 → form-fields}/sub/json-editor-bound.svelte.d.ts +0 -0
  212. /package/dist/{fields2 → form-fields}/sub/jsoneditor-field.svelte +0 -0
  213. /package/dist/{fields2 → form-fields}/sub/jsoneditor-field.svelte.d.ts +0 -0
  214. /package/dist/{fields2 → form-fields}/sub/map-field.svelte +0 -0
  215. /package/dist/{fields2 → form-fields}/sub/map-field.svelte.d.ts +0 -0
  216. /package/dist/{fields2 → form-fields}/sub/multi-checkbox-field.svelte +0 -0
  217. /package/dist/{fields2 → form-fields}/sub/multi-checkbox-field.svelte.d.ts +0 -0
  218. /package/dist/{fields2 → form-fields}/sub/multistep-field.svelte +0 -0
  219. /package/dist/{fields2 → form-fields}/sub/multistep-field.svelte.d.ts +0 -0
  220. /package/dist/{fields2 → form-fields}/sub/note-field.svelte +0 -0
  221. /package/dist/{fields2 → form-fields}/sub/note-field.svelte.d.ts +0 -0
  222. /package/dist/{fields2 → form-fields}/sub/number-field.svelte +0 -0
  223. /package/dist/{fields2 → form-fields}/sub/number-field.svelte.d.ts +0 -0
  224. /package/dist/{fields2 → form-fields}/sub/object-builder-field.svelte +0 -0
  225. /package/dist/{fields2 → form-fields}/sub/object-builder-field.svelte.d.ts +0 -0
  226. /package/dist/{fields2 → form-fields}/sub/qr-code-scanner-field.svelte +0 -0
  227. /package/dist/{fields2 → form-fields}/sub/qr-code-scanner-field.svelte.d.ts +0 -0
  228. /package/dist/{fields2 → form-fields}/sub/radio-field.svelte +0 -0
  229. /package/dist/{fields2 → form-fields}/sub/radio-field.svelte.d.ts +0 -0
  230. /package/dist/{fields2 → form-fields}/sub/screenrecorder-field.svelte +0 -0
  231. /package/dist/{fields2 → form-fields}/sub/screenrecorder-field.svelte.d.ts +0 -0
  232. /package/dist/{fields2 → form-fields}/sub/screenshot-field.svelte +0 -0
  233. /package/dist/{fields2 → form-fields}/sub/screenshot-field.svelte.d.ts +0 -0
  234. /package/dist/{fields2 → form-fields}/sub/scroll-and-read-display-field.svelte +0 -0
  235. /package/dist/{fields2 → form-fields}/sub/scroll-and-read-display-field.svelte.d.ts +0 -0
  236. /package/dist/{fields2 → form-fields}/sub/section-field.svelte +0 -0
  237. /package/dist/{fields2 → form-fields}/sub/section-field.svelte.d.ts +0 -0
  238. /package/dist/{fields2 → form-fields}/sub/select-field.svelte.d.ts +0 -0
  239. /package/dist/{fields2 → form-fields}/sub/selectresource-field.svelte +0 -0
  240. /package/dist/{fields2 → form-fields}/sub/selectresource-field.svelte.d.ts +0 -0
  241. /package/dist/{fields2 → form-fields}/sub/signature-field.svelte +0 -0
  242. /package/dist/{fields2 → form-fields}/sub/signature-field.svelte.d.ts +0 -0
  243. /package/dist/{fields2 → form-fields}/sub/slider-field.svelte +0 -0
  244. /package/dist/{fields2 → form-fields}/sub/slider-field.svelte.d.ts +0 -0
  245. /package/dist/{fields2 → form-fields}/sub/smart-text-field.svelte +0 -0
  246. /package/dist/{fields2 → form-fields}/sub/smart-text-field.svelte.d.ts +0 -0
  247. /package/dist/{fields2 → form-fields}/sub/telephone-field.svelte +0 -0
  248. /package/dist/{fields2 → form-fields}/sub/telephone-field.svelte.d.ts +0 -0
  249. /package/dist/{fields2 → form-fields}/sub/text-field.svelte +0 -0
  250. /package/dist/{fields2 → form-fields}/sub/text-field.svelte.d.ts +0 -0
  251. /package/dist/{fields2 → form-fields}/sub/voicenote-field.svelte +0 -0
  252. /package/dist/{fields2 → form-fields}/sub/voicenote-field.svelte.d.ts +0 -0
  253. /package/dist/{fields2 → form-fields}/validations/validate_field.d.ts +0 -0
  254. /package/dist/{fields2 → form-fields}/validations/validate_field.js +0 -0
@@ -1,501 +0,0 @@
1
- import _ from "lodash-es";
2
- import { get, writable } from "svelte/store";
3
- import * as utils from "./index.js";
4
- import { deepEqual } from "fast-equals";
5
- import jsonata from "jsonata";
6
-
7
- async function evaluateFieldConditions(fieldContext) {
8
- let result = true;
9
- if (!fieldContext?.field?.spec?.conditions) return result;
10
- for (let c of fieldContext?.field?.spec?.conditions || []) {
11
- try {
12
- let pass = await jsonata(c).evaluate(fieldContext);
13
- if (!pass) {
14
- result = false;
15
- break;
16
- }
17
- } catch (err) {
18
- console.warn(err);
19
- }
20
- }
21
- return result;
22
- }
23
-
24
- async function evaluateFieldValidations(fieldContext) {
25
- let result = {
26
- valid: true,
27
- message: "",
28
- };
29
- let curValue = fieldContext?.field?.data;
30
- let validations = fieldContext?.field?.spec?.validations || [];
31
- if (!_.isArray(validations)) validations = [];
32
-
33
- for (let v of validations) {
34
- let { validationtype, valid_message, invalid_message, params } = v;
35
-
36
- let validationPassed = true;
37
- switch (validationtype) {
38
- case "required":
39
- if (curValue === undefined || curValue === null || curValue === "" || curValue === false) {
40
- validationPassed = false;
41
- }
42
- break;
43
- case "regex": {
44
- let regex = new RegExp(params?.regex);
45
- if (!regex.test(curValue)) {
46
- validationPassed = false;
47
- }
48
- break;
49
- }
50
- case "jsonata": {
51
- let result = false;
52
- try {
53
- result = await jsonata(params?.jsonata).evaluate(fieldContext);
54
- } catch (err) {
55
- console.log(err);
56
- }
57
- if (result !== true) {
58
- validationPassed = false;
59
- }
60
- break;
61
- }
62
- // default
63
- default:
64
- console.warn("validation type not found", validationtype);
65
- break;
66
- }
67
-
68
- result = {
69
- valid: validationPassed,
70
- message: validationPassed ? valid_message : invalid_message,
71
- };
72
-
73
- if (!validationPassed) {
74
- break;
75
- }
76
- }
77
- return result;
78
- }
79
-
80
- async function evaluateValues(obj, fieldcontext) {
81
- if (!_.isObject(obj)) return await jsonata(obj).evaluate(fieldcontext);
82
- let res = {};
83
- for (let [key, expression] of Object.entries(obj)) {
84
- try {
85
- // use lodash to check that expression is a string
86
- if (!_.isString(expression)) res[key] = await evaluateValues(_.cloneDeep(expression));
87
- else res[key] = await jsonata(expression).evaluate(fieldcontext);
88
- } catch (err) {
89
- console.warn(err);
90
- }
91
- }
92
- return res;
93
- }
94
-
95
- async function handleFormChange(s, getField) {
96
- // console.log("stubber-form-fields-pkg - change detected...");
97
- let _clone = _.cloneDeep(get(s));
98
-
99
- // loop through all fields in _clone.state
100
- for (let state_key of Object.keys(_clone?.state || {})) {
101
- let field = getField(state_key);
102
- if (!field) continue;
103
- let fieldcontext = _.cloneDeep({
104
- form: _clone,
105
- field: {
106
- ...field,
107
- data: field?.data?.base,
108
- },
109
- });
110
-
111
- // conditions
112
- let conditions_passed = await evaluateFieldConditions(fieldcontext);
113
- _.set(_clone, `state.${state_key}.conditions_passed`, conditions_passed);
114
- _.set(_clone, `state.${state_key}.conditions_checked`, true);
115
-
116
- // validations
117
- _.set(_clone, `state.${state_key}.validation`, await evaluateFieldValidations(fieldcontext));
118
- _.set(_clone, `state.${state_key}.validations_checked`, true);
119
-
120
- // calculate hidden field values
121
- if (fieldcontext.field.spec.fieldtype === "hidden" && conditions_passed) {
122
- let value_settings = fieldcontext?.field?.spec?.params?.value;
123
- let value_result;
124
- if (!_.isObject(value_settings)) {
125
- value_result = value_settings || fieldcontext?.field?.data?.base;
126
- } else {
127
- switch (value_settings?.type) {
128
- case "string":
129
- value_result = value_settings?.expression;
130
- break;
131
- case "jsonata":
132
- try {
133
- let expression = jsonata(value_settings?.expression);
134
- let result = await expression.evaluate(fieldcontext);
135
- value_result = result;
136
- } catch (err) {
137
- console.warn(err);
138
- }
139
- break;
140
- case "apicall": {
141
- let api_params = value_settings?.api_params || {};
142
- let result = _.cloneDeep(fieldcontext?.field?.data);
143
- if (!deepEqual(api_params, fieldcontext?.field?.state?.internal?.api_params)) {
144
- // call api here
145
- let { url, method, headers, body } = api_params;
146
- if (method && url) {
147
- try {
148
- let fetchOptions = {};
149
- fetchOptions.method = method.toUpperCase();
150
- if (_.isArray(headers)) {
151
- for (let h of headers) {
152
- let [key, value] = h.split(":");
153
- fetchOptions.headers[key] = value;
154
- }
155
- }
156
- if (body) fetchOptions.body = JSON.stringify(body);
157
- let res = await fetch(url, fetchOptions);
158
- let resJSON = await utils.rawResToJSON(res);
159
- result = resJSON;
160
- _.set(_clone, `state.${state_key}.internal.api_params`, api_params);
161
- _.set(_clone, `state.${state_key}.internal.last_call_at`, new Date().getTime());
162
- } catch (err) {
163
- console.warn(err);
164
- }
165
- }
166
- }
167
- value_result = _.cloneDeep(result);
168
- break;
169
- }
170
- }
171
- }
172
- _.set(_clone, fieldcontext?.field?.state?.data_location, value_result);
173
- }
174
-
175
- // calculate the dynamic part for renderfield fields
176
- if (fieldcontext.field.spec.fieldtype === "renderfield" && conditions_passed) {
177
- let dynamic_fieldspec = _.cloneDeep(fieldcontext?.field?.spec) || {};
178
- _.unset(dynamic_fieldspec, "__key");
179
- _.unset(dynamic_fieldspec, "name");
180
- _.unset(dynamic_fieldspec, "fieldtype");
181
- _.unset(dynamic_fieldspec, "conditions");
182
- _.unset(dynamic_fieldspec, "validations");
183
- _.set(dynamic_fieldspec, "details.datapath", "");
184
- _.set(dynamic_fieldspec, "details.keyname", "");
185
-
186
- let dynamic_part = await evaluateValues(
187
- _.cloneDeep(dynamic_fieldspec?.params?.dynamic_fieldspec),
188
- fieldcontext
189
- );
190
-
191
- dynamic_fieldspec = _.merge(dynamic_fieldspec, dynamic_part);
192
- _.unset(dynamic_fieldspec, "params.dynamic_fieldspec");
193
- if (dynamic_fieldspec.fieldtype === "renderfield") _.unset(dynamic_fieldspec, "fieldtype"); // prevent loops
194
- _.set(dynamic_fieldspec, "details.keyname", "");
195
- _.set(dynamic_fieldspec, "details.datapath", "");
196
-
197
- _.set(_clone, `state.${state_key}.dynamic_fieldspec`, dynamic_fieldspec);
198
- }
199
- }
200
-
201
- let current_store = get(s);
202
- if (!deepEqual(current_store, _clone)) {
203
- // console.log("stubber-form-fields-pkg - change affected more changes...");
204
- s.set(_clone);
205
- }
206
- }
207
-
208
- export function createForm(opts) {
209
- const dependencies = opts?.dependencies || {};
210
-
211
- const store = opts?.form || writable({});
212
-
213
- let debounceHandleFormChange = utils.debounce(handleFormChange, 100);
214
- store.subscribe(() => {
215
- debounceHandleFormChange(store, getField);
216
- });
217
-
218
- function initialize(_d) {
219
- // console.log("initializing form...");
220
-
221
- let d = _.cloneDeep(_d);
222
-
223
- let root_spec = d?.spec || {};
224
- root_spec.fields = root_spec.fields || {};
225
-
226
- store.update((s) => {
227
- return {
228
- initial_form: _d,
229
- root_spec,
230
- spec: {},
231
- data: d?.data || {},
232
- state: {},
233
- attachments: [],
234
- render_index: (s?.render_index || 0) + 1,
235
- };
236
- });
237
- }
238
-
239
- function addField(spec, parent_field_state_key) {
240
- let state_key;
241
- let raw_fieldspec = _.cloneDeep(spec);
242
-
243
- store.update((s) => {
244
- let field_key = spec.__key;
245
- if (!field_key) {
246
- console.warn("field.__key is required. Please provide a unique key for this field.");
247
- return s;
248
- }
249
-
250
- let _clone = _.cloneDeep(s);
251
- let parent_field_state = _clone?.state?.[parent_field_state_key];
252
- let parent_field_spec = _.get(_clone, parent_field_state?.spec_location);
253
- state_key = field_key;
254
-
255
- if (parent_field_state?.state_key) {
256
- state_key = parent_field_state.state_key + "_" + state_key;
257
- }
258
-
259
- // console.log("adding field...", state_key);
260
-
261
- // initialize field_spec
262
- let field_spec = _.cloneDeep(spec);
263
- field_spec.fields = spec?.fields || {};
264
- field_spec.params = spec?.params || {};
265
- field_spec.fieldtype = spec.fieldtype || "text";
266
- field_spec.name = field_key;
267
- field_spec.title = spec.title || utils.getHumanReadableName(field_key);
268
- field_spec.description = spec.description || "";
269
- field_spec.conditions = spec.conditions || [];
270
- field_spec.validations = spec.validations || [];
271
- field_spec.hide_label = spec.hide_label || false;
272
- field_spec.details = spec?.details || {};
273
- field_spec.details.datapath = spec?.details?.datapath || "";
274
- field_spec.details.keyname = spec?.details?.keyname || field_key;
275
- if (parent_field_state_key) {
276
- field_spec.parent_field = {
277
- state_key: parent_field_state_key,
278
- __key: parent_field_spec?.__key,
279
- };
280
- }
281
-
282
- // initialize field_state
283
- let parent_spec_location = parent_field_state?.spec_location || "spec";
284
- let parent_data_location = parent_field_state?.data_location || "data";
285
- let spec_location = parent_spec_location + ".fields." + field_key;
286
- let data_location =
287
- parent_data_location +
288
- "." +
289
- (field_spec?.details?.datapath ? field_spec.details.datapath + "." : "") +
290
- field_spec?.details?.keyname;
291
- let field_state = {
292
- raw_fieldspec,
293
- state_key,
294
- parent_field_state_key,
295
- spec_location,
296
- data_location,
297
- internal: {},
298
- };
299
-
300
- // set field defaults (initvalues)
301
- let current_value = _.get(_clone, data_location);
302
- // field has never been set, check for a default
303
- if (current_value === undefined) {
304
- let initvalue_default =
305
- spec?.initvalue?.has_default !== false ? spec?.initvalue?.default : undefined;
306
- if (initvalue_default !== undefined) {
307
- _.set(_clone, data_location, initvalue_default);
308
- }
309
- }
310
- // field has been set, check for an override
311
- else {
312
- let initvalue_override =
313
- spec?.initvalue?.has_override !== false ? spec?.initvalue?.override : undefined;
314
- if (initvalue_override !== undefined) {
315
- _.set(_clone, data_location, initvalue_override);
316
- }
317
- }
318
-
319
- _.set(_clone, `state.${field_state.state_key}`, field_state);
320
- _.set(_clone, field_state.spec_location, field_spec);
321
-
322
- return _clone;
323
- });
324
-
325
- return {
326
- state_key,
327
- removeField: () => removeField(state_key),
328
- };
329
- }
330
-
331
- function removeField(state_key) {
332
- if (state_key) {
333
- // console.log("removing field...", state_key);
334
- store.update((s) => {
335
- let _clone = _.cloneDeep(s);
336
-
337
- function removeChildren(c, parent_field_state_key) {
338
- for (let s of Object.values(c?.state || {})) {
339
- if (parent_field_state_key !== s?.parent_field_state_key) continue;
340
- c = removeChildren(c, s?.state_key);
341
- _.unset(c, `state.${s.state_key}`);
342
- }
343
- return c;
344
- }
345
-
346
- _clone = removeChildren(_clone, state_key);
347
-
348
- _.unset(_clone, `state.${state_key}`);
349
-
350
- return _clone;
351
- });
352
- }
353
- }
354
-
355
- function getField(state_key) {
356
- // field_state
357
- let current_store = get(store);
358
- let field_state = current_store?.state?.[state_key];
359
- if (!field_state) return undefined;
360
-
361
- // field_spec
362
- let spec_location = field_state.spec_location;
363
- let field_spec = _.get(current_store, spec_location);
364
-
365
- // field_data
366
- let data_location = field_state?.data_location;
367
- let key = data_location?.split(".").pop();
368
- let datapath = data_location?.split(".").slice(0, -1).join(".");
369
- let nestedObject = datapath ? _.get(current_store, datapath) : current_store;
370
- let field_data = {};
371
- for (let [k, v] of Object.entries(nestedObject || {})) {
372
- if (k.indexOf(key) === 0 && key !== undefined) {
373
- field_data[`base${k.slice(key?.length)}`] = v;
374
- }
375
- }
376
-
377
- return _.cloneDeep({
378
- data: field_data || {},
379
- spec: field_spec || {},
380
- state: field_state || {},
381
- });
382
- }
383
-
384
- function setField(state_key, update) {
385
- store.update((s) => {
386
- let _clone = _.cloneDeep(s);
387
-
388
- // set field_state
389
- _.set(_clone, `state.${state_key}`, update?.state);
390
-
391
- // get the updated state
392
- let field_state = _.get(_clone, `state.${state_key}`);
393
-
394
- if (!field_state) return _clone;
395
-
396
- // get spec_location and data_location
397
- let spec_location = field_state.spec_location;
398
- let data_location = field_state.data_location;
399
-
400
- // set field_spec
401
- _.set(_clone, spec_location, update?.spec);
402
-
403
- // set field_data
404
- for (let [k, v] of Object.entries(update?.data)) {
405
- let key = data_location + k.replace(/^base/, "");
406
- _.set(_clone, key, v);
407
- }
408
-
409
- return _clone;
410
- });
411
- }
412
-
413
- async function uploadFiles(files, filesForm) {
414
- if (!filesForm) {
415
- if (!files?.length) return;
416
- //create formdata from files
417
- filesForm = new FormData();
418
- files.forEach((file) => {
419
- filesForm.append(file.name, file);
420
- });
421
- }
422
- let url = dependencies?.file?.upload_url;
423
- //send request
424
- let resJSON;
425
- try {
426
- let res = await fetch(url, {
427
- method: "POST",
428
- body: filesForm,
429
- });
430
- resJSON = await utils.rawResToJSON(res);
431
- } catch (err) {
432
- console.warn(err);
433
- }
434
- let uploaded_files = resJSON?.data?.uploaded_files ?? [];
435
- let failed_files =
436
- files &&
437
- files
438
- .map((f) => {
439
- return { filename: f.path || f?.name };
440
- })
441
- .filter((f) => !uploaded_files.find((uf) => uf.filename === f.filename));
442
- return {
443
- uploaded_files,
444
- failed_files,
445
- };
446
- }
447
-
448
- function appendAttachment(attachment) {
449
- console.log("append attachment here...", attachment);
450
- store.update((s) => {
451
- let attachments = _.cloneDeep(s?.attachments || []);
452
- attachments.push(attachment);
453
- return {
454
- ...s,
455
- attachments,
456
- };
457
- });
458
- }
459
-
460
- function removeAttachment(attachment) {
461
- console.log("remove attachment here...", attachment);
462
- store.update((s) => {
463
- let attachments = _.cloneDeep(s?.attachments || []);
464
- attachments = attachments.filter((a) => a.fileuuid !== attachment?.fileuuid);
465
- return {
466
- ...s,
467
- attachments,
468
- };
469
- });
470
- }
471
-
472
- async function submit() {
473
- // loop through all the fields and run the pre_submit function
474
- let current_store = get(store);
475
- let state = current_store?.state;
476
- let pre_submit_results = {};
477
- for (let [state_key, field] of Object.entries(state)) {
478
- let pre_submit = field?.internal?.pre_submit;
479
- if (pre_submit) {
480
- let result = await pre_submit();
481
- pre_submit_results[state_key] = result;
482
- }
483
- }
484
- // console.log("pre_submit_results", pre_submit_results);
485
- return _.cloneDeep(get(store));
486
- }
487
-
488
- return {
489
- ...store,
490
- dependencies,
491
- initialize,
492
- addField,
493
- getField,
494
- setField,
495
- removeField,
496
- uploadFiles,
497
- appendAttachment,
498
- removeAttachment,
499
- submit,
500
- };
501
- }
@@ -1,18 +0,0 @@
1
- export function mapFieldToComponent(fieldSettings: any): any;
2
- export function sortObjectsBy__order(objects: any): any;
3
- export function getHumanReadableName(snakeName: any): any;
4
- export function clickOutside(element: any, callbackFunction: any): {
5
- update(newCallbackFunction: any): void;
6
- destroy(): void;
7
- };
8
- export function inputRegexMask(input: any, regex: any): {
9
- destroy(): void;
10
- };
11
- export function rawResToJSON(rawRes: any): Promise<any>;
12
- export function debounce(func: any, debounce: any, precall: any): (...args: any[]) => void;
13
- export function getFieldsToRender(fields: any): any;
14
- export function unequalDerived(s: any, func: any): {
15
- subscribe: (this: void, run: import("svelte/store").Subscriber<any>, invalidate?: import("svelte/store").Invalidator<any> | undefined) => import("svelte/store").Unsubscriber;
16
- };
17
- export { createForm } from "./createForm.js";
18
- export { createField } from "./createField.js";
@@ -1,126 +0,0 @@
1
- import _ from "lodash-es";
2
- import { components } from "../fields/components/index.js";
3
- import { derived, writable, get } from "svelte/store";
4
- import { deepEqual } from "fast-equals";
5
-
6
- export { createForm } from "./createForm.js";
7
- export { createField } from "./createField.js";
8
-
9
- export function mapFieldToComponent(fieldSettings) {
10
- let fieldcomponent = components[fieldSettings?.fieldtype];
11
- if (!fieldcomponent) return null;
12
- return fieldcomponent;
13
- }
14
-
15
- export function sortObjectsBy__order(objects) {
16
- if (!objects) return null;
17
- let sortedObjects = _.orderBy(objects, ["__order"], ["asc"]);
18
- return sortedObjects;
19
- }
20
-
21
- export function getHumanReadableName(snakeName) {
22
- let humanReadableName = snakeName
23
- .split("_")
24
- .filter(Boolean)
25
- .map((word) => word[0].toUpperCase() + word.slice(1))
26
- .join(" ");
27
- return humanReadableName;
28
- }
29
-
30
- export function clickOutside(element, callbackFunction) {
31
- function onClick(event) {
32
- if (!element.contains(event.target)) {
33
- callbackFunction();
34
- }
35
- }
36
-
37
- document.body.addEventListener("click", onClick);
38
-
39
- return {
40
- update(newCallbackFunction) {
41
- callbackFunction = newCallbackFunction;
42
- },
43
- destroy() {
44
- document.body.removeEventListener("click", onClick);
45
- },
46
- };
47
- }
48
-
49
- export function inputRegexMask(input, regex) {
50
- let lastValidValue;
51
-
52
- function handleBeforeInput(event) {
53
- lastValidValue = event.target.value;
54
- }
55
-
56
- function handleInput(event) {
57
- const { value, selectionStart } = event.target;
58
- if (!regex.test(event.target.value) && event.target.value) {
59
- event.target.value = lastValidValue;
60
- const cursorPlace = selectionStart - (value.length - event.target.value.length);
61
- requestAnimationFrame(() => event.target.setSelectionRange(cursorPlace, cursorPlace));
62
- return;
63
- }
64
-
65
- lastValidValue = value;
66
- }
67
-
68
- input.addEventListener("beforeinput", handleBeforeInput);
69
- input.addEventListener("input", handleInput);
70
-
71
- return {
72
- destroy() {
73
- input.removeEventListener("beforeinput", handleBeforeInput);
74
- input.removeEventListener("input", handleInput);
75
- },
76
- };
77
- }
78
-
79
- export async function rawResToJSON(rawRes) {
80
- let contentType = rawRes.headers.get("Content-Type");
81
- let isJSON = contentType.indexOf("application/json") !== -1;
82
- return isJSON ? await rawRes.json() : {};
83
- }
84
-
85
- export function debounce(func, debounce, precall) {
86
- let timeout;
87
- return (...args) => {
88
- let is_precalled = false;
89
- if (precall) {
90
- precall = false;
91
- is_precalled = true;
92
- func(...args);
93
- }
94
- clearTimeout(timeout);
95
- timeout = setTimeout(() => {
96
- if (!is_precalled) func(...args);
97
- }, debounce);
98
- };
99
- }
100
-
101
- export function getFieldsToRender(fields) {
102
- if (!_.isObject(fields)) return null;
103
- let fields_array = Object.entries(fields)
104
- .map(([__key, spec]) => {
105
- return {
106
- ...spec,
107
- __key,
108
- };
109
- })
110
- .filter((f) => Boolean(f.__key));
111
- return sortObjectsBy__order(fields_array);
112
- }
113
-
114
- export function unequalDerived(s, func) {
115
- const _d = derived(s, func);
116
-
117
- const _s = writable(get(_d));
118
-
119
- _d.subscribe((v) => {
120
- if (!deepEqual(v, get(_s))) _s.set(v);
121
- });
122
-
123
- return {
124
- subscribe: _s.subscribe,
125
- };
126
- }
@@ -1,11 +0,0 @@
1
- export function syncStoreToStore(store_a: any, store_b: any, a_to_b: any, b_to_a: any, debounce_a_to_b: any, debounce_b_to_a: any): {
2
- destroy: () => void;
3
- } | undefined;
4
- export function syncStoreToValue(store_a: any, init_b: any, a_to_b: any, b_to_a: any, update_value: any): {
5
- destroy: () => void;
6
- notifyValueChange: (v: any) => void;
7
- };
8
- export function syncValueToStore(init_a: any, store_b: any, a_to_b: any, b_to_a: any, update_value: any): {
9
- destroy: () => void;
10
- notifyValueChange: (v: any) => void;
11
- };