@worksafevictoria/wcl7.5 1.1.10 → 1.1.12

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 (214) hide show
  1. package/jest.config.js +9 -7
  2. package/package.json +6 -5
  3. package/src/components/Paragraphs/Accordion/index.stories.js +1 -0
  4. package/src/components/Paragraphs/Breakout/index.stories.js +1 -0
  5. package/src/components/Paragraphs/BrowseContent/index.stories.js +1 -0
  6. package/src/components/Paragraphs/Calculator/Constants.js +2 -2
  7. package/src/components/Paragraphs/Calculator/index.stories.js +1 -0
  8. package/src/components/Paragraphs/Directory/Records/CJ/index.vue +3 -3
  9. package/src/components/Paragraphs/Directory/Records/ISP/index.vue +3 -3
  10. package/src/components/Paragraphs/Directory/Records/PRS/index.vue +2 -2
  11. package/src/components/Paragraphs/Directory/Records/PRS/recordContent.vue +3 -3
  12. package/src/components/Paragraphs/Directory/Records/PRS/recordDetails.vue +3 -3
  13. package/src/components/Paragraphs/Directory/Records/index.vue +3 -3
  14. package/src/components/Paragraphs/Directory/index.vue +4 -4
  15. package/src/components/Paragraphs/ListGroup/Link/list-link.stories.js +1 -0
  16. package/src/components/Paragraphs/ListGroup/list-group.stories.js +1 -0
  17. package/src/components/Paragraphs/ListGroup/navigation-card.stories.js +1 -0
  18. package/src/components/Paragraphs/MarketingBanner/index.stories.js +1 -0
  19. package/src/components/Paragraphs/ProofPoints/index.stories.js +19 -20
  20. package/src/components/Paragraphs/RelatedInformation/index.stories.js +7 -0
  21. package/src/components/Paragraphs/Webform/index.stories.js +30 -29
  22. package/src/components/Paragraphs/Webform/index.vue +10 -7
  23. package/src/components/SubComponents/FormInstance/components/alert/index.vue +129 -0
  24. package/src/components/SubComponents/FormInstance/components/custom/base-formio.js +77 -0
  25. package/src/components/SubComponents/FormInstance/components/custom/code-formio.js +35 -0
  26. package/src/components/SubComponents/FormInstance/components/custom/custom-formio-registry.js +30 -0
  27. package/src/components/SubComponents/FormInstance/components/custom/range-formio.js +121 -0
  28. package/src/components/SubComponents/FormInstance/components/custom/rating-formio.js +121 -0
  29. package/src/components/SubComponents/FormInstance/components/custom/scale-formio.js +99 -0
  30. package/src/components/SubComponents/FormInstance/components/custom/tableselect-formio.js +200 -0
  31. package/src/components/SubComponents/FormInstance/components/handler/index.vue +208 -0
  32. package/src/components/SubComponents/FormInstance/components/renderer/index.vue +282 -0
  33. package/src/components/SubComponents/FormInstance/index.test.js +65 -0
  34. package/src/components/SubComponents/FormInstance/index.vue +55 -6
  35. package/src/components/SubComponents/FormInstance/models/base-form-element.js +338 -0
  36. package/src/components/SubComponents/FormInstance/models/form-callback-queue.js +45 -0
  37. package/src/components/SubComponents/FormInstance/models/form-utils.js +50 -0
  38. package/src/components/SubComponents/FormInstance/models/overrides/address.js +132 -0
  39. package/src/components/SubComponents/FormInstance/models/overrides/autocomplete.js +41 -0
  40. package/src/components/SubComponents/FormInstance/models/overrides/checkbox.js +14 -0
  41. package/src/components/SubComponents/FormInstance/models/overrides/checkboxes.js +49 -0
  42. package/src/components/SubComponents/FormInstance/models/overrides/code.js +27 -0
  43. package/src/components/SubComponents/FormInstance/models/overrides/composite.js +57 -0
  44. package/src/components/SubComponents/FormInstance/models/overrides/container.js +65 -0
  45. package/src/components/SubComponents/FormInstance/models/overrides/currency.js +17 -0
  46. package/src/components/SubComponents/FormInstance/models/overrides/customcomposite.js +41 -0
  47. package/src/components/SubComponents/FormInstance/models/overrides/date.js +126 -0
  48. package/src/components/SubComponents/FormInstance/models/overrides/datelist.js +73 -0
  49. package/src/components/SubComponents/FormInstance/models/overrides/detail.js +38 -0
  50. package/src/components/SubComponents/FormInstance/models/overrides/email-confirm.js +12 -0
  51. package/src/components/SubComponents/FormInstance/models/overrides/email.js +7 -0
  52. package/src/components/SubComponents/FormInstance/models/overrides/file.js +56 -0
  53. package/src/components/SubComponents/FormInstance/models/overrides/flexbox.js +33 -0
  54. package/src/components/SubComponents/FormInstance/models/overrides/hidden.js +24 -0
  55. package/src/components/SubComponents/FormInstance/models/overrides/likert.js +40 -0
  56. package/src/components/SubComponents/FormInstance/models/overrides/markup.js +47 -0
  57. package/src/components/SubComponents/FormInstance/models/overrides/message.js +53 -0
  58. package/src/components/SubComponents/FormInstance/models/overrides/moretext.js +64 -0
  59. package/src/components/SubComponents/FormInstance/models/overrides/multiple.js +51 -0
  60. package/src/components/SubComponents/FormInstance/models/overrides/number.js +22 -0
  61. package/src/components/SubComponents/FormInstance/models/overrides/options-other.js +34 -0
  62. package/src/components/SubComponents/FormInstance/models/overrides/page.js +7 -0
  63. package/src/components/SubComponents/FormInstance/models/overrides/phonenumber.js +13 -0
  64. package/src/components/SubComponents/FormInstance/models/overrides/radio.js +31 -0
  65. package/src/components/SubComponents/FormInstance/models/overrides/range.js +19 -0
  66. package/src/components/SubComponents/FormInstance/models/overrides/rating.js +47 -0
  67. package/src/components/SubComponents/FormInstance/models/overrides/scale.js +33 -0
  68. package/src/components/SubComponents/FormInstance/models/overrides/section.js +39 -0
  69. package/src/components/SubComponents/FormInstance/models/overrides/select.js +28 -0
  70. package/src/components/SubComponents/FormInstance/models/overrides/signature.js +7 -0
  71. package/src/components/SubComponents/FormInstance/models/overrides/submit.js +23 -0
  72. package/src/components/SubComponents/FormInstance/models/overrides/table.js +48 -0
  73. package/src/components/SubComponents/FormInstance/models/overrides/tablerow.js +20 -0
  74. package/src/components/SubComponents/FormInstance/models/overrides/tableselect.js +66 -0
  75. package/src/components/SubComponents/FormInstance/models/overrides/testing.js +47 -0
  76. package/src/components/SubComponents/FormInstance/models/overrides/text.js +7 -0
  77. package/src/components/SubComponents/FormInstance/models/overrides/textarea.js +26 -0
  78. package/src/components/SubComponents/FormInstance/models/overrides/textformat.js +13 -0
  79. package/src/components/SubComponents/FormInstance/models/overrides/time.js +13 -0
  80. package/src/components/SubComponents/FormInstance/models/overrides/twig.js +118 -0
  81. package/src/components/SubComponents/FormInstance/models/overrides/unknown.js +24 -0
  82. package/src/components/SubComponents/FormInstance/models/overrides/url.js +13 -0
  83. package/src/components/SubComponents/FormInstance/services/convert-form-element.js +49 -0
  84. package/src/components/SubComponents/FormInstance/services/form-api.js +47 -0
  85. package/src/components/SubComponents/FormInstance/services/form-render-parser.js +156 -0
  86. package/src/components/SubComponents/FormInstance/services/form-submit-parser.js +61 -0
  87. package/src/components/SubComponents/FormInstance/services/logic-linker.js +73 -0
  88. package/src/components/SubComponents/FormInstance/services/logic-parser.js +173 -0
  89. package/src/components/SubComponents/FormInstance/services/registry-factory.js +284 -0
  90. package/src/components/SubComponents/FormInstance/stories/Documentation.mdx +234 -0
  91. package/src/components/SubComponents/FormInstance/stories/advanced.stories.js +109 -0
  92. package/src/components/SubComponents/FormInstance/stories/basic.stories.js +73 -0
  93. package/src/components/SubComponents/FormInstance/stories/build.stories.js +27 -0
  94. package/src/components/SubComponents/FormInstance/stories/composite.stories.js +90 -0
  95. package/src/components/SubComponents/FormInstance/stories/condition.stories.js +83 -0
  96. package/src/components/SubComponents/FormInstance/stories/custom.stories.js +69 -0
  97. package/src/components/SubComponents/FormInstance/stories/date.stories.js +76 -0
  98. package/src/components/SubComponents/FormInstance/stories/form-alert.stories.js +93 -0
  99. package/src/components/SubComponents/FormInstance/stories/index.stories.js +63 -0
  100. package/src/components/SubComponents/FormInstance/stories/layout.stories.js +85 -0
  101. package/src/components/SubComponents/FormInstance/stories/markup.stories.js +91 -0
  102. package/src/components/SubComponents/FormInstance/stories/mocks/address.json +298 -0
  103. package/src/components/SubComponents/FormInstance/stories/mocks/advancedhtml.json +23 -0
  104. package/src/components/SubComponents/FormInstance/stories/mocks/autocomplete.json +34 -0
  105. package/src/components/SubComponents/FormInstance/stories/mocks/basichtml.json +15 -0
  106. package/src/components/SubComponents/FormInstance/stories/mocks/checkboxes.json +102 -0
  107. package/src/components/SubComponents/FormInstance/stories/mocks/checkboxesother.json +197 -0
  108. package/src/components/SubComponents/FormInstance/stories/mocks/container.json +134 -0
  109. package/src/components/SubComponents/FormInstance/stories/mocks/customcomposite.json +469 -0
  110. package/src/components/SubComponents/FormInstance/stories/mocks/date.json +19 -0
  111. package/src/components/SubComponents/FormInstance/stories/mocks/datelist.json +752 -0
  112. package/src/components/SubComponents/FormInstance/stories/mocks/datetime.json +89 -0
  113. package/src/components/SubComponents/FormInstance/stories/mocks/details.json +63 -0
  114. package/src/components/SubComponents/FormInstance/stories/mocks/email.json +18 -0
  115. package/src/components/SubComponents/FormInstance/stories/mocks/emailconfirm.json +110 -0
  116. package/src/components/SubComponents/FormInstance/stories/mocks/fieldset.json +62 -0
  117. package/src/components/SubComponents/FormInstance/stories/mocks/flexbox.json +58 -0
  118. package/src/components/SubComponents/FormInstance/stories/mocks/hidden.json +35 -0
  119. package/src/components/SubComponents/FormInstance/stories/mocks/horizontalrule.json +14 -0
  120. package/src/components/SubComponents/FormInstance/stories/mocks/jahd.json +1359 -0
  121. package/src/components/SubComponents/FormInstance/stories/mocks/label.json +14 -0
  122. package/src/components/SubComponents/FormInstance/stories/mocks/likert.json +375 -0
  123. package/src/components/SubComponents/FormInstance/stories/mocks/message.json +86 -0
  124. package/src/components/SubComponents/FormInstance/stories/mocks/more.json +19 -0
  125. package/src/components/SubComponents/FormInstance/stories/mocks/multiple.json +142 -0
  126. package/src/components/SubComponents/FormInstance/stories/mocks/number.json +35 -0
  127. package/src/components/SubComponents/FormInstance/stories/mocks/quad.json +249 -0
  128. package/src/components/SubComponents/FormInstance/stories/mocks/radios.json +70 -0
  129. package/src/components/SubComponents/FormInstance/stories/mocks/radiosother.json +176 -0
  130. package/src/components/SubComponents/FormInstance/stories/mocks/range.json +58 -0
  131. package/src/components/SubComponents/FormInstance/stories/mocks/rating.json +42 -0
  132. package/src/components/SubComponents/FormInstance/stories/mocks/rule-disabled-value.json +66 -0
  133. package/src/components/SubComponents/FormInstance/stories/mocks/rule-enabled-value.json +43 -0
  134. package/src/components/SubComponents/FormInstance/stories/mocks/rule-hidden-value.json +68 -0
  135. package/src/components/SubComponents/FormInstance/stories/mocks/rule-required-value.json +69 -0
  136. package/src/components/SubComponents/FormInstance/stories/mocks/rule-visible-value.json +157 -0
  137. package/src/components/SubComponents/FormInstance/stories/mocks/sameas.json +66 -0
  138. package/src/components/SubComponents/FormInstance/stories/mocks/scale.json +200 -0
  139. package/src/components/SubComponents/FormInstance/stories/mocks/section.json +63 -0
  140. package/src/components/SubComponents/FormInstance/stories/mocks/select.json +41 -0
  141. package/src/components/SubComponents/FormInstance/stories/mocks/selectother.json +115 -0
  142. package/src/components/SubComponents/FormInstance/stories/mocks/signature.json +25 -0
  143. package/src/components/SubComponents/FormInstance/stories/mocks/styles.json +81 -0
  144. package/src/components/SubComponents/FormInstance/stories/mocks/table-select.json +472 -0
  145. package/src/components/SubComponents/FormInstance/stories/mocks/table.json +154 -0
  146. package/src/components/SubComponents/FormInstance/stories/mocks/telephone.json +18 -0
  147. package/src/components/SubComponents/FormInstance/stories/mocks/textarea.json +22 -0
  148. package/src/components/SubComponents/FormInstance/stories/mocks/textfield.json +66 -0
  149. package/src/components/SubComponents/FormInstance/stories/mocks/time.json +20 -0
  150. package/src/components/SubComponents/FormInstance/stories/mocks/token.json +260 -0
  151. package/src/components/SubComponents/FormInstance/stories/mocks/twig.json +154 -0
  152. package/src/components/SubComponents/FormInstance/stories/mocks/url.json +18 -0
  153. package/src/components/SubComponents/FormInstance/stories/mocks/value.json +17 -0
  154. package/src/components/SubComponents/FormInstance/stories/mocks/wizard.json +353 -0
  155. package/src/components/SubComponents/FormInstance/stories/options.stories.js +98 -0
  156. package/src/components/SubComponents/FormInstance/stories/style.stories.js +55 -0
  157. package/src/components/SubComponents/FormInstance/stories/wizard.stories.js +55 -0
  158. package/src/components/SubComponents/FormInstance/style.scss +173 -0
  159. package/src/components/SubComponents/FormInstance/tests/address.test.js +255 -0
  160. package/src/components/SubComponents/FormInstance/tests/advancedhtml.test.js +31 -0
  161. package/src/components/SubComponents/FormInstance/tests/autocomplete.test.js +38 -0
  162. package/src/components/SubComponents/FormInstance/tests/basichtml.test.js +31 -0
  163. package/src/components/SubComponents/FormInstance/tests/checkbox.test.js +29 -0
  164. package/src/components/SubComponents/FormInstance/tests/checkboxes.test.js +44 -0
  165. package/src/components/SubComponents/FormInstance/tests/checkboxesother.test.js +91 -0
  166. package/src/components/SubComponents/FormInstance/tests/container.test.js +66 -0
  167. package/src/components/SubComponents/FormInstance/tests/customcomposite.test.js +86 -0
  168. package/src/components/SubComponents/FormInstance/tests/date.test.js +63 -0
  169. package/src/components/SubComponents/FormInstance/tests/datelist.test.js +136 -0
  170. package/src/components/SubComponents/FormInstance/tests/datetime.test.js +54 -0
  171. package/src/components/SubComponents/FormInstance/tests/details.test.js +58 -0
  172. package/src/components/SubComponents/FormInstance/tests/email.test.js +28 -0
  173. package/src/components/SubComponents/FormInstance/tests/emailconfirm.test.js +79 -0
  174. package/src/components/SubComponents/FormInstance/tests/fieldset.test.js +63 -0
  175. package/src/components/SubComponents/FormInstance/tests/flexbox.test.js +71 -0
  176. package/src/components/SubComponents/FormInstance/tests/form-test-utils.js +120 -0
  177. package/src/components/SubComponents/FormInstance/tests/form.test.js +26 -0
  178. package/src/components/SubComponents/FormInstance/tests/hidden.test.js +52 -0
  179. package/src/components/SubComponents/FormInstance/tests/horizontalrule.test.js +31 -0
  180. package/src/components/SubComponents/FormInstance/tests/label.test.js +31 -0
  181. package/src/components/SubComponents/FormInstance/tests/likert.test.js +38 -0
  182. package/src/components/SubComponents/FormInstance/tests/message.test.js +89 -0
  183. package/src/components/SubComponents/FormInstance/tests/more.test.js +32 -0
  184. package/src/components/SubComponents/FormInstance/tests/multiple.test.js +71 -0
  185. package/src/components/SubComponents/FormInstance/tests/number.test.js +51 -0
  186. package/src/components/SubComponents/FormInstance/tests/radios.test.js +34 -0
  187. package/src/components/SubComponents/FormInstance/tests/radiosother.test.js +79 -0
  188. package/src/components/SubComponents/FormInstance/tests/range.test.js +32 -0
  189. package/src/components/SubComponents/FormInstance/tests/rating.test.js +38 -0
  190. package/src/components/SubComponents/FormInstance/tests/rule-disabled.test.js +128 -0
  191. package/src/components/SubComponents/FormInstance/tests/rule-enabled-value.test.js +78 -0
  192. package/src/components/SubComponents/FormInstance/tests/rule-hidden.test.js +131 -0
  193. package/src/components/SubComponents/FormInstance/tests/rule-required-value.test.js +144 -0
  194. package/src/components/SubComponents/FormInstance/tests/rule-visible.test.js +619 -0
  195. package/src/components/SubComponents/FormInstance/tests/sameas.test.js +94 -0
  196. package/src/components/SubComponents/FormInstance/tests/scale.test.js +43 -0
  197. package/src/components/SubComponents/FormInstance/tests/section.test.js +63 -0
  198. package/src/components/SubComponents/FormInstance/tests/select.test.js +45 -0
  199. package/src/components/SubComponents/FormInstance/tests/selectother.test.js +82 -0
  200. package/src/components/SubComponents/FormInstance/tests/signature.test.js +32 -0
  201. package/src/components/SubComponents/FormInstance/tests/styles.test.js +73 -0
  202. package/src/components/SubComponents/FormInstance/tests/table-select.test.js +93 -0
  203. package/src/components/SubComponents/FormInstance/tests/table.test.js +97 -0
  204. package/src/components/SubComponents/FormInstance/tests/telephone.test.js +29 -0
  205. package/src/components/SubComponents/FormInstance/tests/textarea.test.js +29 -0
  206. package/src/components/SubComponents/FormInstance/tests/textfield.test.js +48 -0
  207. package/src/components/SubComponents/FormInstance/tests/time.test.js +29 -0
  208. package/src/components/SubComponents/FormInstance/tests/token.test.js +33 -0
  209. package/src/components/SubComponents/FormInstance/tests/twig.test.js +74 -0
  210. package/src/components/SubComponents/FormInstance/tests/url.test.js +45 -0
  211. package/src/components/SubComponents/FormInstance/tests/value.test.js +31 -0
  212. package/src/components/SubComponents/FormInstance/tests/wizard.test.js +145 -0
  213. package/src/mock/jest.fileMock.js +1 -0
  214. package/src/components/SubComponents/FormInstance/index.stories.js +0 -8
