@stubber/form-fields 1.7.8 → 1.8.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/file-field.svelte +17 -25
  3. package/dist/{fields2 → form-fields}/sub/select-field.svelte +6 -3
  4. package/dist/{fields2 → form-fields}/utils.d.ts +1 -0
  5. package/dist/{fields2 → form-fields}/utils.js +9 -1
  6. package/dist/utils/input_regex_mask.d.ts +3 -0
  7. package/dist/utils/input_regex_mask.js +25 -0
  8. package/package.json +4 -8
  9. package/dist/Field.svelte +0 -36
  10. package/dist/Field.svelte.d.ts +0 -33
  11. package/dist/Form.svelte +0 -34
  12. package/dist/Form.svelte.d.ts +0 -31
  13. package/dist/NullFieldWrapper.svelte +0 -6
  14. package/dist/NullFieldWrapper.svelte.d.ts +0 -27
  15. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte +0 -74
  16. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte.d.ts +0 -31
  17. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte +0 -8
  18. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte.d.ts +0 -27
  19. package/dist/fields/components/AgGrid.svelte +0 -46
  20. package/dist/fields/components/AgGrid.svelte.d.ts +0 -20
  21. package/dist/fields/components/Arraybuilder.svelte +0 -98
  22. package/dist/fields/components/Arraybuilder.svelte.d.ts +0 -27
  23. package/dist/fields/components/Checkbox.svelte +0 -89
  24. package/dist/fields/components/Checkbox.svelte.d.ts +0 -25
  25. package/dist/fields/components/CheckboxAutocomplete.svelte +0 -95
  26. package/dist/fields/components/CheckboxAutocomplete.svelte.d.ts +0 -25
  27. package/dist/fields/components/Code.svelte +0 -133
  28. package/dist/fields/components/Code.svelte.d.ts +0 -18
  29. package/dist/fields/components/Contactselector.svelte +0 -71
  30. package/dist/fields/components/Contactselector.svelte.d.ts +0 -27
  31. package/dist/fields/components/Currency.svelte +0 -264
  32. package/dist/fields/components/Currency.svelte.d.ts +0 -25
  33. package/dist/fields/components/Dataindication.svelte +0 -31
  34. package/dist/fields/components/Dataindication.svelte.d.ts +0 -25
  35. package/dist/fields/components/Date.svelte +0 -97
  36. package/dist/fields/components/Date.svelte.d.ts +0 -25
  37. package/dist/fields/components/Datetime.svelte +0 -97
  38. package/dist/fields/components/Datetime.svelte.d.ts +0 -25
  39. package/dist/fields/components/Email.svelte +0 -125
  40. package/dist/fields/components/Email.svelte.d.ts +0 -25
  41. package/dist/fields/components/Fieldbuilder.svelte +0 -343
  42. package/dist/fields/components/Fieldbuilder.svelte.d.ts +0 -27
  43. package/dist/fields/components/Fieldsbuilder.svelte +0 -122
  44. package/dist/fields/components/Fieldsbuilder.svelte.d.ts +0 -27
  45. package/dist/fields/components/File.svelte +0 -231
  46. package/dist/fields/components/File.svelte.d.ts +0 -27
  47. package/dist/fields/components/Heading.svelte +0 -17
  48. package/dist/fields/components/Heading.svelte.d.ts +0 -25
  49. package/dist/fields/components/Hidden.svelte +0 -7
  50. package/dist/fields/components/Hidden.svelte.d.ts +0 -25
  51. package/dist/fields/components/Hiddenlocation.svelte +0 -28
  52. package/dist/fields/components/Hiddenlocation.svelte.d.ts +0 -25
  53. package/dist/fields/components/Html.svelte +0 -13
  54. package/dist/fields/components/Html.svelte.d.ts +0 -25
  55. package/dist/fields/components/Jsoneditor.svelte +0 -133
  56. package/dist/fields/components/Jsoneditor.svelte.d.ts +0 -25
  57. package/dist/fields/components/Map.svelte +0 -192
  58. package/dist/fields/components/Map.svelte.d.ts +0 -27
  59. package/dist/fields/components/Multicheckbox.svelte +0 -77
  60. package/dist/fields/components/Multicheckbox.svelte.d.ts +0 -25
  61. package/dist/fields/components/Multistep.svelte +0 -86
  62. package/dist/fields/components/Multistep.svelte.d.ts +0 -27
  63. package/dist/fields/components/Note.svelte +0 -92
  64. package/dist/fields/components/Note.svelte.d.ts +0 -25
  65. package/dist/fields/components/Number.svelte +0 -119
  66. package/dist/fields/components/Number.svelte.d.ts +0 -25
  67. package/dist/fields/components/Objectbuilder.svelte +0 -154
  68. package/dist/fields/components/Objectbuilder.svelte.d.ts +0 -27
  69. package/dist/fields/components/Qrcodescanner.svelte +0 -196
  70. package/dist/fields/components/Qrcodescanner.svelte.d.ts +0 -25
  71. package/dist/fields/components/Radio.svelte +0 -117
  72. package/dist/fields/components/Radio.svelte.d.ts +0 -25
  73. package/dist/fields/components/Renderfield.svelte +0 -58
  74. package/dist/fields/components/Renderfield.svelte.d.ts +0 -27
  75. package/dist/fields/components/Screenrecorder.svelte +0 -276
  76. package/dist/fields/components/Screenrecorder.svelte.d.ts +0 -27
  77. package/dist/fields/components/Screenshot.svelte +0 -269
  78. package/dist/fields/components/Screenshot.svelte.d.ts +0 -27
  79. package/dist/fields/components/Scrollandreaddisplay.svelte +0 -122
  80. package/dist/fields/components/Scrollandreaddisplay.svelte.d.ts +0 -25
  81. package/dist/fields/components/Section.svelte +0 -87
  82. package/dist/fields/components/Section.svelte.d.ts +0 -27
  83. package/dist/fields/components/Select.svelte +0 -161
  84. package/dist/fields/components/Select.svelte.d.ts +0 -31
  85. package/dist/fields/components/Selectresource.svelte +0 -57
  86. package/dist/fields/components/Selectresource.svelte.d.ts +0 -27
  87. package/dist/fields/components/Signature.svelte +0 -152
  88. package/dist/fields/components/Signature.svelte.d.ts +0 -27
  89. package/dist/fields/components/Slider.svelte +0 -101
  90. package/dist/fields/components/Slider.svelte.d.ts +0 -25
  91. package/dist/fields/components/SmartText.svelte +0 -351
  92. package/dist/fields/components/SmartText.svelte.d.ts +0 -25
  93. package/dist/fields/components/Telephone.svelte +0 -156
  94. package/dist/fields/components/Telephone.svelte.d.ts +0 -25
  95. package/dist/fields/components/Text.svelte +0 -107
  96. package/dist/fields/components/Text.svelte.d.ts +0 -25
  97. package/dist/fields/components/Voicenote.svelte +0 -267
  98. package/dist/fields/components/Voicenote.svelte.d.ts +0 -27
  99. package/dist/fields/components/index.d.ts +0 -84
  100. package/dist/fields/components/index.js +0 -85
  101. package/dist/fields/definitions/all.json +0 -38
  102. package/dist/fields/definitions/arraybuilder.json +0 -39
  103. package/dist/fields/definitions/checkbox.json +0 -44
  104. package/dist/fields/definitions/code.json +0 -15
  105. package/dist/fields/definitions/contactselector.json +0 -15
  106. package/dist/fields/definitions/currency.json +0 -42
  107. package/dist/fields/definitions/dataindication.json +0 -16
  108. package/dist/fields/definitions/date.json +0 -16
  109. package/dist/fields/definitions/datetime.json +0 -15
  110. package/dist/fields/definitions/email.json +0 -16
  111. package/dist/fields/definitions/fieldbuilder.json +0 -64
  112. package/dist/fields/definitions/fieldsbuilder.json +0 -38
  113. package/dist/fields/definitions/file.json +0 -42
  114. package/dist/fields/definitions/grid.json +0 -47
  115. package/dist/fields/definitions/heading.json +0 -38
  116. package/dist/fields/definitions/hidden.json +0 -89
  117. package/dist/fields/definitions/hiddenlocation.json +0 -15
  118. package/dist/fields/definitions/html.json +0 -34
  119. package/dist/fields/definitions/index.d.ts +0 -90
  120. package/dist/fields/definitions/index.js +0 -99
  121. package/dist/fields/definitions/jsoneditor.json +0 -33
  122. package/dist/fields/definitions/map.json +0 -36
  123. package/dist/fields/definitions/multicheckbox.json +0 -47
  124. package/dist/fields/definitions/multistep.json +0 -35
  125. package/dist/fields/definitions/note.json +0 -16
  126. package/dist/fields/definitions/number.json +0 -42
  127. package/dist/fields/definitions/objectbuilder.json +0 -39
  128. package/dist/fields/definitions/placeholder.json +0 -15
  129. package/dist/fields/definitions/qrcodescanner.json +0 -16
  130. package/dist/fields/definitions/radio.json +0 -47
  131. package/dist/fields/definitions/renderfield.json +0 -36
  132. package/dist/fields/definitions/richtext.json +0 -16
  133. package/dist/fields/definitions/screenrecorder.json +0 -42
  134. package/dist/fields/definitions/screenshot.json +0 -42
  135. package/dist/fields/definitions/scrollandreaddisplay.json +0 -49
  136. package/dist/fields/definitions/section.json +0 -50
  137. package/dist/fields/definitions/select.json +0 -47
  138. package/dist/fields/definitions/selectresource.json +0 -48
  139. package/dist/fields/definitions/signature.json +0 -16
  140. package/dist/fields/definitions/slider.json +0 -78
  141. package/dist/fields/definitions/smarttext.json +0 -101
  142. package/dist/fields/definitions/telephone.json +0 -16
  143. package/dist/fields/definitions/text.json +0 -35
  144. package/dist/fields/definitions/validfieldtype.json +0 -220
  145. package/dist/fields/definitions/voicenote.json +0 -43
  146. package/dist/index.d.ts +0 -2
  147. package/dist/index.js +0 -3
  148. package/dist/thirdparty/mapbox/GeoCoder.svelte +0 -10
  149. package/dist/thirdparty/mapbox/GeoCoder.svelte.d.ts +0 -27
  150. package/dist/thirdparty/mapbox/Map.svelte +0 -30
  151. package/dist/thirdparty/mapbox/Map.svelte.d.ts +0 -22
  152. package/dist/thirdparty/mapbox/MapMarker.svelte +0 -13
  153. package/dist/thirdparty/mapbox/MapMarker.svelte.d.ts +0 -33
  154. package/dist/utils/createField.d.ts +0 -6
  155. package/dist/utils/createField.js +0 -33
  156. package/dist/utils/createForm.d.ts +0 -1
  157. package/dist/utils/createForm.js +0 -501
  158. package/dist/utils/index.d.ts +0 -18
  159. package/dist/utils/index.js +0 -126
  160. package/dist/utils/syncing.d.ts +0 -11
  161. package/dist/utils/syncing.js +0 -134
  162. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte +0 -0
  163. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte.d.ts +0 -0
  164. /package/dist/{fields2 → form-fields}/FieldLabel.svelte +0 -0
  165. /package/dist/{fields2 → form-fields}/FieldLabel.svelte.d.ts +0 -0
  166. /package/dist/{fields2 → form-fields}/FieldMessage.svelte +0 -0
  167. /package/dist/{fields2 → form-fields}/FieldMessage.svelte.d.ts +0 -0
  168. /package/dist/{fields2 → form-fields}/Form.svelte +0 -0
  169. /package/dist/{fields2 → form-fields}/Form.svelte.d.ts +0 -0
  170. /package/dist/{fields2 → form-fields}/fileserver.d.ts +0 -0
  171. /package/dist/{fields2 → form-fields}/fileserver.js +0 -0
  172. /package/dist/{fields2 → form-fields}/form-field.svelte +0 -0
  173. /package/dist/{fields2 → form-fields}/form-field.svelte.d.ts +0 -0
  174. /package/dist/{fields2 → form-fields}/index.d.ts +0 -0
  175. /package/dist/{fields2 → form-fields}/index.js +0 -0
  176. /package/dist/{fields2 → form-fields}/interfaces.d.ts +0 -0
  177. /package/dist/{fields2 → form-fields}/interfaces.js +0 -0
  178. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte +0 -0
  179. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte.d.ts +0 -0
  180. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte +0 -0
  181. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte.d.ts +0 -0
  182. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte +0 -0
  183. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte.d.ts +0 -0
  184. /package/dist/{fields2 → form-fields}/sub/code-field.svelte +0 -0
  185. /package/dist/{fields2 → form-fields}/sub/code-field.svelte.d.ts +0 -0
  186. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte +0 -0
  187. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte.d.ts +0 -0
  188. /package/dist/{fields2 → form-fields}/sub/currency-field.svelte.d.ts +0 -0
  189. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte +0 -0
  190. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte.d.ts +0 -0
  191. /package/dist/{fields2 → form-fields}/sub/date-field.svelte +0 -0
  192. /package/dist/{fields2 → form-fields}/sub/date-field.svelte.d.ts +0 -0
  193. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte +0 -0
  194. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte.d.ts +0 -0
  195. /package/dist/{fields2 → form-fields}/sub/email-field.svelte +0 -0
  196. /package/dist/{fields2 → form-fields}/sub/email-field.svelte.d.ts +0 -0
  197. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte +0 -0
  198. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte.d.ts +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
- };