@ebitex/forms-sdk 1.0.235 → 1.0.241
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.
- package/dist/attribution.d.ts +19 -0
- package/dist/attribution.d.ts.map +1 -0
- package/dist/attribution.js +38 -0
- package/dist/attribution.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react/EbitexForm.d.ts +8 -1
- package/dist/react/EbitexForm.d.ts.map +1 -1
- package/dist/react/EbitexForm.js +9 -2
- package/dist/react/EbitexForm.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a visitor came from: the three campaign tags of the link they followed (the `utm_*` values under their short names). A neutral value that the suite's SDKs carry to the things that can
|
|
3
|
+
* create or identify a person, so Audience can record it once as their first touch.
|
|
4
|
+
*
|
|
5
|
+
* The text is untrusted (anyone can write a link). This SDK stores nothing: it reads the page's address, or what the site passes, at the moment it sends. Keeping a first touch across
|
|
6
|
+
* pages is the site's decision. The cleaning rules exist in four places (Audience, Forms, visitors-sdk and here), held together by one shared fixture, so they are changed together or not at all.
|
|
7
|
+
*/
|
|
8
|
+
export interface Attribution {
|
|
9
|
+
source?: string;
|
|
10
|
+
medium?: string;
|
|
11
|
+
campaign?: string;
|
|
12
|
+
}
|
|
13
|
+
/** One member: control and format characters removed, trimmed, cut at 100 without leaving half a surrogate pair; `undefined` when nothing is left. */
|
|
14
|
+
export declare function cleanAttributionValue(value: unknown): string | undefined;
|
|
15
|
+
/** The attribution with every member cleaned, or `undefined` when it has nothing in it. */
|
|
16
|
+
export declare function normalizeAttribution(raw: unknown): Attribution | undefined;
|
|
17
|
+
/** The three `utm_*` tags of an address' query string (the first value of each), cleaned. */
|
|
18
|
+
export declare function readAttributionFromSearch(search: string): Attribution | undefined;
|
|
19
|
+
//# sourceMappingURL=attribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAID,sJAAsJ;AACtJ,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWxE;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAW1E;AAED,6FAA6F;AAC7F,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGjF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const MAX_LENGTH = 100;
|
|
2
|
+
/** One member: control and format characters removed, trimmed, cut at 100 without leaving half a surrogate pair; `undefined` when nothing is left. */
|
|
3
|
+
export function cleanAttributionValue(value) {
|
|
4
|
+
if (typeof value !== 'string')
|
|
5
|
+
return undefined;
|
|
6
|
+
let text = value.replace(/[\p{Cc}\p{Cf}]/gu, '').trim();
|
|
7
|
+
if (text.length > MAX_LENGTH) {
|
|
8
|
+
text = text.slice(0, MAX_LENGTH);
|
|
9
|
+
const last = text.charCodeAt(text.length - 1);
|
|
10
|
+
if (last >= 0xd800 && last <= 0xdbff)
|
|
11
|
+
text = text.slice(0, -1);
|
|
12
|
+
text = text.trimEnd();
|
|
13
|
+
}
|
|
14
|
+
return text === '' ? undefined : text;
|
|
15
|
+
}
|
|
16
|
+
/** The attribution with every member cleaned, or `undefined` when it has nothing in it. */
|
|
17
|
+
export function normalizeAttribution(raw) {
|
|
18
|
+
if (raw === null || typeof raw !== 'object')
|
|
19
|
+
return undefined;
|
|
20
|
+
const input = raw;
|
|
21
|
+
const result = {};
|
|
22
|
+
const source = cleanAttributionValue(input.source);
|
|
23
|
+
const medium = cleanAttributionValue(input.medium);
|
|
24
|
+
const campaign = cleanAttributionValue(input.campaign);
|
|
25
|
+
if (source !== undefined)
|
|
26
|
+
result.source = source;
|
|
27
|
+
if (medium !== undefined)
|
|
28
|
+
result.medium = medium;
|
|
29
|
+
if (campaign !== undefined)
|
|
30
|
+
result.campaign = campaign;
|
|
31
|
+
return Object.keys(result).length === 0 ? undefined : result;
|
|
32
|
+
}
|
|
33
|
+
/** The three `utm_*` tags of an address' query string (the first value of each), cleaned. */
|
|
34
|
+
export function readAttributionFromSearch(search) {
|
|
35
|
+
const params = new URLSearchParams(search);
|
|
36
|
+
return normalizeAttribution({ source: params.get('utm_source'), medium: params.get('utm_medium'), campaign: params.get('utm_campaign') });
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=attribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribution.js","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,GAAG,GAAG,CAAA;AAEtB,sJAAsJ;AACtJ,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC/C,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACvD,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;IAED,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACvC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC7D,MAAM,KAAK,GAAG,GAA8B,CAAA;IAC5C,MAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACtD,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IAChD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;AAC9D,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IAC1C,OAAO,oBAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;AAC3I,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* must only ever run server-side, while the components render in a respondent's browser and must
|
|
8
8
|
* never receive one. Expressing the boundary in the import graph makes a mistake visible in review.
|
|
9
9
|
*/
|
|
10
|
+
export type { Attribution } from './attribution.js';
|
|
10
11
|
export { createFormsClient, FormsApiError, type FormsClient, type FormsClientOptions, } from './client.js';
|
|
11
12
|
export { validateSubmission, type ValidateOptions } from './validators.js';
|
|
12
13
|
export { isAllOfSatisfied, isFieldComparisonSatisfied, isSatisfied } from './predicates.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,iBAAiB,EACjB,aAAa,GAGd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAwB,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EA6BN,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAG3B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,oBAAoB,EAAuB,MAAM,aAAa,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CSSProperties } from 'react';
|
|
2
|
+
import { type Attribution } from '../attribution.js';
|
|
2
3
|
import type { ConsentOptions, LookupSource, SdkForm, SubmissionData, VisitorStorage } from '../types.js';
|
|
3
4
|
import { type VisitorSession } from '../visitor.js';
|
|
4
5
|
import type { FieldComponents } from './fields.js';
|
|
@@ -47,6 +48,12 @@ export interface EbitexFormProps {
|
|
|
47
48
|
* call `forget` from your own UI. When given, `consent` and `storage` here are ignored.
|
|
48
49
|
*/
|
|
49
50
|
visitor?: VisitorSession;
|
|
51
|
+
/**
|
|
52
|
+
* Where the respondent came from, the tags of the link they followed (the `utm_*` values under their short names), sent with the submission so Audience can record it as their first touch.
|
|
53
|
+
* A value, or a function asked at each submit. Defaults to the `utm_source`, `utm_medium` and `utm_campaign` of the page's own address in a browser; pass your own to give a first touch you
|
|
54
|
+
* kept from an earlier page (the component stores nothing), or `() => undefined` to send none. The text is untrusted and is cleaned again by the server.
|
|
55
|
+
*/
|
|
56
|
+
attribution?: Attribution | (() => Attribution | undefined);
|
|
50
57
|
/** Injectable for tests and non-standard runtimes. */
|
|
51
58
|
fetch?: typeof globalThis.fetch;
|
|
52
59
|
}
|
|
@@ -63,5 +70,5 @@ export interface EbitexFormProps {
|
|
|
63
70
|
* isn't lost — matching the behaviour of ebitex's own renderer rather than a simplified
|
|
64
71
|
* client-only notion of steps.
|
|
65
72
|
*/
|
|
66
|
-
export declare function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, consent, storage, visitor: injectedVisitor, fetch: injectedFetch, }: EbitexFormProps): import("react").JSX.Element | null;
|
|
73
|
+
export declare function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, consent, storage, visitor: injectedVisitor, attribution, fetch: injectedFetch, }: EbitexFormProps): import("react").JSX.Element | null;
|
|
67
74
|
//# sourceMappingURL=EbitexForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EbitexForm.d.ts","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"EbitexForm.d.ts","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AAE/E,OAAO,EAAmD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAErG,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAoB,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1H,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,0BAA0B,CAAA;AAW3D,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,IAAI,EAAE,OAAO,CAAA;IAEb,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAE5C,wGAAwG;IACxG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAElC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IAErB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAA;IAE3D,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,OAAO,EACP,SAAS,EACT,KAAK,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EAAE,eAAe,EACxB,WAAW,EACX,KAAK,EAAE,aAAa,GACrB,EAAE,eAAe,sCAgPjB"}
|
package/dist/react/EbitexForm.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useId, useMemo, useState } from 'react';
|
|
3
3
|
import { adjacentVisibleStepSlot, collectSubmissionKeys, defaultChoiceValues, resolveSteps, resolveVisibleStepSlot } from '../nodes.js';
|
|
4
|
+
import { normalizeAttribution, readAttributionFromSearch } from '../attribution.js';
|
|
4
5
|
import { createPublicLookupSource, lookupUrlFromSubmissionUrl } from '../lookup.js';
|
|
5
6
|
import { createVisitorSession } from '../visitor.js';
|
|
6
7
|
import { validateSubmission } from '../validators.js';
|
|
@@ -34,7 +35,7 @@ function announceSubmission() {
|
|
|
34
35
|
* isn't lost — matching the behaviour of ebitex's own renderer rather than a simplified
|
|
35
36
|
* client-only notion of steps.
|
|
36
37
|
*/
|
|
37
|
-
export function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, consent, storage, visitor: injectedVisitor, fetch: injectedFetch, }) {
|
|
38
|
+
export function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, consent, storage, visitor: injectedVisitor, attribution, fetch: injectedFetch, }) {
|
|
38
39
|
const baseId = useId();
|
|
39
40
|
const doFetch = injectedFetch ?? globalThis.fetch;
|
|
40
41
|
const lookupSource = useMemo(() => {
|
|
@@ -109,13 +110,19 @@ export function EbitexForm({ form, onSubmitted, onError, className, style, field
|
|
|
109
110
|
const visibleKeys = collectSubmissionKeys(allNodes, data);
|
|
110
111
|
return Object.fromEntries(Object.entries(data).filter(([key]) => visibleKeys.has(key)));
|
|
111
112
|
}
|
|
113
|
+
// Where the respondent came from, read when they submit: what the site passes, else the tags of this page's address. Nothing is kept between submits.
|
|
114
|
+
function attributionNow() {
|
|
115
|
+
if (attribution !== undefined)
|
|
116
|
+
return normalizeAttribution(typeof attribution === 'function' ? attribution() : attribution);
|
|
117
|
+
return typeof window === 'undefined' ? undefined : readAttributionFromSearch(window.location.search);
|
|
118
|
+
}
|
|
112
119
|
async function save(complete) {
|
|
113
120
|
setSubmitting(true);
|
|
114
121
|
try {
|
|
115
122
|
const response = await doFetch(form.submissionUrl, {
|
|
116
123
|
method: 'POST',
|
|
117
124
|
headers: { 'Content-Type': 'application/json' },
|
|
118
|
-
body: JSON.stringify({ ...(await session.requestFields()), data: visiblePayload(), complete }),
|
|
125
|
+
body: JSON.stringify({ ...(await session.requestFields()), data: visiblePayload(), complete, ...(attributionNow() === undefined ? {} : { attribution: attributionNow() }) }),
|
|
119
126
|
});
|
|
120
127
|
if (!response.ok) {
|
|
121
128
|
// The server is authoritative: a field-level rejection is surfaced inline rather than
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EbitexForm.js","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACvI,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAA;AAE3D,SAAS,kBAAkB;IACzB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,UAAU;QAAE,OAAM;IACvF,IAAI,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"EbitexForm.js","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED