@builder.io/sdk-react-native 4.0.9 → 4.1.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 (107) hide show
  1. package/lib/browser/commonjs/blocks/form/form/form.js +33 -9
  2. package/lib/browser/commonjs/blocks/form/form/form.js.map +1 -1
  3. package/lib/browser/commonjs/blocks/img/img.js +15 -1
  4. package/lib/browser/commonjs/blocks/img/img.js.map +1 -1
  5. package/lib/browser/commonjs/blocks/personalization-container/helpers.js +2 -2
  6. package/lib/browser/commonjs/blocks/personalization-container/helpers.js.map +1 -1
  7. package/lib/browser/commonjs/blocks/personalization-container/personalization-container.js +2 -0
  8. package/lib/browser/commonjs/blocks/personalization-container/personalization-container.js.map +1 -1
  9. package/lib/browser/commonjs/constants/sdk-version.js +1 -1
  10. package/lib/browser/commonjs/helpers/no-serialize-wrapper.js +10 -0
  11. package/lib/browser/commonjs/helpers/no-serialize-wrapper.js.map +1 -0
  12. package/lib/browser/commonjs/helpers/user-attributes.js +20 -4
  13. package/lib/browser/commonjs/helpers/user-attributes.js.map +1 -1
  14. package/lib/browser/module/blocks/form/form/form.js +33 -9
  15. package/lib/browser/module/blocks/form/form/form.js.map +1 -1
  16. package/lib/browser/module/blocks/img/img.js +15 -1
  17. package/lib/browser/module/blocks/img/img.js.map +1 -1
  18. package/lib/browser/module/blocks/personalization-container/helpers.js +2 -2
  19. package/lib/browser/module/blocks/personalization-container/helpers.js.map +1 -1
  20. package/lib/browser/module/blocks/personalization-container/personalization-container.js +2 -0
  21. package/lib/browser/module/blocks/personalization-container/personalization-container.js.map +1 -1
  22. package/lib/browser/module/constants/sdk-version.js +1 -1
  23. package/lib/browser/module/helpers/no-serialize-wrapper.js +4 -0
  24. package/lib/browser/module/helpers/no-serialize-wrapper.js.map +1 -0
  25. package/lib/browser/module/helpers/user-attributes.js +20 -4
  26. package/lib/browser/module/helpers/user-attributes.js.map +1 -1
  27. package/lib/browser/typescript/blocks/personalization-container/helpers.d.ts.map +1 -1
  28. package/lib/browser/typescript/blocks/personalization-container/personalization-container.d.ts.map +1 -1
  29. package/lib/browser/typescript/constants/sdk-version.d.ts +1 -1
  30. package/lib/browser/typescript/helpers/no-serialize-wrapper.d.ts +2 -0
  31. package/lib/browser/typescript/helpers/no-serialize-wrapper.d.ts.map +1 -0
  32. package/lib/browser/typescript/helpers/user-attributes.d.ts +6 -2
  33. package/lib/browser/typescript/helpers/user-attributes.d.ts.map +1 -1
  34. package/lib/edge/commonjs/blocks/form/form/form.js +33 -9
  35. package/lib/edge/commonjs/blocks/form/form/form.js.map +1 -1
  36. package/lib/edge/commonjs/blocks/img/img.js +15 -1
  37. package/lib/edge/commonjs/blocks/img/img.js.map +1 -1
  38. package/lib/edge/commonjs/blocks/personalization-container/helpers.js +2 -2
  39. package/lib/edge/commonjs/blocks/personalization-container/helpers.js.map +1 -1
  40. package/lib/edge/commonjs/blocks/personalization-container/personalization-container.js +2 -0
  41. package/lib/edge/commonjs/blocks/personalization-container/personalization-container.js.map +1 -1
  42. package/lib/edge/commonjs/constants/sdk-version.js +1 -1
  43. package/lib/edge/commonjs/helpers/no-serialize-wrapper.js +10 -0
  44. package/lib/edge/commonjs/helpers/no-serialize-wrapper.js.map +1 -0
  45. package/lib/edge/commonjs/helpers/user-attributes.js +20 -4
  46. package/lib/edge/commonjs/helpers/user-attributes.js.map +1 -1
  47. package/lib/edge/module/blocks/form/form/form.js +33 -9
  48. package/lib/edge/module/blocks/form/form/form.js.map +1 -1
  49. package/lib/edge/module/blocks/img/img.js +15 -1
  50. package/lib/edge/module/blocks/img/img.js.map +1 -1
  51. package/lib/edge/module/blocks/personalization-container/helpers.js +2 -2
  52. package/lib/edge/module/blocks/personalization-container/helpers.js.map +1 -1
  53. package/lib/edge/module/blocks/personalization-container/personalization-container.js +2 -0
  54. package/lib/edge/module/blocks/personalization-container/personalization-container.js.map +1 -1
  55. package/lib/edge/module/constants/sdk-version.js +1 -1
  56. package/lib/edge/module/helpers/no-serialize-wrapper.js +4 -0
  57. package/lib/edge/module/helpers/no-serialize-wrapper.js.map +1 -0
  58. package/lib/edge/module/helpers/user-attributes.js +20 -4
  59. package/lib/edge/module/helpers/user-attributes.js.map +1 -1
  60. package/lib/edge/typescript/blocks/personalization-container/helpers.d.ts.map +1 -1
  61. package/lib/edge/typescript/blocks/personalization-container/personalization-container.d.ts.map +1 -1
  62. package/lib/edge/typescript/constants/sdk-version.d.ts +1 -1
  63. package/lib/edge/typescript/helpers/no-serialize-wrapper.d.ts +2 -0
  64. package/lib/edge/typescript/helpers/no-serialize-wrapper.d.ts.map +1 -0
  65. package/lib/edge/typescript/helpers/user-attributes.d.ts +6 -2
  66. package/lib/edge/typescript/helpers/user-attributes.d.ts.map +1 -1
  67. package/lib/node/commonjs/blocks/form/form/form.js +33 -9
  68. package/lib/node/commonjs/blocks/form/form/form.js.map +1 -1
  69. package/lib/node/commonjs/blocks/img/img.js +15 -1
  70. package/lib/node/commonjs/blocks/img/img.js.map +1 -1
  71. package/lib/node/commonjs/blocks/personalization-container/helpers.js +2 -2
  72. package/lib/node/commonjs/blocks/personalization-container/helpers.js.map +1 -1
  73. package/lib/node/commonjs/blocks/personalization-container/personalization-container.js +2 -0
  74. package/lib/node/commonjs/blocks/personalization-container/personalization-container.js.map +1 -1
  75. package/lib/node/commonjs/constants/sdk-version.js +1 -1
  76. package/lib/node/commonjs/helpers/no-serialize-wrapper.js +10 -0
  77. package/lib/node/commonjs/helpers/no-serialize-wrapper.js.map +1 -0
  78. package/lib/node/commonjs/helpers/user-attributes.js +20 -4
  79. package/lib/node/commonjs/helpers/user-attributes.js.map +1 -1
  80. package/lib/node/module/blocks/form/form/form.js +33 -9
  81. package/lib/node/module/blocks/form/form/form.js.map +1 -1
  82. package/lib/node/module/blocks/img/img.js +15 -1
  83. package/lib/node/module/blocks/img/img.js.map +1 -1
  84. package/lib/node/module/blocks/personalization-container/helpers.js +2 -2
  85. package/lib/node/module/blocks/personalization-container/helpers.js.map +1 -1
  86. package/lib/node/module/blocks/personalization-container/personalization-container.js +2 -0
  87. package/lib/node/module/blocks/personalization-container/personalization-container.js.map +1 -1
  88. package/lib/node/module/constants/sdk-version.js +1 -1
  89. package/lib/node/module/helpers/no-serialize-wrapper.js +4 -0
  90. package/lib/node/module/helpers/no-serialize-wrapper.js.map +1 -0
  91. package/lib/node/module/helpers/user-attributes.js +20 -4
  92. package/lib/node/module/helpers/user-attributes.js.map +1 -1
  93. package/lib/node/typescript/blocks/personalization-container/helpers.d.ts.map +1 -1
  94. package/lib/node/typescript/blocks/personalization-container/personalization-container.d.ts.map +1 -1
  95. package/lib/node/typescript/constants/sdk-version.d.ts +1 -1
  96. package/lib/node/typescript/helpers/no-serialize-wrapper.d.ts +2 -0
  97. package/lib/node/typescript/helpers/no-serialize-wrapper.d.ts.map +1 -0
  98. package/lib/node/typescript/helpers/user-attributes.d.ts +6 -2
  99. package/lib/node/typescript/helpers/user-attributes.d.ts.map +1 -1
  100. package/package.json +1 -1
  101. package/src/blocks/form/form/form.tsx +31 -9
  102. package/src/blocks/img/img.tsx +15 -0
  103. package/src/blocks/personalization-container/helpers.ts +2 -2
  104. package/src/blocks/personalization-container/personalization-container.tsx +3 -0
  105. package/src/constants/sdk-version.ts +1 -1
  106. package/src/helpers/no-serialize-wrapper.ts +3 -0
  107. package/src/helpers/user-attributes.ts +22 -4
