@amalaika/form-sdk-package 1.0.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 (75) hide show
  1. package/README.md +342 -0
  2. package/dist/cjs/client/__tests__/client.spec.d.ts +2 -0
  3. package/dist/cjs/client/__tests__/client.spec.d.ts.map +1 -0
  4. package/dist/cjs/client/__tests__/client.spec.js +300 -0
  5. package/dist/cjs/client/__tests__/client.spec.js.map +1 -0
  6. package/dist/cjs/client/index.d.ts +26 -0
  7. package/dist/cjs/client/index.d.ts.map +1 -0
  8. package/dist/cjs/client/index.js +179 -0
  9. package/dist/cjs/client/index.js.map +1 -0
  10. package/dist/cjs/client.d.ts +22 -0
  11. package/dist/cjs/client.d.ts.map +1 -0
  12. package/dist/cjs/client.js +111 -0
  13. package/dist/cjs/client.js.map +1 -0
  14. package/dist/cjs/index.d.ts +4 -0
  15. package/dist/cjs/index.d.ts.map +1 -0
  16. package/dist/cjs/index.js +10 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/package.json +1 -0
  19. package/dist/cjs/types/index.d.ts +91 -0
  20. package/dist/cjs/types/index.d.ts.map +1 -0
  21. package/dist/cjs/types/index.js +3 -0
  22. package/dist/cjs/types/index.js.map +1 -0
  23. package/dist/cjs/types.d.ts +78 -0
  24. package/dist/cjs/types.d.ts.map +1 -0
  25. package/dist/cjs/types.js +3 -0
  26. package/dist/cjs/types.js.map +1 -0
  27. package/dist/cjs/utils/__tests__/utils.spec.d.ts +2 -0
  28. package/dist/cjs/utils/__tests__/utils.spec.d.ts.map +1 -0
  29. package/dist/cjs/utils/__tests__/utils.spec.js +172 -0
  30. package/dist/cjs/utils/__tests__/utils.spec.js.map +1 -0
  31. package/dist/cjs/utils/index.d.ts +5 -0
  32. package/dist/cjs/utils/index.d.ts.map +1 -0
  33. package/dist/cjs/utils/index.js +45 -0
  34. package/dist/cjs/utils/index.js.map +1 -0
  35. package/dist/cjs/utils.d.ts +5 -0
  36. package/dist/cjs/utils.d.ts.map +1 -0
  37. package/dist/cjs/utils.js +45 -0
  38. package/dist/cjs/utils.js.map +1 -0
  39. package/dist/esm/client/__tests__/client.spec.d.ts +2 -0
  40. package/dist/esm/client/__tests__/client.spec.d.ts.map +1 -0
  41. package/dist/esm/client/__tests__/client.spec.js +355 -0
  42. package/dist/esm/client/__tests__/client.spec.js.map +1 -0
  43. package/dist/esm/client/index.d.ts +26 -0
  44. package/dist/esm/client/index.d.ts.map +1 -0
  45. package/dist/esm/client/index.js +175 -0
  46. package/dist/esm/client/index.js.map +1 -0
  47. package/dist/esm/client.d.ts +22 -0
  48. package/dist/esm/client.d.ts.map +1 -0
  49. package/dist/esm/client.js +107 -0
  50. package/dist/esm/client.js.map +1 -0
  51. package/dist/esm/index.d.ts +4 -0
  52. package/dist/esm/index.d.ts.map +1 -0
  53. package/dist/esm/index.js +3 -0
  54. package/dist/esm/index.js.map +1 -0
  55. package/dist/esm/types/index.d.ts +91 -0
  56. package/dist/esm/types/index.d.ts.map +1 -0
  57. package/dist/esm/types/index.js +2 -0
  58. package/dist/esm/types/index.js.map +1 -0
  59. package/dist/esm/types.d.ts +78 -0
  60. package/dist/esm/types.d.ts.map +1 -0
  61. package/dist/esm/types.js +2 -0
  62. package/dist/esm/types.js.map +1 -0
  63. package/dist/esm/utils/__tests__/utils.spec.d.ts +2 -0
  64. package/dist/esm/utils/__tests__/utils.spec.d.ts.map +1 -0
  65. package/dist/esm/utils/__tests__/utils.spec.js +182 -0
  66. package/dist/esm/utils/__tests__/utils.spec.js.map +1 -0
  67. package/dist/esm/utils/index.d.ts +5 -0
  68. package/dist/esm/utils/index.d.ts.map +1 -0
  69. package/dist/esm/utils/index.js +40 -0
  70. package/dist/esm/utils/index.js.map +1 -0
  71. package/dist/esm/utils.d.ts +5 -0
  72. package/dist/esm/utils.d.ts.map +1 -0
  73. package/dist/esm/utils.js +40 -0
  74. package/dist/esm/utils.js.map +1 -0
  75. package/package.json +54 -0