@@ -0,0 +1,57 @@
1
+ import { FlexboxFormElement } from './flexbox'
2
+
3
+ // A composite is an element made up on many subelements but on submission, they must all map back into one value
4
+ export class CompositeFormElement extends FlexboxFormElement {
5
+ isVertical() {
6
+ return true
7
+ }
8
+
9
+ setSubComponentTransformSubmissionValue(subcomponent, otherValue) {
10
+ const key = this.getKey()
11
+ const originalTransform = subcomponent.attributes.instance()
12
+ .transformSubmissionValue
13
+
14
+ const transformSubmissionValue = function(value, _axios, submissions) {
15
+ const subComponentValue = originalTransform(value)
16
+ if (this.isEmpty(subComponentValue)) {
17
+ return {}
18
+ } else {
19
+ if (Array.isArray(submissions[key])) {
20
+ submissions[key] = submissions[key].map(function(item) {
21
+ return item === otherValue ? value : item
22
+ })
23
+ return {}
24
+ }
25
+ }
26
+ return {
27
+ [key]: subComponentValue
28
+ }
29
+ }
30
+
31
+ subcomponent.attributes.instance().transformSubmissionValue = transformSubmissionValue
32
+ }
33
+
34
+ setSubComponentRules() {}
35
+
36
+ getCustomProperties() {
37
+ const customProperties = super.getCustomProperties()
38
+ let columns = customProperties[this.getComponentsKey()]
39
+
40
+ if (Array.isArray(columns)) {
41
+ if (columns.length === 1) {
42
+ columns = columns[0].components[0][this.getComponentsKey()]
43
+ }
44
+
45
+ if (columns.length === 2) {
46
+ this.setSubComponentRules(
47
+ columns[0].components[0],
48
+ columns[1].components[0]
49
+ )
50
+ }
51
+ }
52
+
53
+ return {
54
+ ...customProperties
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,65 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class ContainerFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'container'
6
+ }
7
+
8
+ shouldHideLabel() {
9
+ return true
10
+ }
11
+
12
+ isLayoutComponent() {
13
+ return true
14
+ }
15
+
16
+ getContainerChildElements() {
17
+ return this.webformElement
18
+ }
19
+
20
+ shouldIgnoreSubmissionValue() {
21
+ return true
22
+ }
23
+
24
+ getComponentsKey() {
25
+ return 'components'
26
+ }
27
+
28
+ setComponents(components) {
29
+ this.components = components
30
+ }
31
+
32
+ getComponents() {
33
+ return this.components || []
34
+ }
35
+
36
+ addHtmlControl(content, components, descriptionDisplay, index) {
37
+ let position = 'unshift'
38
+ if (descriptionDisplay === 'after') {
39
+ position = 'push'
40
+ } else if (descriptionDisplay === 'invisible') {
41
+ content = null
42
+ }
43
+ if (!this.isEmpty(content)) {
44
+ return components[position]({
45
+ content,
46
+ refreshOnChange: false,
47
+ key: 'heading-' + index + this.getKey(),
48
+ type: 'htmlelement',
49
+ input: false,
50
+ tableView: false,
51
+ id: 'heading-' + index + this.getId()
52
+ })
53
+ }
54
+ }
55
+
56
+ isInput() {
57
+ return false
58
+ }
59
+
60
+ getCustomProperties() {
61
+ return {
62
+ [this.getComponentsKey()]: this.getComponents()
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,17 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class CurrencyFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'currency'
6
+ }
7
+
8
+ getCustomProperties() {
9
+ return {
10
+ delimiter: true,
11
+ truncateMultipleSpaces: false,
12
+ inputFormat: 'plain',
13
+ mask: false,
14
+ spellcheck: true
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,41 @@
1
+ import { ContainerFormElement } from './container'
2
+
3
+ export class CustomCompositeFormElement extends ContainerFormElement {
4
+ getType() {
5
+ return 'editgrid'
6
+ }
7
+
8
+ shouldHideLabel() {
9
+ return false
10
+ }
11
+
12
+ shouldIgnoreSubmissionValue() {
13
+ return false
14
+ }
15
+
16
+ getContainerChildElements() {
17
+ const elements = JSON.parse(
18
+ JSON.stringify(this.webformElement['#webform_composite_elements'] ?? {})
19
+ )
20
+ Object.keys(elements).forEach((key) => {
21
+ elements[key]['#webform_key'] = key
22
+ })
23
+ return elements
24
+ }
25
+
26
+ getValidation() {
27
+ const validation = super.getValidation()
28
+ validation.minLength = this.webformElement['#min_items'] ?? 0
29
+ validation.maxLength = this.webformElement['#multiple'] ?? 20
30
+ return validation
31
+ }
32
+
33
+ transformSubmissionValue(value) {
34
+ if (!Array.isArray(value)) {
35
+ return undefined
36
+ }
37
+ return {
38
+ [this.getKey()]: value
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,126 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class DateFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'datetime'
6
+ }
7
+
8
+ getFormat() {
9
+ let format = 'dd-MM-yyyy'
10
+ if (this.showTime()) {
11
+ format = `${format} hh:mm a`
12
+ }
13
+ return format
14
+ }
15
+
16
+ parseStringToDate(dateStr) {
17
+ if (!dateStr || typeof dateStr !== 'string') {
18
+ return undefined
19
+ }
20
+ let date
21
+ if (dateStr === 'today') {
22
+ date = new Date()
23
+ } else if (
24
+ (dateStr.match(/\//g) || []).length > 0 ||
25
+ (dateStr.match(/-/g) || []).length > 0
26
+ ) {
27
+ const dateParts = dateStr.includes('/')
28
+ ? dateStr.split('/')
29
+ : dateStr.split('-')
30
+ if (dateParts.length >= 3) {
31
+ date = new Date(
32
+ +(dateParts[2].length === 2 ? `20${dateParts[2]}` : dateParts[2]),
33
+ dateParts[1] - 1,
34
+ +dateParts[0]
35
+ )
36
+ }
37
+ } else if (
38
+ dateStr.startsWith('+') ||
39
+ dateStr.startsWith('-') ||
40
+ /^\d/.test(dateStr)
41
+ ) {
42
+ date = new Date()
43
+ const changeBy = Number(dateStr.split(' ')[0]) || 0
44
+ if (dateStr.endsWith('days')) {
45
+ date.setDate(date.getDate() + changeBy)
46
+ } else if (dateStr.endsWith('months')) {
47
+ date.setMonth(date.getMonth() + changeBy)
48
+ } else if (dateStr.endsWith('years')) {
49
+ date.setFullYear(date.getFullYear() + changeBy)
50
+ }
51
+ } else {
52
+ date = new Date(dateStr)
53
+ }
54
+ return date && isNaN(date.getTime()) ? undefined : date.toISOString()
55
+ }
56
+
57
+ getMaxDate() {
58
+ return this.parseStringToDate(this.webformElement['#date_date_max'])
59
+ }
60
+
61
+ getMinDate() {
62
+ return this.parseStringToDate(this.webformElement['#date_date_min'])
63
+ }
64
+
65
+ getDisabledDays() {
66
+ const dateDaysAvailable = this.webformElement['#date_days']
67
+ if (Array.isArray(dateDaysAvailable)) {
68
+ let availableDayRule = ''
69
+ const disabledDays = ['0', '1', '2', '3', '4', '5', '6'].filter(
70
+ (day) => !dateDaysAvailable.includes(day)
71
+ )
72
+ disabledDays.forEach((day, index) => {
73
+ if (index > 0) {
74
+ availableDayRule += ' || '
75
+ }
76
+ availableDayRule += 'date.getDay() === ' + day
77
+ })
78
+ return availableDayRule
79
+ }
80
+ return undefined
81
+ }
82
+
83
+ showTime() {
84
+ return this.webformElement['#type'] === 'datetime'
85
+ }
86
+
87
+ getDateRange() {
88
+ return {
89
+ disableWeekends: false,
90
+ disableWeekdays: false,
91
+ minDate: this.getMinDate(),
92
+ maxDate: this.getMaxDate(),
93
+ disableFunction: this.getDisabledDays(),
94
+ enableTime: this.showTime()
95
+ }
96
+ }
97
+
98
+ getCustomProperties() {
99
+ const dateRange = this.getDateRange()
100
+ return {
101
+ format: this.getFormat(),
102
+ enableMinDateInput: !!dateRange.minDate,
103
+ datePicker: dateRange,
104
+ enableMaxDateInput: !!dateRange.maxDate,
105
+ enableTime: dateRange.enableTime,
106
+ widget: {
107
+ type: 'calendar',
108
+ displayInTimezone: 'viewer',
109
+ locale: 'en',
110
+ useLocaleSettings: false,
111
+ allowInput: true,
112
+ mode: 'single',
113
+ noCalendar: false,
114
+ format: this.getFormat(),
115
+ hourIncrement: 1,
116
+ minuteIncrement: 1,
117
+ time_24hr: false,
118
+ ...dateRange
119
+ }
120
+ }
121
+ }
122
+
123
+ transformSubmissionValue(value) {
124
+ return typeof value === 'string' ? value : ''
125
+ }
126
+ }
@@ -0,0 +1,73 @@
1
+ import { DateFormElement } from './date'
2
+
3
+ export class DateListFormElement extends DateFormElement {
4
+ getType() {
5
+ return 'day'
6
+ }
7
+
8
+ getDatePart(datePart) {
9
+ const props = {}
10
+ const part = this.webformElement[datePart]
11
+
12
+ props.hide = this.isEmpty(part)
13
+ if (!props.hide) {
14
+ if (!this.isEmpty(part['#options'])) {
15
+ const range = Object.keys(part['#options']).filter(
16
+ (k) => !this.isEmpty(k) && !isNaN(k)
17
+ )
18
+ if (range.length > 0) {
19
+ props.minYear = Number(range[0])
20
+ props.maxYear = Number(range[range.length - 1])
21
+ }
22
+ }
23
+ if (part['#type'] === 'select') {
24
+ props.type = 'select'
25
+ }
26
+
27
+ props.required = this.webformElement['#required']
28
+ }
29
+ return props
30
+ }
31
+
32
+ getDefaultValue() {
33
+ return undefined
34
+ }
35
+
36
+ formatDate(date) {
37
+ if (!this.isEmpty(date) && date.includes('T')) {
38
+ var d = new Date(date),
39
+ month = '' + (d.getMonth() + 1),
40
+ day = '' + d.getDate(),
41
+ year = d.getFullYear()
42
+
43
+ if (month.length < 2) month = '0' + month
44
+ if (day.length < 2) day = '0' + day
45
+
46
+ return [year, day, month].join('-')
47
+ }
48
+ return undefined
49
+ }
50
+
51
+ getCustomProperties() {
52
+ const { maxDate, minDate, disableFunction } = this.getDateRange()
53
+ return {
54
+ dayFirst: true,
55
+ fields: {
56
+ day: this.getDatePart('day'),
57
+ month: this.getDatePart('month'),
58
+ year: this.getDatePart('year')
59
+ },
60
+ maxDate: !this.getDatePart('year').hide
61
+ ? this.formatDate(maxDate)
62
+ : undefined,
63
+ minDate: !this.getDatePart('year').hide
64
+ ? this.formatDate(minDate)
65
+ : undefined,
66
+ disableFunction
67
+ }
68
+ }
69
+
70
+ transformSubmissionValue(value) {
71
+ return typeof value === 'string' ? value : ''
72
+ }
73
+ }
@@ -0,0 +1,38 @@
1
+ import { ContainerFormElement } from './container'
2
+
3
+ export class DetailFormElement extends ContainerFormElement {
4
+ getType() {
5
+ return 'panel'
6
+ }
7
+
8
+ shouldHideLabel() {
9
+ return false
10
+ }
11
+
12
+ getDescription() {
13
+ const label = !this.isEmpty(this.getHtmlText('#description'))
14
+ ? this.getHtmlText('#description')
15
+ : ''
16
+ return label
17
+ }
18
+
19
+ getCustomProperties() {
20
+ const customProperties = super.getCustomProperties()
21
+ const description = !this.isEmpty(this.getHtmlText('#description'))
22
+ ? this.getHtmlText('#description')
23
+ : ''
24
+
25
+ this.addHtmlControl(
26
+ description,
27
+ customProperties[this.getComponentsKey()],
28
+ null,
29
+ 'desc'
30
+ )
31
+ return {
32
+ ...customProperties,
33
+ collapsible: true,
34
+ collapsed: true,
35
+ title: this.webformElement['#title']
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,12 @@
1
+ import { CompositeFormElement } from './composite'
2
+
3
+ export class EmailConfirmFormElement extends CompositeFormElement {
4
+ setSubComponentRules(primaryEmail, secondaryEmail) {
5
+ const primaryEmailValue = `data['${primaryEmail.key}']`
6
+ secondaryEmail.validate.custom = `valid = (input === ${primaryEmailValue}) ? true : \`email must match\`;`
7
+
8
+ secondaryEmail.validate.required = !!primaryEmail.validate.required
9
+ this.setSubComponentTransformSubmissionValue(primaryEmail)
10
+ this.setSubComponentTransformSubmissionValue(secondaryEmail)
11
+ }
12
+ }
@@ -0,0 +1,7 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class EmailFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'email'
6
+ }
7
+ }
@@ -0,0 +1,56 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class FileFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'file'
6
+ }
7
+
8
+ // async transformSubmissionValue(value, axios) {
9
+ // const data = await value
10
+ // .map(async (file) => {
11
+ // return await axios({
12
+ // method: 'post',
13
+ // url: '/drupal_rest/file/upload/node/article/field_hero_image?_format=hal_json',
14
+ // data: {
15
+ // _links: {
16
+ // type: {
17
+ // href: this.baseApiUrl + '/rest/type/file/image'
18
+ // }
19
+ // },
20
+ // filename: [
21
+ // {
22
+ // value: file.originalName
23
+ // }
24
+ // ],
25
+ // data: [
26
+ // {
27
+ // value: file.url
28
+ // }
29
+ // ]
30
+ // },
31
+ // headers: {
32
+ // 'Content-Type': 'application/octet-stream',
33
+ // 'Content-Disposition': 'file;filename="test.jpg"'
34
+ // }
35
+ // })
36
+ // })
37
+ // .reduce(() => '')
38
+ // return data
39
+ // }
40
+
41
+ getCustomProperties() {
42
+ return {
43
+ storage: 'base64',
44
+ webcam: false,
45
+ fileTypes: [
46
+ {
47
+ label: '',
48
+ value: ''
49
+ }
50
+ ],
51
+ input: true,
52
+ fileKey: `files[${this.webformElement['#name']}]`,
53
+ url: `${this.baseApiUrl}/webform/${this.webformElement['#webform']}?element_parents=elements/${this.webformElement['#name']}&textarea1=123&ajax_form=1&_wrapper_format=drupal_ajax`
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,33 @@
1
+ import { ContainerFormElement } from '../overrides/container'
2
+
3
+ export class FlexboxFormElement extends ContainerFormElement {
4
+ getType() {
5
+ return 'columns'
6
+ }
7
+
8
+ getComponentsKey() {
9
+ return 'columns'
10
+ }
11
+
12
+ isVertical() {
13
+ return false
14
+ }
15
+
16
+ getColumns(columns) {
17
+ return columns.map((item) => {
18
+ return {
19
+ components: [item],
20
+ width: this.isVertical() ? 12 : 12 / columns.length
21
+ }
22
+ })
23
+ }
24
+
25
+ getCustomProperties() {
26
+ const customProperties = super.getCustomProperties()
27
+ const columns = customProperties[this.getComponentsKey()]
28
+ return {
29
+ ...customProperties,
30
+ [this.getComponentsKey()]: this.getColumns(columns)
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class HiddenFormElement extends BaseFormElement {
4
+ getDynamicValues(str) {
5
+ const replacer = (_braces, value) => {
6
+ return '${' + value + '}'
7
+ }
8
+ return !this.isEmpty(str) ? str.replace(/{{(.+?)}}/gi, replacer) : str
9
+ }
10
+
11
+ getCustomProperties() {
12
+ const computedValues = this.getDynamicValues(this.webformElement['#value'])
13
+ let calculateValue
14
+ if (!this.isEmpty(computedValues)) {
15
+ calculateValue = `value = \`${computedValues}\`;`
16
+ }
17
+ const props = {
18
+ calculateValue,
19
+ type: 'hidden'
20
+ }
21
+
22
+ return props
23
+ }
24
+ }
@@ -0,0 +1,40 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class LikertFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'survey'
6
+ }
7
+
8
+ getSurveyOptions(options, hasNotAvailableValue, naLabel, naValue) {
9
+ return Object.keys(options).map((key, index, array) => {
10
+ const values = key.split(' -- ')
11
+ let label = values.slice(-1)[0]
12
+ let value = key
13
+ if (hasNotAvailableValue && index === array.length - 1) {
14
+ label = naLabel || label
15
+ value = naValue || value
16
+ }
17
+ return {
18
+ label,
19
+ value
20
+ }
21
+ })
22
+ }
23
+
24
+ getCustomProperties() {
25
+ return {
26
+ questions: this.getSurveyOptions(
27
+ this.webformElement['#questions'],
28
+ false,
29
+ null,
30
+ null
31
+ ),
32
+ values: this.getSurveyOptions(
33
+ this.webformElement['#answers'],
34
+ this.webformElement['#na_answer'],
35
+ this.webformElement['#na_answer_text'] || 'N/A',
36
+ this.webformElement['#na_answer_value']
37
+ )
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,47 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+ import { htmlDecode } from '../form-utils'
3
+
4
+ export class MarkupFormElement extends BaseFormElement {
5
+ getContent() {
6
+ let content = ''
7
+ if (!this.isEmpty(this.webformElement['#markup'])) {
8
+ content = htmlDecode(this.webformElement['#markup'])
9
+ } else if (!this.isEmpty(this.webformElement['#text'])) {
10
+ if (this.webformElement['#format'] === 'simple_text') {
11
+ content = this.webformElement['#text'].replace(
12
+ /(?:\r\n|\r|\n)/g,
13
+ '<br>'
14
+ )
15
+ } else {
16
+ content = htmlDecode(this.webformElement['#text'])
17
+ }
18
+ } else if (this.webformElement['#type'] === 'webform_horizontal_rule') {
19
+ content = '<hr/>'
20
+ } else if (this.webformElement['#type'] === 'label') {
21
+ content = `<label class="col-form-label">${htmlDecode(
22
+ this.webformElement['#title']
23
+ )}</label>`
24
+ }
25
+
26
+ if (this.webformElement['#display_on'] === 'view') {
27
+ content = ''
28
+ }
29
+ return content
30
+ }
31
+
32
+ getType() {
33
+ return 'htmlelement'
34
+ }
35
+
36
+ isInput() {
37
+ return false
38
+ }
39
+
40
+ getCustomProperties() {
41
+ return {
42
+ tag: 'div',
43
+ content: this.getContent(),
44
+ refreshOnChange: false
45
+ }
46
+ }
47
+ }