@saasquatch/mint-components 1.13.3-9 → 1.13.4

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 (156) hide show
  1. package/dist/cjs/{ShadowViewAddon-3ddee92b.js → ShadowViewAddon-14a02da4.js} +138 -104
  2. package/dist/cjs/{useReferralCodes-82e8797b.js → copy-text-view-a5524c20.js} +93 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/mint-components.cjs.js +1 -1
  5. package/dist/cjs/sqm-banking-info-form_17.cjs.entry.js +2 -3
  6. package/dist/cjs/{sqm-big-stat_39.cjs.entry.js → sqm-big-stat_41.cjs.entry.js} +221 -4
  7. package/dist/cjs/{sqm-invoice-table-view-16ac73d0.js → sqm-invoice-table-view-baded4af.js} +31 -2
  8. package/dist/cjs/sqm-pagination_3.cjs.entry.js +5 -6
  9. package/dist/cjs/sqm-portal-email-verification.cjs.entry.js +1 -1
  10. package/dist/cjs/sqm-portal-forgot-password.cjs.entry.js +1 -1
  11. package/dist/cjs/sqm-portal-google-registration-form.cjs.entry.js +1 -1
  12. package/dist/cjs/{sqm-portal-registration-form-view-ebf355a6.js → sqm-portal-registration-form-view-637a4bf4.js} +1 -0
  13. package/dist/cjs/sqm-portal-registration-form.cjs.entry.js +2 -1
  14. package/dist/cjs/sqm-portal-reset-password.cjs.entry.js +1 -1
  15. package/dist/cjs/sqm-portal-verify-email.cjs.entry.js +1 -1
  16. package/dist/cjs/sqm-stencilbook.cjs.entry.js +470 -431
  17. package/dist/collection/collection-manifest.json +2 -1
  18. package/dist/collection/components/sqm-checkbox-field/CheckboxField.stories.js +1 -1
  19. package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field-view.js +6 -15
  20. package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field.js +5 -5
  21. package/dist/collection/components/sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.js +11 -0
  22. package/dist/collection/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.js +129 -0
  23. package/dist/collection/components/sqm-portal-change-marketing/ChangeMarketing.stories.js +54 -0
  24. package/dist/collection/components/sqm-portal-change-marketing/sqm-portal-change-marketing-view.js +47 -0
  25. package/dist/collection/components/sqm-portal-change-marketing/sqm-portal-change-marketing.js +217 -0
  26. package/dist/collection/components/sqm-portal-change-marketing/usePortalChangeMarketing.js +115 -0
  27. package/dist/collection/components/sqm-portal-email-verification/sqm-portal-email-verification.js +3 -3
  28. package/dist/collection/components/sqm-portal-forgot-password/sqm-portal-forgot-password.js +3 -3
  29. package/dist/collection/components/sqm-portal-google-registration-form/sqm-portal-google-registration-form.js +2 -2
  30. package/dist/collection/components/sqm-portal-login/sqm-portal-login.js +3 -3
  31. package/dist/collection/components/sqm-portal-registration-form/PortalRegistrationForm.stories.js +4 -0
  32. package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form-view.js +1 -0
  33. package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form.js +3 -2
  34. package/dist/collection/components/sqm-portal-reset-password/sqm-portal-reset-password.js +3 -3
  35. package/dist/collection/components/sqm-portal-verify-email/sqm-portal-verify-email.js +3 -3
  36. package/dist/collection/components/sqm-stencilbook/sqm-stencilbook.js +6 -2
  37. package/dist/collection/components/sqm-titled-section/sqm-titled-section.js +3 -0
  38. package/dist/esm/{ShadowViewAddon-499b1f86.js → ShadowViewAddon-23a6afab.js} +134 -101
  39. package/dist/esm/{useReferralCodes-8f75921a.js → copy-text-view-459a2e35.js} +93 -1
  40. package/dist/esm/loader.js +1 -1
  41. package/dist/esm/mint-components.js +1 -1
  42. package/dist/esm/sqm-banking-info-form_17.entry.js +1 -2
  43. package/dist/esm/{sqm-big-stat_39.entry.js → sqm-big-stat_41.entry.js} +220 -5
  44. package/dist/esm/{sqm-invoice-table-view-2c726568.js → sqm-invoice-table-view-af69cd33.js} +30 -2
  45. package/dist/esm/sqm-pagination_3.entry.js +1 -2
  46. package/dist/esm/sqm-portal-email-verification.entry.js +1 -1
  47. package/dist/esm/sqm-portal-forgot-password.entry.js +1 -1
  48. package/dist/esm/sqm-portal-google-registration-form.entry.js +1 -1
  49. package/dist/esm/{sqm-portal-registration-form-view-32c4b488.js → sqm-portal-registration-form-view-3c1f6000.js} +1 -0
  50. package/dist/esm/sqm-portal-registration-form.entry.js +2 -1
  51. package/dist/esm/sqm-portal-reset-password.entry.js +1 -1
  52. package/dist/esm/sqm-portal-verify-email.entry.js +1 -1
  53. package/dist/esm/sqm-stencilbook.entry.js +470 -431
  54. package/dist/esm-es5/ShadowViewAddon-23a6afab.js +1 -0
  55. package/dist/esm-es5/copy-text-view-459a2e35.js +1 -0
  56. package/dist/esm-es5/loader.js +1 -1
  57. package/dist/esm-es5/mint-components.js +1 -1
  58. package/dist/esm-es5/sqm-banking-info-form_17.entry.js +1 -1
  59. package/dist/esm-es5/sqm-big-stat_41.entry.js +1 -0
  60. package/dist/esm-es5/sqm-invoice-table-view-af69cd33.js +1 -0
  61. package/dist/esm-es5/sqm-pagination_3.entry.js +1 -1
  62. package/dist/esm-es5/sqm-portal-google-registration-form.entry.js +1 -1
  63. package/dist/esm-es5/{sqm-portal-registration-form-view-32c4b488.js → sqm-portal-registration-form-view-3c1f6000.js} +1 -1
  64. package/dist/esm-es5/sqm-portal-registration-form.entry.js +1 -1
  65. package/dist/esm-es5/sqm-stencilbook.entry.js +1 -1
  66. package/dist/mint-components/mint-components.esm.js +1 -1
  67. package/dist/mint-components/p-01010af0.entry.js +258 -0
  68. package/dist/mint-components/{p-079405ff.entry.js → p-0d2d0b6d.entry.js} +1 -1
  69. package/dist/mint-components/p-33ed6f1c.system.entry.js +1 -0
  70. package/dist/mint-components/p-37996351.system.js +1 -1
  71. package/dist/mint-components/p-38b5f028.system.entry.js +1 -0
  72. package/dist/mint-components/p-717cc8ac.system.js +1 -0
  73. package/dist/mint-components/p-71bc04d2.system.entry.js +1 -0
  74. package/dist/mint-components/p-7e7cbccf.system.js +1 -0
  75. package/dist/mint-components/p-7f2d4212.js +52 -0
  76. package/dist/mint-components/{p-e6045498.entry.js → p-7f80a9d7.entry.js} +1 -1
  77. package/dist/mint-components/{p-793d2130.js → p-91ab3da1.js} +1 -1
  78. package/dist/mint-components/p-9320582e.system.js +1 -0
  79. package/dist/mint-components/{p-51d3cde7.system.entry.js → p-9386ad84.system.entry.js} +1 -1
  80. package/dist/mint-components/p-962f3200.js +1 -0
  81. package/dist/mint-components/{p-54adee71.system.entry.js → p-9bfd9bed.system.entry.js} +1 -1
  82. package/dist/mint-components/{p-7846937e.entry.js → p-b51e79b3.entry.js} +2 -2
  83. package/dist/mint-components/p-b93fd99c.system.entry.js +1 -0
  84. package/dist/mint-components/p-d3d74266.js +394 -0
  85. package/dist/mint-components/{p-bb0f585c.system.js → p-e5d0375e.system.js} +1 -1
  86. package/dist/mint-components/{p-012af236.entry.js → p-f29eda2f.entry.js} +4 -4
  87. package/dist/mint-components/p-f2cc6a6f.entry.js +9 -0
  88. package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field-view.d.ts +1 -1
  89. package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field.d.ts +4 -4
  90. package/dist/types/components/sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.d.ts +8 -0
  91. package/dist/types/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.d.ts +27 -0
  92. package/dist/types/components/{sqm-qr-code/QRCode.stories.d.ts → sqm-portal-change-marketing/ChangeMarketing.stories.d.ts} +2 -2
  93. package/dist/types/components/sqm-portal-change-marketing/sqm-portal-change-marketing-view.d.ts +28 -0
  94. package/dist/types/components/sqm-portal-change-marketing/sqm-portal-change-marketing.d.ts +39 -0
  95. package/dist/types/components/sqm-portal-change-marketing/usePortalChangeMarketing.d.ts +3 -0
  96. package/dist/types/components/sqm-portal-email-verification/sqm-portal-email-verification.d.ts +1 -1
  97. package/dist/types/components/sqm-portal-forgot-password/sqm-portal-forgot-password.d.ts +1 -1
  98. package/dist/types/components/sqm-portal-login/sqm-portal-login.d.ts +1 -1
  99. package/dist/types/components/sqm-portal-registration-form/PortalRegistrationForm.stories.d.ts +1 -0
  100. package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form-view.d.ts +1 -0
  101. package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form.d.ts +1 -1
  102. package/dist/types/components/sqm-portal-reset-password/sqm-portal-reset-password.d.ts +1 -1
  103. package/dist/types/components/sqm-portal-verify-email/sqm-portal-verify-email.d.ts +1 -1
  104. package/dist/types/components/sqm-titled-section/sqm-titled-section.d.ts +1 -0
  105. package/dist/types/components.d.ts +132 -85
  106. package/docs/docs.docx +0 -0
  107. package/docs/raisins.json +1 -1
  108. package/grapesjs/grapesjs.js +1 -1
  109. package/package.json +1 -1
  110. package/dist/cjs/ErrorView-b2fcf954.js +0 -35
  111. package/dist/cjs/copy-text-view-c85acaaa.js +0 -96
  112. package/dist/cjs/sqm-qr-code-view-82b14685.js +0 -89
  113. package/dist/cjs/sqm-qr-code.cjs.entry.js +0 -199
  114. package/dist/collection/components/sqm-qr-code/QRCode.stories.js +0 -37
  115. package/dist/collection/components/sqm-qr-code/sqm-qr-code-view.js +0 -84
  116. package/dist/collection/components/sqm-qr-code/sqm-qr-code.js +0 -229
  117. package/dist/collection/components/sqm-qr-code/useQRCode.js +0 -129
  118. package/dist/esm/ErrorView-48e2b969.js +0 -33
  119. package/dist/esm/copy-text-view-782137ba.js +0 -94
  120. package/dist/esm/sqm-qr-code-view-2dff1823.js +0 -87
  121. package/dist/esm/sqm-qr-code.entry.js +0 -195
  122. package/dist/esm-es5/ErrorView-48e2b969.js +0 -1
  123. package/dist/esm-es5/ShadowViewAddon-499b1f86.js +0 -1
  124. package/dist/esm-es5/copy-text-view-782137ba.js +0 -1
  125. package/dist/esm-es5/sqm-big-stat_39.entry.js +0 -1
  126. package/dist/esm-es5/sqm-invoice-table-view-2c726568.js +0 -1
  127. package/dist/esm-es5/sqm-qr-code-view-2dff1823.js +0 -1
  128. package/dist/esm-es5/sqm-qr-code.entry.js +0 -1
  129. package/dist/esm-es5/useReferralCodes-8f75921a.js +0 -1
  130. package/dist/mint-components/p-31015791.js +0 -1
  131. package/dist/mint-components/p-31c73e3a.system.entry.js +0 -1
  132. package/dist/mint-components/p-3a62a7e2.system.js +0 -1
  133. package/dist/mint-components/p-3b90e01b.system.js +0 -1
  134. package/dist/mint-components/p-3edc9c8a.entry.js +0 -9
  135. package/dist/mint-components/p-3f067fd5.js +0 -1
  136. package/dist/mint-components/p-3f7b81b8.js +0 -52
  137. package/dist/mint-components/p-4f6bb357.system.js +0 -1
  138. package/dist/mint-components/p-5afd7e38.system.entry.js +0 -1
  139. package/dist/mint-components/p-5cb7f9fc.system.entry.js +0 -1
  140. package/dist/mint-components/p-7c434c65.js +0 -1
  141. package/dist/mint-components/p-97038074.system.entry.js +0 -1
  142. package/dist/mint-components/p-9acb5038.js +0 -1
  143. package/dist/mint-components/p-a7746488.system.js +0 -1
  144. package/dist/mint-components/p-d78298a5.entry.js +0 -17
  145. package/dist/mint-components/p-da4ff3b4.system.js +0 -1
  146. package/dist/mint-components/p-dbc0e4f8.system.js +0 -1
  147. package/dist/mint-components/p-e2d5cd22.js +0 -394
  148. package/dist/mint-components/p-f15c1a53.entry.js +0 -241
  149. package/dist/mint-components/p-f4ba6e2b.system.entry.js +0 -1
  150. package/dist/types/components/sqm-qr-code/sqm-qr-code-view.d.ts +0 -17
  151. package/dist/types/components/sqm-qr-code/sqm-qr-code.d.ts +0 -41
  152. package/dist/types/components/sqm-qr-code/useQRCode.d.ts +0 -3
  153. package/dist/types/global/android.d.ts +0 -7
  154. package/dist/types/global/demo.d.ts +0 -2
  155. package/dist/types/stories/features.d.ts +0 -4
  156. package/dist/types/stories/templates.d.ts +0 -4