@@ -187,6 +187,18 @@ function FormComponent(props: FormProps) {
187
187
  }
188
188
  }
189
189
  setFormState("sending");
190
+ if (
191
+ props.sendSubmissionsTo === "email" &&
192
+ (props.sendSubmissionsToEmail === "your@email.com" ||
193
+ !props.sendSubmissionsToEmail)
194
+ ) {
195
+ const message =
196
+ "SubmissionsToEmail is required when sendSubmissionsTo is set to email";
197
+ console.error(message);
198
+ setFormState("error");
199
+ mergeNewRootState({ formErrorMessage: message });
200
+ return;
201
+ }
190
202
  const formUrl = `${
191
203
  getEnv() === "dev" ? "http://localhost:5000" : "https://builder.io"
192
204
  }/api/v1/form-submit?apiKey=${props.builderContext.apiKey}&to=${btoa(
@@ -203,17 +215,27 @@ function FormComponent(props: FormProps) {
203
215
  } else {
204
216
  body = await res.text();
205
217
  }
206
- if (!res.ok && props.errorMessagePath) {
207
- /* TODO: allow supplying an error formatter function */ let message =
208
- get(body, props.errorMessagePath);
209
- if (message) {
210
- if (typeof message !== "string") {
211
- /* TODO: ideally convert json to yaml so it woul dbe like error: - email has been taken */ message =
212
- JSON.stringify(message);
218
+ if (!res.ok) {
219
+ const submitErrorEvent = new CustomEvent("submit:error", {
220
+ detail: { error: body, status: res.status },
221
+ });
222
+ if (formRef.current?.nativeElement) {
223
+ formRef.current?.nativeElement.dispatchEvent(submitErrorEvent);
224
+ if (submitErrorEvent.defaultPrevented) {
225
+ return;
213
226
  }
214
- setFormErrorMessage(message);
215
- mergeNewRootState({ formErrorMessage: message });
216
227
  }
228
+ setResponseData(body);
229
+ setFormState("error");
230
+ let message = props.errorMessagePath
231
+ ? get(body, props.errorMessagePath)
232
+ : body.message || body.error || body;
233
+ if (typeof message !== "string") {
234
+ message = JSON.stringify(message);
235
+ }
236
+ setFormErrorMessage(message);
237
+ mergeNewRootState({ formErrorMessage: message });
238
+ return;
217
239
  }
218
240
  setResponseData(body);
219
241
  setFormState(res.ok ? "success" : "error");
@@ -37,9 +37,23 @@ export interface ImgProps {
37
37
 
38
38
  import { isEditing } from "../../functions/is-editing";
39
39
  import { filterAttrs } from "../helpers";
40
+ import { getSrcSet } from "../image/image.helpers";
40
41
  import { setAttrs } from "../helpers";
41
42
 
42
43
  function ImgComponent(props: ImgProps) {
44
+ function srcSetToUse() {
45
+ const url = props.imgSrc || props.image;
46
+ if (!url || typeof url !== "string") {
47
+ return undefined;
48
+ }
49
+
50
+ // We can auto add srcset for cdn.builder.io images
51
+ if (!url.match(/builder\.io/)) {
52
+ return undefined;
53
+ }
54
+ return getSrcSet(url);
55
+ }
56
+
43
57
  return (
44
58
  <Image
45
59
  style={{
@@ -49,6 +63,7 @@ function ImgComponent(props: ImgProps) {
49
63
  key={(isEditing() && props.imgSrc) || "default-key"}
50
64
  alt={props.altText}
51
65
  source={{ uri: props.imgSrc || props.image }}
66
+ srcSet={srcSetToUse()}
52
67
  {...{}}
53
68
  {...props.attributes}
54
69
  />
@@ -30,7 +30,7 @@ type BlocksToRenderReturnType = {
30
30
  /**
31
31
  * SDKs that support Variant Containers
32
32
  */
33
- export const SDKS_SUPPORTING_PERSONALIZATION = (['react', 'vue', 'svelte'] as Target[]);
33
+ export const SDKS_SUPPORTING_PERSONALIZATION = (['react', 'vue', 'svelte', 'qwik'] as Target[]);
34
34
 
35
35
  /**
36
36
  * After hydration, we reset the tree
@@ -41,7 +41,7 @@ export const SDKS_SUPPORTING_PERSONALIZATION = (['react', 'vue', 'svelte'] as Ta
41
41
  * This helps us to avoid flicker and show the correct / winning variant initially and then once we've hydrated we show the winning variant
42
42
  * and keep a track of the cookies to update to the correct variant dynamically when the cookie updates.
43
43
  */
44
- export const SDKS_REQUIRING_RESET_APPROACH = (['vue', 'svelte'] as Target[]);
44
+ export const SDKS_REQUIRING_RESET_APPROACH = (['vue', 'svelte', 'qwik'] as Target[]);
45
45
  export function checkShouldRenderVariants(variants: PersonalizationContainerProps['variants'], canTrack: boolean) {
46
46
  const hasVariants = variants && variants.length > 0;
47
47
  if (TARGET === 'reactNative') return false;
@@ -121,6 +121,9 @@ function PersonalizationContainer(props: PersonalizationContainerProps) {
121
121
  const unsub = userAttributesService.subscribeOnUserAttributesChange(
122
122
  (attrs) => {
123
123
  setUserAttributes(attrs);
124
+ },
125
+ {
126
+ fireImmediately: TARGET === "qwik",
124
127
  }
125
128
  );
126
129
  if (!(isEditing() || isPreviewing())) {
@@ -1 +1 @@
1
- export const SDK_VERSION = "4.0.9"
1
+ export const SDK_VERSION = "4.1.0"
@@ -0,0 +1,3 @@
1
+ export function noSerializeWrapper(fn: () => void) {
2
+ return fn;
3
+ }
@@ -1,5 +1,7 @@
1
+ import { TARGET } from '../constants/target';
1
2
  import { isBrowser } from '../functions/is-browser';
2
3
  import { getCookieSync, setCookie } from './cookie';
4
+ import { noSerializeWrapper } from './no-serialize-wrapper';
3
5
  export interface UserAttributes {
4
6
  [key: string]: any;
5
7
  }
@@ -32,18 +34,34 @@ export function createUserAttributesService() {
32
34
  canTrack
33
35
  }) || '{}');
34
36
  },
35
- subscribeOnUserAttributesChange(callback: (attrs: UserAttributes) => void) {
37
+ subscribeOnUserAttributesChange(callback: (attrs: UserAttributes) => void, {
38
+ fireImmediately
39
+ }: {
40
+ fireImmediately?: boolean;
41
+ } = {}) {
36
42
  subscribers.add(callback);
37
- return () => {
43
+ if (fireImmediately) {
44
+ callback(this.getUserAttributes());
45
+ }
46
+ return noSerializeWrapper(function () {
38
47
  subscribers.delete(callback);
39
- };
48
+ });
40
49
  },
41
50
  setCanTrack(value: boolean) {
42
51
  canTrack = value;
43
52
  }
44
53
  };
45
54
  }
46
- export const userAttributesService = createUserAttributesService();
55
+ let _userAttributesService: ReturnType<typeof createUserAttributesService>;
56
+ if (isBrowser() && TARGET === 'qwik') {
57
+ if (!(window as any).__BUILDER_USER_ATTRIBUTES_SERVICE__) {
58
+ (window as any).__BUILDER_USER_ATTRIBUTES_SERVICE__ = createUserAttributesService();
59
+ }
60
+ _userAttributesService = (window as any).__BUILDER_USER_ATTRIBUTES_SERVICE__;
61
+ } else {
62
+ _userAttributesService = createUserAttributesService();
63
+ }
64
+ export const userAttributesService = _userAttributesService;
47
65
  export const setClientUserAttributes = (attributes: UserAttributes) => {
48
66
  userAttributesService.setUserAttributes(attributes);
49
67
  }