@@ -0,0 +1,107 @@
1
+ const DEFAULT_API_BASE = "https://api.eventsfactory.rw/api";
2
+ function getHeaders(locale) {
3
+ const headers = {};
4
+ if (locale)
5
+ headers["Accept-Language"] = locale;
6
+ return headers;
7
+ }
8
+ export class EventFormClient {
9
+ constructor(config) {
10
+ this.apiKey = config.apiKey;
11
+ this.resourceType = config.resourceType;
12
+ this.apiBase = (config.apiBaseUrl ?? DEFAULT_API_BASE).replace(/\/$/, "");
13
+ }
14
+ async fetchTickets(options) {
15
+ const url = new URL(`${this.apiBase}/events/tickets/event/${this.apiKey}/public`);
16
+ if (options?.locale)
17
+ url.searchParams.set("locale", options.locale);
18
+ if (options?.name)
19
+ url.searchParams.set("name", options.name);
20
+ const res = await fetch(url.toString(), {
21
+ headers: getHeaders(options?.locale),
22
+ });
23
+ if (!res.ok)
24
+ throw new Error(`Failed to fetch tickets (${res.status})`);
25
+ const json = await res.json();
26
+ return json.data;
27
+ }
28
+ async fetchTicketById(id, locale) {
29
+ const res = await fetch(`${this.apiBase}/events/tickets/${id}`, {
30
+ headers: getHeaders(locale),
31
+ });
32
+ if (!res.ok)
33
+ throw new Error(`Ticket not found (${res.status})`);
34
+ const json = await res.json();
35
+ return json.data;
36
+ }
37
+ async fetchLanguages() {
38
+ const res = await fetch(`${this.apiBase}/events/onboarding/main-info/${this.apiKey}/languages`);
39
+ if (!res.ok)
40
+ throw new Error(`Failed to fetch languages (${res.status})`);
41
+ const json = await res.json();
42
+ const sorted = json.data.sort((a, b) => a.isDefault === b.isDefault ? 0 : a.isDefault ? -1 : 1);
43
+ return sorted.map((l) => l.languageCode);
44
+ }
45
+ async fetchForm(ticketId, locale) {
46
+ const res = await fetch(`${this.apiBase}/application/forms/ticketing/${ticketId}/public`, { headers: getHeaders(locale) });
47
+ if (!res.ok)
48
+ throw new Error(`Form not found (${res.status})`);
49
+ const json = await res.json();
50
+ return json.data;
51
+ }
52
+ async authorizeUpload(formId, fieldId, file, locale) {
53
+ const res = await fetch(`${this.apiBase}/application/forms/${formId}/submissions/authorize-upload`, {
54
+ method: "POST",
55
+ headers: {
56
+ ...getHeaders(locale),
57
+ "Content-Type": "application/json",
58
+ },
59
+ body: JSON.stringify({
60
+ fieldId,
61
+ mimeType: file.type,
62
+ fileSize: file.size,
63
+ fileName: file.name,
64
+ }),
65
+ });
66
+ if (!res.ok) {
67
+ const err = await res.json();
68
+ throw new Error(err.message || "Upload authorization failed");
69
+ }
70
+ const json = await res.json();
71
+ return json.data.uploadToken;
72
+ }
73
+ async uploadFile(formId, token, file, locale) {
74
+ const formData = new globalThis.FormData();
75
+ formData.append("file", file);
76
+ formData.append("uploadToken", token);
77
+ const res = await fetch(`${this.apiBase}/application/forms/${formId}/submissions/upload`, {
78
+ method: "POST",
79
+ headers: getHeaders(locale),
80
+ body: formData,
81
+ });
82
+ if (!res.ok)
83
+ throw new Error("File upload failed");
84
+ const json = await res.json();
85
+ return json.data.url;
86
+ }
87
+ async submitForm(formId, data, context) {
88
+ const res = await fetch(`${this.apiBase}/application/forms/${formId}/submissions`, {
89
+ method: "POST",
90
+ headers: {
91
+ ...getHeaders(context.locale),
92
+ "Content-Type": "application/json",
93
+ },
94
+ body: JSON.stringify({
95
+ data,
96
+ eventId: context.eventId,
97
+ resourceType: this.resourceType,
98
+ resourceId: context.ticketId,
99
+ }),
100
+ });
101
+ if (!res.ok) {
102
+ const err = await res.json();
103
+ throw new Error(err.message || "Submission failed");
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { EventFormClient } from "./client/index.js";
2
+ export { getAllFields, isFieldVisible, getVisibleFieldIds, } from "./utils/index.js";
3
+ export type { ErrorMessages, EventFormConfig, FieldOption, FieldDefinition, StepDefinition, FormSchema, FormData, ApiResponse, TicketTranslation, Ticket, } from "./types/index.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,MAAM,GACP,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { EventFormClient } from "./client/index.js";
2
+ export { getAllFields, isFieldVisible, getVisibleFieldIds, } from "./utils/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,91 @@
1
+ export interface ErrorMessages {
2
+ fetchTickets: string;
3
+ fetchTicketById: string;
4
+ fetchLanguages: string;
5
+ fetchForm: string;
6
+ authorizeUpload: string;
7
+ uploadFile: string;
8
+ submitForm: string;
9
+ }
10
+ export interface EventFormConfig {
11
+ /** Event API key (e.g. "Am_550e8400-...") */
12
+ apiKey: string;
13
+ /** Resource type for form submissions */
14
+ resourceType: "ticketing" | "accommodation" | "exhibition";
15
+ /** API base URL — defaults to production */
16
+ apiBaseUrl?: string;
17
+ /** Default locale for all requests — can be changed later via setLocale() */
18
+ locale?: string;
19
+ /** Custom error messages — override any or all defaults */
20
+ errorMessages?: Partial<ErrorMessages>;
21
+ }
22
+ export interface FieldOption {
23
+ id: string;
24
+ value: string;
25
+ }
26
+ export interface FieldDefinition {
27
+ id: string;
28
+ type: "text" | "email" | "password" | "number" | "select" | "radio" | "checkbox" | "date" | "file";
29
+ required: boolean;
30
+ system?: boolean;
31
+ label?: string;
32
+ placeholder?: string;
33
+ options?: FieldOption[];
34
+ accept?: string[];
35
+ maxSize?: number;
36
+ visibility?: {
37
+ dependsOn: string;
38
+ operator: "equals" | "not_equals" | "in";
39
+ value: string | string[];
40
+ };
41
+ }
42
+ export interface StepDefinition {
43
+ id: string;
44
+ label?: string;
45
+ fields: FieldDefinition[];
46
+ }
47
+ export interface FormSchema {
48
+ fields?: FieldDefinition[];
49
+ steps?: StepDefinition[];
50
+ }
51
+ export interface FormData {
52
+ id: number;
53
+ title: string;
54
+ description: string | null;
55
+ status?: string;
56
+ eventId: number | null;
57
+ schema: FormSchema;
58
+ createdBy?: number;
59
+ }
60
+ export interface ApiResponse<T> {
61
+ statusCode: number;
62
+ message: string;
63
+ data: T;
64
+ }
65
+ export interface TicketTranslation {
66
+ id: number;
67
+ ticketId: number;
68
+ locale: string;
69
+ name: string;
70
+ createdBy: number;
71
+ }
72
+ export interface Ticket {
73
+ id: number;
74
+ eventId: number;
75
+ price: string;
76
+ currency: string;
77
+ attendanceType: "VIRTUAL" | "PHYSICAL" | "HYBRID";
78
+ virtualPrice: string | null;
79
+ physicalPrice: string | null;
80
+ quantityTotal: number;
81
+ salesStartAt: string | null;
82
+ salesEndAt: string | null;
83
+ discountPercentage: number | null;
84
+ discountEndAt: string | null;
85
+ isActive: boolean;
86
+ createdBy: number;
87
+ locale?: string;
88
+ name?: string;
89
+ translations?: TicketTranslation[];
90
+ }
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ export interface EventFormConfig {
2
+ /** Event API key (e.g. "Am_550e8400-...") */
3
+ apiKey: string;
4
+ /** Resource type for form submissions */
5
+ resourceType: "ticketing" | "accommodation" | "exhibition";
6
+ /** API base URL — defaults to production */
7
+ apiBaseUrl?: string;
8
+ }
9
+ export interface FieldOption {
10
+ id: string;
11
+ value: string;
12
+ }
13
+ export interface FieldDefinition {
14
+ id: string;
15
+ type: "text" | "email" | "password" | "number" | "select" | "radio" | "checkbox" | "date" | "file";
16
+ required: boolean;
17
+ system?: boolean;
18
+ label?: string;
19
+ placeholder?: string;
20
+ options?: FieldOption[];
21
+ accept?: string[];
22
+ maxSize?: number;
23
+ visibility?: {
24
+ dependsOn: string;
25
+ operator: "equals" | "not_equals" | "in";
26
+ value: string | string[];
27
+ };
28
+ }
29
+ export interface StepDefinition {
30
+ id: string;
31
+ label?: string;
32
+ fields: FieldDefinition[];
33
+ }
34
+ export interface FormSchema {
35
+ fields?: FieldDefinition[];
36
+ steps?: StepDefinition[];
37
+ }
38
+ export interface FormData {
39
+ id: number;
40
+ title: string;
41
+ description: string | null;
42
+ status?: string;
43
+ eventId: number | null;
44
+ schema: FormSchema;
45
+ createdBy?: number;
46
+ }
47
+ export interface ApiResponse<T> {
48
+ statusCode: number;
49
+ message: string;
50
+ data: T;
51
+ }
52
+ export interface TicketTranslation {
53
+ id: number;
54
+ ticketId: number;
55
+ locale: string;
56
+ name: string;
57
+ createdBy: number;
58
+ }
59
+ export interface Ticket {
60
+ id: number;
61
+ eventId: number;
62
+ price: string;
63
+ currency: string;
64
+ attendanceType: "VIRTUAL" | "PHYSICAL" | "HYBRID";
65
+ virtualPrice: string | null;
66
+ physicalPrice: string | null;
67
+ quantityTotal: number;
68
+ salesStartAt: string | null;
69
+ salesEndAt: string | null;
70
+ discountPercentage: number | null;
71
+ discountEndAt: string | null;
72
+ isActive: boolean;
73
+ createdBy: number;
74
+ locale?: string;
75
+ name?: string;
76
+ translations?: TicketTranslation[];
77
+ }
78
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.spec.d.ts","sourceRoot":"","sources":["../../../../src/utils/__tests__/utils.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,182 @@
1
+ import { getAllFields, isFieldVisible, getVisibleFieldIds } from "..";
2
+ // ---------------------------------------------------------------------------
3
+ // Helpers
4
+ // ---------------------------------------------------------------------------
5
+ function makeField(overrides) {
6
+ return {
7
+ type: "text",
8
+ required: false,
9
+ ...overrides,
10
+ };
11
+ }
12
+ // ---------------------------------------------------------------------------
13
+ // getAllFields
14
+ // ---------------------------------------------------------------------------
15
+ describe("getAllFields", () => {
16
+ it("returns fields from a flat schema", () => {
17
+ const schema = {
18
+ fields: [
19
+ makeField({ id: "first_name" }),
20
+ makeField({ id: "email", type: "email" }),
21
+ ],
22
+ };
23
+ const result = getAllFields(schema);
24
+ expect(result).toHaveLength(2);
25
+ expect(result.map((f) => f.id)).toEqual(["first_name", "email"]);
26
+ });
27
+ it("returns fields from a stepped schema", () => {
28
+ const schema = {
29
+ steps: [
30
+ { id: "step1", fields: [makeField({ id: "a" })] },
31
+ { id: "step2", fields: [makeField({ id: "b" }), makeField({ id: "c" })] },
32
+ ],
33
+ };
34
+ const result = getAllFields(schema);
35
+ expect(result).toHaveLength(3);
36
+ expect(result.map((f) => f.id)).toEqual(["a", "b", "c"]);
37
+ });
38
+ it("returns empty array when schema has neither fields nor steps", () => {
39
+ const schema = {};
40
+ expect(getAllFields(schema)).toEqual([]);
41
+ });
42
+ it("prefers steps over fields when both exist", () => {
43
+ const schema = {
44
+ fields: [makeField({ id: "flat" })],
45
+ steps: [{ id: "s1", fields: [makeField({ id: "stepped" })] }],
46
+ };
47
+ const result = getAllFields(schema);
48
+ expect(result.map((f) => f.id)).toEqual(["stepped"]);
49
+ });
50
+ });
51
+ // ---------------------------------------------------------------------------
52
+ // isFieldVisible
53
+ // ---------------------------------------------------------------------------
54
+ describe("isFieldVisible", () => {
55
+ it("returns true when field has no visibility rule", () => {
56
+ const field = makeField({ id: "name" });
57
+ expect(isFieldVisible(field, {}, [field])).toBe(true);
58
+ });
59
+ describe("equals operator", () => {
60
+ const allFields = [
61
+ makeField({ id: "role", type: "select" }),
62
+ makeField({
63
+ id: "talk_title",
64
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
65
+ }),
66
+ ];
67
+ it("shows field when condition is met", () => {
68
+ expect(isFieldVisible(allFields[1], { role: "speaker" }, allFields)).toBe(true);
69
+ });
70
+ it("hides field when condition is not met", () => {
71
+ expect(isFieldVisible(allFields[1], { role: "attendee" }, allFields)).toBe(false);
72
+ });
73
+ it("hides field when dependency has no value", () => {
74
+ expect(isFieldVisible(allFields[1], {}, allFields)).toBe(false);
75
+ });
76
+ });
77
+ describe("not_equals operator", () => {
78
+ const allFields = [
79
+ makeField({ id: "role", type: "select" }),
80
+ makeField({
81
+ id: "general_info",
82
+ visibility: { dependsOn: "role", operator: "not_equals", value: "speaker" },
83
+ }),
84
+ ];
85
+ it("shows field when value differs", () => {
86
+ expect(isFieldVisible(allFields[1], { role: "attendee" }, allFields)).toBe(true);
87
+ });
88
+ it("hides field when value matches", () => {
89
+ expect(isFieldVisible(allFields[1], { role: "speaker" }, allFields)).toBe(false);
90
+ });
91
+ });
92
+ describe("in operator", () => {
93
+ const allFields = [
94
+ makeField({ id: "diet", type: "checkbox" }),
95
+ makeField({
96
+ id: "allergy_details",
97
+ visibility: { dependsOn: "diet", operator: "in", value: ["vegan", "gluten_free"] },
98
+ }),
99
+ ];
100
+ it("shows field when single value is in target list", () => {
101
+ expect(isFieldVisible(allFields[1], { diet: "vegan" }, allFields)).toBe(true);
102
+ });
103
+ it("shows field when array value overlaps target list", () => {
104
+ expect(isFieldVisible(allFields[1], { diet: ["gluten_free", "other"] }, allFields)).toBe(true);
105
+ });
106
+ it("hides field when value is not in target list", () => {
107
+ expect(isFieldVisible(allFields[1], { diet: "none" }, allFields)).toBe(false);
108
+ });
109
+ });
110
+ describe("unknown operator", () => {
111
+ it("returns true for an unrecognized operator", () => {
112
+ const allFields = [
113
+ makeField({ id: "role", type: "select" }),
114
+ makeField({
115
+ id: "extra",
116
+ visibility: { dependsOn: "role", operator: "contains", value: "x" },
117
+ }),
118
+ ];
119
+ expect(isFieldVisible(allFields[1], { role: "anything" }, allFields)).toBe(true);
120
+ });
121
+ });
122
+ describe("cascading visibility", () => {
123
+ it("hides child when parent is hidden", () => {
124
+ const allFields = [
125
+ makeField({ id: "role", type: "select" }),
126
+ makeField({
127
+ id: "talk_title",
128
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
129
+ }),
130
+ makeField({
131
+ id: "talk_abstract",
132
+ visibility: { dependsOn: "talk_title", operator: "not_equals", value: "" },
133
+ }),
134
+ ];
135
+ // role is "attendee" → talk_title hidden → talk_abstract hidden too
136
+ expect(isFieldVisible(allFields[2], { role: "attendee" }, allFields)).toBe(false);
137
+ });
138
+ it("shows child when entire chain is satisfied", () => {
139
+ const allFields = [
140
+ makeField({ id: "role", type: "select" }),
141
+ makeField({
142
+ id: "talk_title",
143
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
144
+ }),
145
+ makeField({
146
+ id: "talk_abstract",
147
+ visibility: { dependsOn: "talk_title", operator: "not_equals", value: "" },
148
+ }),
149
+ ];
150
+ expect(isFieldVisible(allFields[2], { role: "speaker", talk_title: "My Talk" }, allFields)).toBe(true);
151
+ });
152
+ });
153
+ });
154
+ // ---------------------------------------------------------------------------
155
+ // getVisibleFieldIds
156
+ // ---------------------------------------------------------------------------
157
+ describe("getVisibleFieldIds", () => {
158
+ const allFields = [
159
+ makeField({ id: "first_name" }),
160
+ makeField({ id: "role", type: "select" }),
161
+ makeField({
162
+ id: "talk_title",
163
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
164
+ }),
165
+ makeField({ id: "email", type: "email" }),
166
+ ];
167
+ it("includes all fields without visibility rules", () => {
168
+ const visible = getVisibleFieldIds(allFields, {});
169
+ expect(visible.has("first_name")).toBe(true);
170
+ expect(visible.has("role")).toBe(true);
171
+ expect(visible.has("email")).toBe(true);
172
+ });
173
+ it("excludes fields whose condition is not met", () => {
174
+ const visible = getVisibleFieldIds(allFields, { role: "attendee" });
175
+ expect(visible.has("talk_title")).toBe(false);
176
+ });
177
+ it("includes conditional fields when condition is met", () => {
178
+ const visible = getVisibleFieldIds(allFields, { role: "speaker" });
179
+ expect(visible.has("talk_title")).toBe(true);
180
+ });
181
+ });
182
+ //# sourceMappingURL=utils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../../../src/utils/__tests__/utils.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FieldDefinition, FormSchema } from "../types/index.js";
2
+ export declare function getAllFields(schema: FormSchema): FieldDefinition[];
3
+ export declare function isFieldVisible(field: FieldDefinition, formValues: Record<string, unknown>, allFields: FieldDefinition[]): boolean;
4
+ export declare function getVisibleFieldIds(allFields: FieldDefinition[], formValues: Record<string, unknown>): Set<string>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,EAAE,CAKlE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,EAAE,eAAe,EAAE,GAC3B,OAAO,CA0BT;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAAE,EAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,GAAG,CAAC,MAAM,CAAC,CAQb"}
@@ -0,0 +1,40 @@
1
+ export function getAllFields(schema) {
2
+ if (schema.steps) {
3
+ return schema.steps.flatMap((step) => step.fields);
4
+ }
5
+ return schema.fields ?? [];
6
+ }
7
+ export function isFieldVisible(field, formValues, allFields) {
8
+ if (!field.visibility)
9
+ return true;
10
+ const { dependsOn, operator, value } = field.visibility;
11
+ // Cascading: if the parent field is itself hidden, this field is hidden too
12
+ const parentField = allFields.find((f) => f.id === dependsOn);
13
+ if (parentField && !isFieldVisible(parentField, formValues, allFields)) {
14
+ return false;
15
+ }
16
+ const current = formValues[dependsOn];
17
+ switch (operator) {
18
+ case "equals":
19
+ return current === value;
20
+ case "not_equals":
21
+ return current !== value;
22
+ case "in": {
23
+ const selected = Array.isArray(current) ? current : [current];
24
+ const targets = Array.isArray(value) ? value : [value];
25
+ return targets.some((v) => selected.includes(v));
26
+ }
27
+ default:
28
+ return true;
29
+ }
30
+ }
31
+ export function getVisibleFieldIds(allFields, formValues) {
32
+ const visible = new Set();
33
+ for (const field of allFields) {
34
+ if (isFieldVisible(field, formValues, allFields)) {
35
+ visible.add(field.id);
36
+ }
37
+ }
38
+ return visible;
39
+ }
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAsB,EACtB,UAAmC,EACnC,SAA4B;IAE5B,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAExD,4EAA4E;IAC5E,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC9D,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEtC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,OAAO,KAAK,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAA4B,EAC5B,UAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FieldDefinition, FormSchema } from "./types.js";
2
+ export declare function getAllFields(schema: FormSchema): FieldDefinition[];
3
+ export declare function isFieldVisible(field: FieldDefinition, formValues: Record<string, unknown>, allFields: FieldDefinition[]): boolean;
4
+ export declare function getVisibleFieldIds(allFields: FieldDefinition[], formValues: Record<string, unknown>): Set<string>;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,EAAE,CAKlE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,EAAE,eAAe,EAAE,GAC3B,OAAO,CA0BT;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAAE,EAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,GAAG,CAAC,MAAM,CAAC,CAQb"}
@@ -0,0 +1,40 @@
1
+ export function getAllFields(schema) {
2
+ if (schema.steps) {
3
+ return schema.steps.flatMap((step) => step.fields);
4
+ }
5
+ return schema.fields ?? [];
6
+ }
7
+ export function isFieldVisible(field, formValues, allFields) {
8
+ if (!field.visibility)
9
+ return true;
10
+ const { dependsOn, operator, value } = field.visibility;
11
+ // Cascading: if the parent field is itself hidden, this field is hidden too
12
+ const parentField = allFields.find((f) => f.id === dependsOn);
13
+ if (parentField && !isFieldVisible(parentField, formValues, allFields)) {
14
+ return false;
15
+ }
16
+ const current = formValues[dependsOn];
17
+ switch (operator) {
18
+ case "equals":
19
+ return current === value;
20
+ case "not_equals":
21
+ return current !== value;
22
+ case "in": {
23
+ const selected = Array.isArray(current) ? current : [current];
24
+ const targets = Array.isArray(value) ? value : [value];
25
+ return targets.some((v) => selected.includes(v));
26
+ }
27
+ default:
28
+ return true;
29
+ }
30
+ }
31
+ export function getVisibleFieldIds(allFields, formValues) {
32
+ const visible = new Set();
33
+ for (const field of allFields) {
34
+ if (isFieldVisible(field, formValues, allFields)) {
35
+ visible.add(field.id);
36
+ }
37
+ }
38
+ return visible;
39
+ }
40
+ //# sourceMappingURL=utils.js.map