@@ -46,12 +46,14 @@
46
46
  "./components/sqm-leaderboard-rank/sqm-leaderboard-rank.js",
47
47
  "./components/sqm-link-button/sqm-link-button.js",
48
48
  "./components/sqm-logout-current-user/sqm-logout-current-user.js",
49
+ "./components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.js",
49
50
  "./components/sqm-name-fields/sqm-name-fields.js",
50
51
  "./components/sqm-navigation-menu/sqm-navigation-menu.js",
51
52
  "./components/sqm-navigation-sidebar/sqm-navigation-sidebar.js",
52
53
  "./components/sqm-navigation-sidebar-item/sqm-navigation-sidebar-item.js",
53
54
  "./components/sqm-payout-button-scroll/sqm-payout-button-scroll.js",
54
55
  "./components/sqm-popup-container/sqm-popup-container.js",
56
+ "./components/sqm-portal-change-marketing/sqm-portal-change-marketing.js",
55
57
  "./components/sqm-portal-change-password/sqm-portal-change-password.js",
56
58
  "./components/sqm-portal-container/sqm-portal-container.js",
57
59
  "./components/sqm-portal-email-verification/sqm-portal-email-verification.js",
@@ -70,7 +72,6 @@
70
72
  "./components/sqm-program-explainer/sqm-program-explainer.js",
71
73
  "./components/sqm-program-explainer-step/sqm-program-explainer-step.js",
72
74
  "./components/sqm-program-menu/sqm-program-menu.js",
73
- "./components/sqm-qr-code/sqm-qr-code.js",
74
75
  "./components/sqm-referral-card/sqm-referral-card.js",
75
76
  "./components/sqm-referral-code/sqm-referral-code.js",
76
77
  "./components/sqm-referral-iframe/sqm-referral-iframe.js",
@@ -17,7 +17,7 @@ const defaultProps = {
17
17
  checked: false,
18
18
  },
19
19
  content: {
20
- checkboxName: "agree",
20
+ checkboxName: "terms",
21
21
  checkboxLabel: "By signing up you agree to the {labelLink}",
22
22
  checkboxLabelLink: "https://example.com",
23
23
  checkboxLabelLinkText: "Terms and Conditions",
@@ -54,19 +54,10 @@ export function CheckboxFieldView(props) {
54
54
  h("sl-checkbox", Object.assign({ exportparts: "label: input-label, base: input-base", name: `/${content.checkboxName}`, checked: states.checked, "onSl-change": (e) => {
55
55
  e.target.value = e.target.checked;
56
56
  callbacks.setChecked(e.target.value);
57
- } }, (!content.checkboxOptional ? { required: true } : []), { disabled: ((_b = states.registrationFormState) === null || _b === void 0 ? void 0 : _b.loading) || ((_c = states.registrationFormState) === null || _c === void 0 ? void 0 : _c.disabled) }, (!states.checked && (validationErrors === null || validationErrors === void 0 ? void 0 : validationErrors[content.checkboxName])
58
- ? {
59
- class: sheet.classes.ErrorStyle,
60
- }
61
- : [])),
62
- intl.formatMessage({
63
- id: content.checkboxName + "-message",
64
- defaultMessage: content.checkboxLabel,
65
- }, {
66
- labelLink: (h("a", { href: content.checkboxLabelLink, target: "_blank" }, content.checkboxLabelLinkText || content.checkboxLabelLink)),
67
- }),
68
- !states.checked && (validationErrors === null || validationErrors === void 0 ? void 0 : validationErrors[content.checkboxName]) && (h("p", { class: sheet.classes.ErrorMessageStyle }, intl.formatMessage({
69
- id: `errorMessage-${content.checkboxName}`,
70
- defaultMessage: content.errorMessage,
71
- }))))));
57
+ } }, (!content.checkboxOptional ? { required: false } : []), { disabled: ((_b = states.registrationFormState) === null || _b === void 0 ? void 0 : _b.loading) || ((_c = states.registrationFormState) === null || _c === void 0 ? void 0 : _c.disabled), required: false }), intl.formatMessage({
58
+ id: content.checkboxName + "-message",
59
+ defaultMessage: content.checkboxLabel,
60
+ }, {
61
+ labelLink: (h("a", { href: content.checkboxLabelLink, target: "_blank" }, content.checkboxLabelLinkText || content.checkboxLabelLink)),
62
+ }))));
72
63
  }
@@ -10,7 +10,7 @@ import { useCheckboxField } from "./useCheckboxField";
10
10
  * @uiName Form Checkbox Field
11
11
  * @validParents ["sqm-portal-register","sqm-portal-registration-form"]
12
12
  * @exampleGroup Microsite Components
13
- * @example Form Checkbox Field - <sqm-checkbox-field checkbox-label="By signing up you agree to the {labelLink}" checkbox-label-link="https://example.com" checkbox-label-link-text="Terms and Conditions" error-message="Must be checked" ></sqm-checkbox-field>
13
+ * @example Form Checkbox Field - <sqm-checkbox-field checkbox-name="terms" checkbox-label="By signing up you agree to the {labelLink}" checkbox-label-link="https://example.com" checkbox-label-link-text="Terms and Conditions" error-message="Must be checked" ></sqm-checkbox-field>
14
14
  */
15
15
  export class CheckboxField {
16
16
  constructor() {
@@ -117,7 +117,7 @@ export class CheckboxField {
117
117
  "references": {}
118
118
  },
119
119
  "required": false,
120
- "optional": false,
120
+ "optional": true,
121
121
  "docs": {
122
122
  "tags": [{
123
123
  "text": "Checkbox label link",
@@ -138,7 +138,7 @@ export class CheckboxField {
138
138
  "references": {}
139
139
  },
140
140
  "required": false,
141
- "optional": false,
141
+ "optional": true,
142
142
  "docs": {
143
143
  "tags": [{
144
144
  "text": "Checkbox label link lext",
@@ -159,7 +159,7 @@ export class CheckboxField {
159
159
  "references": {}
160
160
  },
161
161
  "required": false,
162
- "optional": false,
162
+ "optional": true,
163
163
  "docs": {
164
164
  "tags": [{
165
165
  "text": "Unchecked error message",
@@ -197,7 +197,7 @@ export class CheckboxField {
197
197
  "mutable": false,
198
198
  "complexType": {
199
199
  "original": "DemoData<CheckboxFieldViewProps>",
200
- "resolved": "{ states?: { registrationFormState?: RegistrationFormState; checked: boolean; }; content?: { checkboxName: string; checkboxLabel: string; checkboxLabelLink?: string; checkboxLabelLinkText?: string; checkboxOptional?: boolean; errorMessage: string; }; }",
200
+ "resolved": "{ states?: { registrationFormState?: RegistrationFormState; checked: boolean; }; content?: { checkboxName: string; checkboxLabel: string; checkboxLabelLink?: string; checkboxLabelLinkText?: string; checkboxOptional?: boolean; errorMessage?: string; }; }",
201
201
  "references": {
202
202
  "DemoData": {
203
203
  "location": "import",
@@ -0,0 +1,11 @@
1
+ import { h } from "@stencil/core";
2
+ import scenario from "./sqm-marketing-emails-checkbox.feature";
3
+ export default {
4
+ title: "Components/Marketing Emails Checkbox",
5
+ parameters: {
6
+ scenario,
7
+ },
8
+ };
9
+ export const Default = () => {
10
+ return h("sqm-marketing-emails-checkbox", null);
11
+ };
@@ -0,0 +1,129 @@
1
+ import { isDemo } from "@saasquatch/component-boilerplate";
2
+ import { withHooks } from "@saasquatch/stencil-hooks";
3
+ import { Component, h, Prop, State } from "@stencil/core";
4
+ import deepmerge from "deepmerge";
5
+ import { getProps } from "../../utils/utils";
6
+ import { CheckboxFieldView, } from "../sqm-checkbox-field/sqm-checkbox-field-view";
7
+ import { useCheckboxField } from "../sqm-checkbox-field/useCheckboxField";
8
+ /**
9
+ * @uiName Marketing Emails Checkbox Field
10
+ * @validParents ["sqm-portal-register","sqm-portal-registration-form"]
11
+ * @requiredFeatures ["MARKETING_EMAILS"]
12
+ */
13
+ export class MarketingEmailsCheckbox {
14
+ constructor() {
15
+ this.ignored = true;
16
+ /**
17
+ * @uiName Checkbox label
18
+ * @uiWidget textArea
19
+ */
20
+ this.checkboxLabel = "I would like to receive marketing and promotional emails for this referral program";
21
+ /**
22
+ * @undocumented
23
+ */
24
+ this.checkboxName = "marketingEmailOptIn";
25
+ withHooks(this);
26
+ }
27
+ disconnectedCallback() { }
28
+ render() {
29
+ const content = {
30
+ ...getProps(this),
31
+ };
32
+ const { states, callbacks } = isDemo()
33
+ ? useCheckboxFieldDemo(this)
34
+ : useCheckboxField(this);
35
+ return (h(CheckboxFieldView, { states: states, content: content, callbacks: callbacks }));
36
+ }
37
+ static get is() { return "sqm-marketing-emails-checkbox"; }
38
+ static get properties() { return {
39
+ "checkboxLabel": {
40
+ "type": "string",
41
+ "mutable": false,
42
+ "complexType": {
43
+ "original": "string",
44
+ "resolved": "string",
45
+ "references": {}
46
+ },
47
+ "required": false,
48
+ "optional": false,
49
+ "docs": {
50
+ "tags": [{
51
+ "text": "Checkbox label",
52
+ "name": "uiName"
53
+ }, {
54
+ "text": "textArea",
55
+ "name": "uiWidget"
56
+ }],
57
+ "text": ""
58
+ },
59
+ "attribute": "checkbox-label",
60
+ "reflect": false,
61
+ "defaultValue": "\"I would like to receive marketing and promotional emails for this referral program\""
62
+ },
63
+ "checkboxName": {
64
+ "type": "string",
65
+ "mutable": false,
66
+ "complexType": {
67
+ "original": "string",
68
+ "resolved": "string",
69
+ "references": {}
70
+ },
71
+ "required": false,
72
+ "optional": false,
73
+ "docs": {
74
+ "tags": [{
75
+ "text": undefined,
76
+ "name": "undocumented"
77
+ }],
78
+ "text": ""
79
+ },
80
+ "attribute": "checkbox-name",
81
+ "reflect": false,
82
+ "defaultValue": "\"marketingEmailOptIn\""
83
+ },
84
+ "demoData": {
85
+ "type": "unknown",
86
+ "mutable": false,
87
+ "complexType": {
88
+ "original": "DemoData<CheckboxFieldViewProps>",
89
+ "resolved": "{ states?: { registrationFormState?: RegistrationFormState; checked: boolean; }; content?: { checkboxName: string; checkboxLabel: string; checkboxLabelLink?: string; checkboxLabelLinkText?: string; checkboxOptional?: boolean; errorMessage?: string; }; }",
90
+ "references": {
91
+ "DemoData": {
92
+ "location": "import",
93
+ "path": "../../global/demo"
94
+ },
95
+ "CheckboxFieldViewProps": {
96
+ "location": "import",
97
+ "path": "../sqm-checkbox-field/sqm-checkbox-field-view"
98
+ }
99
+ }
100
+ },
101
+ "required": false,
102
+ "optional": true,
103
+ "docs": {
104
+ "tags": [{
105
+ "text": undefined,
106
+ "name": "undocumented"
107
+ }, {
108
+ "text": "object",
109
+ "name": "uiType"
110
+ }],
111
+ "text": ""
112
+ }
113
+ }
114
+ }; }
115
+ static get states() { return {
116
+ "ignored": {}
117
+ }; }
118
+ }
119
+ function useCheckboxFieldDemo(props) {
120
+ return deepmerge({
121
+ states: {
122
+ registrationFormState: {},
123
+ checked: false,
124
+ },
125
+ callbacks: {
126
+ setChecked: () => { },
127
+ },
128
+ }, props.demoData || {}, { arrayMerge: (_, a) => a });
129
+ }
@@ -0,0 +1,54 @@
1
+ import { h } from "@stencil/core";
2
+ import { ChangeMarktingView } from "./sqm-portal-change-marketing-view";
3
+ export default {
4
+ title: "Components/Change Marketing Emails Status",
5
+ };
6
+ const defaultProps = {
7
+ states: {
8
+ success: false,
9
+ loading: false,
10
+ submitDisabled: false,
11
+ formState: {
12
+ marketingEmailOptIn: false,
13
+ errors: null,
14
+ error: "",
15
+ },
16
+ user: {
17
+ id: "zach",
18
+ accountId: "zach",
19
+ marketingEmailOptIn: false,
20
+ },
21
+ text: {
22
+ emailPreferencesHeader: "Email preferences",
23
+ marketingCheckboxLabel: "I want to receive marketing emails and promotions for this referral program from impact.com",
24
+ submitChangeButtonText: "Save",
25
+ successMessage: "Opt-in preference has been changed.",
26
+ },
27
+ },
28
+ callbacks: {
29
+ onSubmit: (props) => console.log(props),
30
+ setChecked: (value) => console.log(value),
31
+ },
32
+ };
33
+ export const Default = () => {
34
+ return h("sqm-portal-change-marketing", null);
35
+ };
36
+ export const Loading = () => {
37
+ return (h(ChangeMarktingView, Object.assign({}, defaultProps, { states: { ...defaultProps.states, loading: true } })));
38
+ };
39
+ export const Error = () => {
40
+ return (h(ChangeMarktingView, Object.assign({}, defaultProps, { states: {
41
+ ...defaultProps.states,
42
+ formState: {
43
+ ...defaultProps.states.formState,
44
+ errors: { error: true },
45
+ error: "An error string",
46
+ },
47
+ } })));
48
+ };
49
+ export const Success = () => {
50
+ return (h(ChangeMarktingView, Object.assign({}, defaultProps, { states: {
51
+ ...defaultProps.states,
52
+ success: true,
53
+ } })));
54
+ };
@@ -0,0 +1,47 @@
1
+ import { h } from "@stencil/core";
2
+ import { createStyleSheet } from "../../styling/JSS";
3
+ import { CheckboxFieldView } from "../sqm-checkbox-field/sqm-checkbox-field-view";
4
+ import { TextSpanView } from "../sqm-text-span/sqm-text-span-view";
5
+ export function ChangeMarktingView(props) {
6
+ const { states, callbacks } = props;
7
+ const { text, formState } = states;
8
+ const { error } = formState;
9
+ const style = {
10
+ Container: {
11
+ display: "flex",
12
+ flexDirection: "column",
13
+ gap: "var(--sl-spacing-x-small)",
14
+ padding: "0 var(--sl-spacing-xxx-large) var(--sl-spacing-xxx-large)",
15
+ },
16
+ SubmitButton: { marginBottom: "var(--sl-spacing-medium)" },
17
+ Error: {
18
+ "&::part(erroralert-base)": {
19
+ "margin-bottom": "15px",
20
+ },
21
+ },
22
+ Success: {
23
+ "&::part(successalert-base)": {
24
+ "margin-bottom": "15px",
25
+ },
26
+ },
27
+ };
28
+ const sheet = createStyleSheet(style);
29
+ const styleString = sheet.toString();
30
+ return (h("div", { class: sheet.classes.Container, part: "sqm-base" },
31
+ h("style", { type: "text/css" }, styleString),
32
+ h(TextSpanView, Object.assign({}, { type: "h2" }), text.emailPreferencesHeader),
33
+ h("sl-form", { "onSl-submit": callbacks.onSubmit },
34
+ h(CheckboxFieldView, { states: {
35
+ checked: states.formState.marketingEmailOptIn,
36
+ }, content: {
37
+ checkboxLabel: text.marketingCheckboxLabel,
38
+ checkboxName: "marketingEmailOptIn",
39
+ }, callbacks: {
40
+ setChecked: callbacks.setChecked,
41
+ } }),
42
+ h("sl-button", { class: sheet.classes.SubmitButton, type: "primary", submit: true, loading: states.loading, disabled: states.submitDisabled }, text.submitChangeButtonText),
43
+ error && (h("sqm-form-message", { class: sheet.classes.Error, type: "error", exportparts: "erroralert-icon" },
44
+ h("div", { part: "erroralert-text" }, error))),
45
+ states.success && (h("sqm-form-message", { class: sheet.classes.Success, type: "success", exportparts: "successalert-icon" },
46
+ h("div", { part: "successalert-text" }, states.text.successMessage))))));
47
+ }
@@ -0,0 +1,217 @@
1
+ import { Component, h, Prop, State } from "@stencil/core";
2
+ import { withHooks } from "@saasquatch/stencil-hooks";
3
+ import { ChangeMarktingView, } from "./sqm-portal-change-marketing-view";
4
+ import { usePortalProfile } from "./usePortalChangeMarketing";
5
+ import { getProps } from "../../utils/utils";
6
+ import { isDemo } from "@saasquatch/component-boilerplate";
7
+ import deepmerge from "deepmerge";
8
+ /**
9
+ * @uiName Change Marketing Opt in Status
10
+ * @requiredFeatures ["MARKETING_EMAILS"]
11
+ */
12
+ export class PortalChangeMarketing {
13
+ constructor() {
14
+ this.ignored = true;
15
+ /**
16
+ * @uiName Email preferences header
17
+ */
18
+ this.emailPreferencesHeader = "Email preferences";
19
+ /**
20
+ * @uiName Marketing checkbox label
21
+ */
22
+ this.marketingCheckboxLabel = "I want to receive marketing emails and promotions for this referral program from impact.com";
23
+ /**
24
+ * @uiName Submit changes button text
25
+ */
26
+ this.submitChangeButtonText = "Save";
27
+ /**
28
+ * Displayed when the page fails to load due to a network error. The participant can try refreshing the page.
29
+ *
30
+ * @uiName Network request error message
31
+ */
32
+ this.networkRequestMessage = "An error occurred while loading this page. Please refresh the page.";
33
+ /**
34
+ * @uiName Successful update message
35
+ */
36
+ this.successMessage = "Opt-in preference has been changed.";
37
+ withHooks(this);
38
+ }
39
+ disconnectedCallback() { }
40
+ render() {
41
+ const props = isDemo()
42
+ ? usePortalProfileDemo(getProps(this))
43
+ : usePortalProfile(getProps(this));
44
+ return h(ChangeMarktingView, Object.assign({}, props));
45
+ }
46
+ static get is() { return "sqm-portal-change-marketing"; }
47
+ static get encapsulation() { return "shadow"; }
48
+ static get properties() { return {
49
+ "emailPreferencesHeader": {
50
+ "type": "string",
51
+ "mutable": false,
52
+ "complexType": {
53
+ "original": "string",
54
+ "resolved": "string",
55
+ "references": {}
56
+ },
57
+ "required": false,
58
+ "optional": false,
59
+ "docs": {
60
+ "tags": [{
61
+ "text": "Email preferences header",
62
+ "name": "uiName"
63
+ }],
64
+ "text": ""
65
+ },
66
+ "attribute": "email-preferences-header",
67
+ "reflect": false,
68
+ "defaultValue": "\"Email preferences\""
69
+ },
70
+ "marketingCheckboxLabel": {
71
+ "type": "string",
72
+ "mutable": false,
73
+ "complexType": {
74
+ "original": "string",
75
+ "resolved": "string",
76
+ "references": {}
77
+ },
78
+ "required": false,
79
+ "optional": false,
80
+ "docs": {
81
+ "tags": [{
82
+ "text": "Marketing checkbox label",
83
+ "name": "uiName"
84
+ }],
85
+ "text": ""
86
+ },
87
+ "attribute": "marketing-checkbox-label",
88
+ "reflect": false,
89
+ "defaultValue": "\"I want to receive marketing emails and promotions for this referral program from impact.com\""
90
+ },
91
+ "submitChangeButtonText": {
92
+ "type": "string",
93
+ "mutable": false,
94
+ "complexType": {
95
+ "original": "string",
96
+ "resolved": "string",
97
+ "references": {}
98
+ },
99
+ "required": false,
100
+ "optional": false,
101
+ "docs": {
102
+ "tags": [{
103
+ "text": "Submit changes button text",
104
+ "name": "uiName"
105
+ }],
106
+ "text": ""
107
+ },
108
+ "attribute": "submit-change-button-text",
109
+ "reflect": false,
110
+ "defaultValue": "\"Save\""
111
+ },
112
+ "networkRequestMessage": {
113
+ "type": "string",
114
+ "mutable": false,
115
+ "complexType": {
116
+ "original": "string",
117
+ "resolved": "string",
118
+ "references": {}
119
+ },
120
+ "required": false,
121
+ "optional": false,
122
+ "docs": {
123
+ "tags": [{
124
+ "text": "Network request error message",
125
+ "name": "uiName"
126
+ }],
127
+ "text": "Displayed when the page fails to load due to a network error. The participant can try refreshing the page."
128
+ },
129
+ "attribute": "network-request-message",
130
+ "reflect": false,
131
+ "defaultValue": "\"An error occurred while loading this page. Please refresh the page.\""
132
+ },
133
+ "successMessage": {
134
+ "type": "string",
135
+ "mutable": false,
136
+ "complexType": {
137
+ "original": "string",
138
+ "resolved": "string",
139
+ "references": {}
140
+ },
141
+ "required": false,
142
+ "optional": false,
143
+ "docs": {
144
+ "tags": [{
145
+ "text": "Successful update message",
146
+ "name": "uiName"
147
+ }],
148
+ "text": ""
149
+ },
150
+ "attribute": "success-message",
151
+ "reflect": false,
152
+ "defaultValue": "\"Opt-in preference has been changed.\""
153
+ },
154
+ "demoData": {
155
+ "type": "unknown",
156
+ "mutable": false,
157
+ "complexType": {
158
+ "original": "DemoData<ChangeMarketingViewProps>",
159
+ "resolved": "{ states?: { success: boolean; loading: boolean; submitDisabled: boolean; formState: { marketingEmailOptIn: boolean; errors: any; error: string; }; user: { id: string; accountId: string; marketingEmailOptIn: boolean; }; text: { emailPreferencesHeader: string; marketingCheckboxLabel: string; submitChangeButtonText: string; successMessage: string; }; }; }",
160
+ "references": {
161
+ "DemoData": {
162
+ "location": "import",
163
+ "path": "../../global/demo"
164
+ },
165
+ "ChangeMarketingViewProps": {
166
+ "location": "import",
167
+ "path": "./sqm-portal-change-marketing-view"
168
+ }
169
+ }
170
+ },
171
+ "required": false,
172
+ "optional": true,
173
+ "docs": {
174
+ "tags": [{
175
+ "text": undefined,
176
+ "name": "undocumented"
177
+ }, {
178
+ "text": "object",
179
+ "name": "uiType"
180
+ }],
181
+ "text": ""
182
+ }
183
+ }
184
+ }; }
185
+ static get states() { return {
186
+ "ignored": {}
187
+ }; }
188
+ }
189
+ function usePortalProfileDemo(props) {
190
+ return deepmerge({
191
+ states: {
192
+ success: false,
193
+ loading: false,
194
+ submitDisabled: false,
195
+ user: {
196
+ id: "01",
197
+ accountId: "111100000",
198
+ marketingEmailOptIn: false,
199
+ },
200
+ text: {
201
+ emailPreferencesHeader: props.emailPreferencesHeader,
202
+ marketingCheckboxLabel: props.marketingCheckboxLabel,
203
+ submitChangeButtonText: props.submitChangeButtonText,
204
+ successMessage: props.successMessage,
205
+ },
206
+ formState: {
207
+ marketingEmailOptIn: false,
208
+ errors: null,
209
+ error: "",
210
+ },
211
+ },
212
+ callbacks: {
213
+ onSubmit: (e) => console.log(e),
214
+ setChecked: () => { },
215
+ },
216
+ }, props.demoData || {}, { arrayMerge: (_, a) => a });
217
+ }
@@ -0,0 +1,115 @@
1
+ import { useMutation, useQuery, useUserIdentity, } from "@saasquatch/component-boilerplate";
2
+ import { useEffect, useState } from "@saasquatch/universal-hooks";
3
+ import { gql } from "graphql-request";
4
+ import jsonpointer from "jsonpointer";
5
+ const GET_USER = gql `
6
+ query {
7
+ viewer {
8
+ ... on User {
9
+ id
10
+ accountId
11
+ marketingEmailOptIn
12
+ }
13
+ }
14
+ }
15
+ `;
16
+ const UPSERT_USER = gql `
17
+ mutation ($userInput: UserInput!) {
18
+ upsertUser(userInput: $userInput) {
19
+ id
20
+ marketingEmailOptIn
21
+ }
22
+ }
23
+ `;
24
+ // view doesn't tolerate undefined, even when we're loading
25
+ const defaultFormState = {
26
+ marketingEmailOptIn: false,
27
+ errors: {},
28
+ error: "",
29
+ };
30
+ export function usePortalProfile(props) {
31
+ const userIdent = useUserIdentity();
32
+ const [success, setSuccess] = useState(false);
33
+ const [userData, setUserData] = useState(undefined);
34
+ const [formState, setFormState] = useState(defaultFormState);
35
+ const userDataResponse = useQuery(GET_USER, {}, !(userIdent === null || userIdent === void 0 ? void 0 : userIdent.jwt));
36
+ const [upsertUser, upsertUserResponse] = useMutation(UPSERT_USER);
37
+ useEffect(() => {
38
+ if (upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.loading)
39
+ return;
40
+ if (upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.errors) {
41
+ setFormState((state) => {
42
+ var _a, _b, _c;
43
+ return ({
44
+ ...state,
45
+ error: (_c = (_b = (_a = upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.errors) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.errors) === null || _c === void 0 ? void 0 : _c[0].message,
46
+ });
47
+ });
48
+ }
49
+ else {
50
+ setUserData((state) => {
51
+ var _a;
52
+ return ({
53
+ ...state,
54
+ ...(_a = upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.data) === null || _a === void 0 ? void 0 : _a.upsertUser,
55
+ });
56
+ });
57
+ if (upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.data)
58
+ setSuccess(true);
59
+ }
60
+ }, [upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.loading]);
61
+ useEffect(() => {
62
+ var _a, _b;
63
+ setUserData((data) => { var _a; return ({ ...data, ...(_a = userDataResponse === null || userDataResponse === void 0 ? void 0 : userDataResponse.data) === null || _a === void 0 ? void 0 : _a.viewer }); });
64
+ setFormState({
65
+ ...defaultFormState,
66
+ ...(_a = userDataResponse.data) === null || _a === void 0 ? void 0 : _a.viewer,
67
+ ...(_b = upsertUserResponse.data) === null || _b === void 0 ? void 0 : _b.upsertUser,
68
+ });
69
+ }, [userDataResponse === null || userDataResponse === void 0 ? void 0 : userDataResponse.data]);
70
+ useEffect(() => {
71
+ var _a, _b;
72
+ if ((_a = upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.errors) === null || _a === void 0 ? void 0 : _a.message) {
73
+ setFormState({
74
+ ...(_b = userDataResponse.data) === null || _b === void 0 ? void 0 : _b.viewer,
75
+ error: props.networkRequestMessage,
76
+ });
77
+ }
78
+ }, [upsertUserResponse === null || upsertUserResponse === void 0 ? void 0 : upsertUserResponse.errors]);
79
+ const onSubmit = (event) => {
80
+ var _a;
81
+ setSuccess(false);
82
+ const formData = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.formData;
83
+ formData === null || formData === void 0 ? void 0 : formData.forEach((value, key) => {
84
+ jsonpointer.set(formData, key, value);
85
+ });
86
+ upsertUser({
87
+ userInput: {
88
+ id: userIdent === null || userIdent === void 0 ? void 0 : userIdent.id,
89
+ accountId: userIdent === null || userIdent === void 0 ? void 0 : userIdent.accountId,
90
+ marketingEmailOptIn: Boolean(formData.marketingEmailOptIn),
91
+ },
92
+ });
93
+ setFormState((s) => ({ ...s, errors: {}, error: "" }));
94
+ return;
95
+ };
96
+ return {
97
+ states: {
98
+ success,
99
+ loading: (userDataResponse === null || userDataResponse === void 0 ? void 0 : userDataResponse.loading) || upsertUserResponse.loading,
100
+ submitDisabled: false,
101
+ formState,
102
+ user: userData,
103
+ text: {
104
+ emailPreferencesHeader: props.emailPreferencesHeader,
105
+ marketingCheckboxLabel: props.marketingCheckboxLabel,
106
+ submitChangeButtonText: props.submitChangeButtonText,
107
+ successMessage: props.successMessage,
108
+ },
109
+ },
110
+ callbacks: {
111
+ onSubmit,
112
+ setChecked: (value) => setFormState({ ...formState, marketingEmailOptIn: value }),
113
+ },
114
+ };
115
+ }