@opencrvs/toolkit 1.8.0-rc.fd16d13 → 1.8.0-rc.fd31705
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/README.md +1 -1
- package/dist/commons/api/router.d.ts +6304 -12729
- package/dist/commons/conditionals/conditionals.d.ts +26 -3
- package/dist/commons/conditionals/validate.d.ts +12 -11
- package/dist/commons/events/ActionConfig.d.ts +1123 -2056
- package/dist/commons/events/ActionDocument.d.ts +8065 -452
- package/dist/commons/events/ActionInput.d.ts +3021 -594
- package/dist/commons/events/ActionType.d.ts +24 -11
- package/dist/commons/events/CompositeFieldValue.d.ts +52 -12
- package/dist/commons/events/Conditional.d.ts +21 -5
- package/dist/commons/events/Draft.d.ts +145 -61
- package/dist/commons/events/EventConfig.d.ts +551 -1206
- package/dist/commons/events/EventConfigInput.d.ts +6 -3
- package/dist/commons/events/EventDocument.d.ts +1565 -544
- package/dist/commons/events/EventIndex.d.ts +6 -3
- package/dist/commons/events/EventMetadata.d.ts +3 -0
- package/dist/commons/events/FieldConfig.d.ts +483 -76
- package/dist/commons/events/FieldType.d.ts +2 -1
- package/dist/commons/events/FieldTypeMapping.d.ts +57 -8
- package/dist/commons/events/FieldValue.d.ts +30 -10
- package/dist/commons/events/FormConfig.d.ts +633 -48
- package/dist/commons/events/PageConfig.d.ts +335 -0
- package/dist/commons/events/TemplateConfig.d.ts +2 -2
- package/dist/commons/events/defineConfig.d.ts +91 -216
- package/dist/commons/events/index.d.ts +2 -1
- package/dist/commons/events/test.utils.d.ts +87 -268
- package/dist/commons/events/utils.d.ts +90 -83
- package/dist/conditionals/index.js +166 -81
- package/dist/events/index.js +1188 -743
- package/package.json +1 -1
@@ -1,99 +1,57 @@
|
|
1
|
-
import {
|
2
|
-
import { ActionType } from './ActionType';
|
1
|
+
import { ActionType, DeclarationActionType } from './ActionType';
|
3
2
|
import { EventConfig } from './EventConfig';
|
4
|
-
import { EventConfigInput } from './EventConfigInput';
|
5
|
-
import { EventMetadataKeys } from './EventMetadata';
|
6
3
|
import { FieldConfig } from './FieldConfig';
|
7
4
|
import { WorkqueueConfig } from './WorkqueueConfig';
|
8
|
-
import { EventState } from './ActionDocument';
|
9
|
-
import {
|
5
|
+
import { ActionUpdate, EventState } from './ActionDocument';
|
6
|
+
import { PageConfig, VerificationPageConfig } from './PageConfig';
|
10
7
|
import { Draft } from './Draft';
|
11
8
|
import { EventDocument } from './EventDocument';
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
export declare
|
16
|
-
|
17
|
-
label: TranslationConfig;
|
18
|
-
}[];
|
19
|
-
/**
|
20
|
-
* @returns All the fields in the event configuration.
|
21
|
-
*/
|
22
|
-
export declare const findPageFields: (config: EventConfig) => FieldConfig[];
|
23
|
-
/**
|
24
|
-
*
|
25
|
-
* @param pageFields - All the fields in the event configuration
|
26
|
-
* @param refFields - The fields referencing values within the event configuration (e.g. summary fields) or within system provided metadata fields (e.g. createdAt, updatedBy)
|
27
|
-
* @returns referenced fields with populated labels
|
28
|
-
*/
|
29
|
-
export declare const resolveLabelsFromKnownFields: ({ pageFields, refFields }: {
|
30
|
-
pageFields: {
|
31
|
-
id: string;
|
32
|
-
label: TranslationConfig;
|
33
|
-
}[];
|
34
|
-
refFields: {
|
35
|
-
id: EventMetadataKeys | string;
|
36
|
-
label?: TranslationConfig;
|
37
|
-
}[];
|
38
|
-
}) => {
|
39
|
-
id: EventMetadataKeys | string;
|
40
|
-
label?: TranslationConfig;
|
41
|
-
}[];
|
42
|
-
export declare function getAllFields(configuration: EventConfig): import("./FieldConfig").Inferred[];
|
43
|
-
export declare function getAllPages(configuration: EventConfig): {
|
9
|
+
import { ActionConfig } from './ActionConfig';
|
10
|
+
import { FormConfig } from './FormConfig';
|
11
|
+
export declare function getDeclarationFields(configuration: EventConfig): FieldConfig[];
|
12
|
+
export declare function getDeclarationPages(configuration: EventConfig): {
|
13
|
+
type: "FORM";
|
44
14
|
id: string;
|
45
|
-
title: TranslationConfig;
|
15
|
+
title: import("./TranslationConfig").TranslationConfig;
|
46
16
|
fields: import("./FieldConfig").Inferred[];
|
17
|
+
conditional?: import(".").JSONSchema | undefined;
|
47
18
|
}[];
|
48
|
-
export declare function
|
49
|
-
|
50
|
-
active: boolean;
|
51
|
-
version: {
|
52
|
-
id: string;
|
53
|
-
label: TranslationConfig;
|
54
|
-
};
|
55
|
-
label: TranslationConfig;
|
19
|
+
export declare function getDeclaration(configuration: EventConfig): {
|
20
|
+
label: import("./TranslationConfig").TranslationConfig;
|
56
21
|
pages: {
|
22
|
+
type: "FORM";
|
57
23
|
id: string;
|
58
|
-
title: TranslationConfig;
|
24
|
+
title: import("./TranslationConfig").TranslationConfig;
|
59
25
|
fields: import("./FieldConfig").Inferred[];
|
26
|
+
conditional?: import(".").JSONSchema | undefined;
|
60
27
|
}[];
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
};
|
65
|
-
} | undefined;
|
66
|
-
export declare const findActiveActionFormPages: (configuration: EventConfig, action: ActionType) => {
|
67
|
-
id: string;
|
68
|
-
title: TranslationConfig;
|
69
|
-
fields: import("./FieldConfig").Inferred[];
|
70
|
-
}[] | undefined;
|
71
|
-
export declare const getFormFields: (formConfig: FormConfig) => import("./FieldConfig").Inferred[];
|
28
|
+
};
|
29
|
+
export declare const getActionAnnotationFields: (actionConfig: ActionConfig) => import("./FieldConfig").Inferred[];
|
30
|
+
export declare const getAllAnnotationFields: (config: EventConfig) => FieldConfig[];
|
72
31
|
/**
|
73
|
-
*
|
32
|
+
* @returns All the fields in the event configuration.
|
74
33
|
*/
|
75
|
-
export declare const
|
34
|
+
export declare const findAllFields: (config: EventConfig) => FieldConfig[];
|
76
35
|
/**
|
77
|
-
*
|
36
|
+
* @TODO: Request correction should have same format as print certificate
|
78
37
|
*/
|
79
|
-
export declare const
|
80
|
-
export declare
|
81
|
-
|
82
|
-
title: TranslationConfig;
|
38
|
+
export declare const findRecordActionPages: (config: EventConfig, actionType: ActionType) => PageConfig[];
|
39
|
+
export declare function getActionReview(configuration: EventConfig, actionType: ActionType): {
|
40
|
+
title: import("./TranslationConfig").TranslationConfig;
|
83
41
|
fields: import("./FieldConfig").Inferred[];
|
84
|
-
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
export declare
|
89
|
-
export declare function
|
90
|
-
export declare function stripHiddenFields(fields: FieldConfig[], data: EventState): import("lodash").Dictionary<string | number | boolean | {
|
42
|
+
};
|
43
|
+
export declare function getActionReviewFields(configuration: EventConfig, actionType: DeclarationActionType): import("./FieldConfig").Inferred[];
|
44
|
+
export declare function validateWorkqueueConfig(workqueueConfigs: WorkqueueConfig[]): void;
|
45
|
+
export declare function isPageVisible(page: PageConfig, formValues: ActionUpdate): boolean;
|
46
|
+
export declare const getVisiblePagesFormFields: (formConfig: FormConfig, formData: ActionUpdate) => import("./FieldConfig").Inferred[];
|
47
|
+
export declare function stripHiddenFields(fields: FieldConfig[], declaration: EventState): import("lodash").Dictionary<string | number | boolean | {
|
91
48
|
type: string;
|
92
49
|
filename: string;
|
93
50
|
originalFilename: string;
|
94
51
|
} | {
|
95
52
|
country: string;
|
96
53
|
district: string;
|
54
|
+
addressType: "DOMESTIC";
|
97
55
|
province: string;
|
98
56
|
urbanOrRural: "URBAN";
|
99
57
|
number?: string | undefined;
|
@@ -104,12 +62,14 @@ export declare function stripHiddenFields(fields: FieldConfig[], data: EventStat
|
|
104
62
|
} | {
|
105
63
|
country: string;
|
106
64
|
district: string;
|
65
|
+
addressType: "DOMESTIC";
|
107
66
|
province: string;
|
108
67
|
urbanOrRural: "RURAL";
|
109
68
|
village?: string | undefined;
|
110
69
|
} | {
|
111
70
|
country: string;
|
112
71
|
state: string;
|
72
|
+
addressType: "INTERNATIONAL";
|
113
73
|
district2: string;
|
114
74
|
cityOrTown?: string | undefined;
|
115
75
|
addressLine1?: string | undefined;
|
@@ -121,21 +81,25 @@ export declare function stripHiddenFields(fields: FieldConfig[], data: EventStat
|
|
121
81
|
option: string;
|
122
82
|
filename: string;
|
123
83
|
originalFilename: string;
|
124
|
-
}[]>;
|
84
|
+
}[] | undefined>;
|
125
85
|
export declare function findActiveDrafts(event: EventDocument, drafts: Draft[]): {
|
126
86
|
id: string;
|
127
87
|
createdAt: string;
|
128
88
|
eventId: string;
|
129
89
|
transactionId: string;
|
130
90
|
action: {
|
131
|
-
type:
|
132
|
-
|
91
|
+
type: "DECLARE" | "REGISTER" | "VALIDATE" | "DELETE" | "CREATE" | "NOTIFY" | "DETECT_DUPLICATE" | "REJECT" | "MARKED_AS_DUPLICATE" | "ARCHIVE" | "PRINT_CERTIFICATE" | "REQUEST_CORRECTION" | "REJECT_CORRECTION" | "APPROVE_CORRECTION" | "READ" | "ASSIGN" | "UNASSIGN";
|
92
|
+
status: "Rejected" | "Requested" | "Accepted";
|
93
|
+
createdAt: string;
|
94
|
+
createdBy: string;
|
95
|
+
declaration: Record<string, string | number | boolean | {
|
133
96
|
type: string;
|
134
97
|
filename: string;
|
135
98
|
originalFilename: string;
|
136
99
|
} | {
|
137
100
|
country: string;
|
138
101
|
district: string;
|
102
|
+
addressType: "DOMESTIC";
|
139
103
|
province: string;
|
140
104
|
urbanOrRural: "URBAN";
|
141
105
|
number?: string | null | undefined;
|
@@ -146,12 +110,14 @@ export declare function findActiveDrafts(event: EventDocument, drafts: Draft[]):
|
|
146
110
|
} | {
|
147
111
|
country: string;
|
148
112
|
district: string;
|
113
|
+
addressType: "DOMESTIC";
|
149
114
|
province: string;
|
150
115
|
urbanOrRural: "RURAL";
|
151
116
|
village?: string | null | undefined;
|
152
117
|
} | {
|
153
118
|
country: string;
|
154
119
|
state: string;
|
120
|
+
addressType: "INTERNATIONAL";
|
155
121
|
district2: string;
|
156
122
|
cityOrTown?: string | null | undefined;
|
157
123
|
addressLine1?: string | null | undefined;
|
@@ -163,17 +129,16 @@ export declare function findActiveDrafts(event: EventDocument, drafts: Draft[]):
|
|
163
129
|
option: string;
|
164
130
|
filename: string;
|
165
131
|
originalFilename: string;
|
166
|
-
}[]>;
|
167
|
-
createdAt: string;
|
168
|
-
createdBy: string;
|
132
|
+
}[] | undefined>;
|
169
133
|
createdAtLocation: string;
|
170
|
-
|
134
|
+
annotation?: Record<string, string | number | boolean | {
|
171
135
|
type: string;
|
172
136
|
filename: string;
|
173
137
|
originalFilename: string;
|
174
138
|
} | {
|
175
139
|
country: string;
|
176
140
|
district: string;
|
141
|
+
addressType: "DOMESTIC";
|
177
142
|
province: string;
|
178
143
|
urbanOrRural: "URBAN";
|
179
144
|
number?: string | null | undefined;
|
@@ -184,12 +149,14 @@ export declare function findActiveDrafts(event: EventDocument, drafts: Draft[]):
|
|
184
149
|
} | {
|
185
150
|
country: string;
|
186
151
|
district: string;
|
152
|
+
addressType: "DOMESTIC";
|
187
153
|
province: string;
|
188
154
|
urbanOrRural: "RURAL";
|
189
155
|
village?: string | null | undefined;
|
190
156
|
} | {
|
191
157
|
country: string;
|
192
158
|
state: string;
|
159
|
+
addressType: "INTERNATIONAL";
|
193
160
|
district2: string;
|
194
161
|
cityOrTown?: string | null | undefined;
|
195
162
|
addressLine1?: string | null | undefined;
|
@@ -201,7 +168,8 @@ export declare function findActiveDrafts(event: EventDocument, drafts: Draft[]):
|
|
201
168
|
option: string;
|
202
169
|
filename: string;
|
203
170
|
originalFilename: string;
|
204
|
-
}[]> | undefined;
|
171
|
+
}[] | undefined> | undefined;
|
172
|
+
originalActionId?: string | undefined;
|
205
173
|
};
|
206
174
|
}[];
|
207
175
|
export declare function createEmptyDraft(eventId: string, draftId: string, actionType: ActionType): {
|
@@ -211,11 +179,50 @@ export declare function createEmptyDraft(eventId: string, draftId: string, actio
|
|
211
179
|
transactionId: import("../uuid").UUID;
|
212
180
|
action: {
|
213
181
|
type: ActionType;
|
214
|
-
|
215
|
-
|
182
|
+
declaration: {};
|
183
|
+
annotation: {};
|
216
184
|
createdAt: string;
|
217
185
|
createdBy: string;
|
218
186
|
createdAtLocation: string;
|
219
187
|
};
|
220
188
|
};
|
189
|
+
export declare function isVerificationPage(page: PageConfig): page is VerificationPageConfig;
|
190
|
+
export declare function deepMerge(currentDocument: ActionUpdate, actionDocument: ActionUpdate): Record<string, string | number | boolean | {
|
191
|
+
type: string;
|
192
|
+
filename: string;
|
193
|
+
originalFilename: string;
|
194
|
+
} | {
|
195
|
+
country: string;
|
196
|
+
district: string;
|
197
|
+
addressType: "DOMESTIC";
|
198
|
+
province: string;
|
199
|
+
urbanOrRural: "URBAN";
|
200
|
+
number?: string | null | undefined;
|
201
|
+
town?: string | null | undefined;
|
202
|
+
residentialArea?: string | null | undefined;
|
203
|
+
street?: string | null | undefined;
|
204
|
+
zipCode?: string | null | undefined;
|
205
|
+
} | {
|
206
|
+
country: string;
|
207
|
+
district: string;
|
208
|
+
addressType: "DOMESTIC";
|
209
|
+
province: string;
|
210
|
+
urbanOrRural: "RURAL";
|
211
|
+
village?: string | null | undefined;
|
212
|
+
} | {
|
213
|
+
country: string;
|
214
|
+
state: string;
|
215
|
+
addressType: "INTERNATIONAL";
|
216
|
+
district2: string;
|
217
|
+
cityOrTown?: string | null | undefined;
|
218
|
+
addressLine1?: string | null | undefined;
|
219
|
+
addressLine2?: string | null | undefined;
|
220
|
+
addressLine3?: string | null | undefined;
|
221
|
+
postcodeOrZip?: string | null | undefined;
|
222
|
+
} | {
|
223
|
+
type: string;
|
224
|
+
option: string;
|
225
|
+
filename: string;
|
226
|
+
originalFilename: string;
|
227
|
+
}[] | undefined>;
|
221
228
|
//# sourceMappingURL=utils.d.ts.map
|
@@ -23,8 +23,10 @@ __export(conditionals_exports, {
|
|
23
23
|
alwaysTrue: () => alwaysTrue,
|
24
24
|
and: () => and,
|
25
25
|
defineConditional: () => defineConditional,
|
26
|
+
defineFormConditional: () => defineFormConditional,
|
26
27
|
event: () => event,
|
27
28
|
field: () => field,
|
29
|
+
never: () => never,
|
28
30
|
not: () => not,
|
29
31
|
or: () => or,
|
30
32
|
user: () => user
|
@@ -35,6 +37,16 @@ module.exports = __toCommonJS(conditionals_exports);
|
|
35
37
|
function defineConditional(schema) {
|
36
38
|
return schema;
|
37
39
|
}
|
40
|
+
function defineFormConditional(schema) {
|
41
|
+
const schemaWithForm = {
|
42
|
+
type: "object",
|
43
|
+
properties: {
|
44
|
+
$form: schema
|
45
|
+
},
|
46
|
+
required: ["$form"]
|
47
|
+
};
|
48
|
+
return defineConditional(schemaWithForm);
|
49
|
+
}
|
38
50
|
function alwaysTrue() {
|
39
51
|
return {};
|
40
52
|
}
|
@@ -59,6 +71,9 @@ function not(condition) {
|
|
59
71
|
required: []
|
60
72
|
});
|
61
73
|
}
|
74
|
+
function never() {
|
75
|
+
return not(alwaysTrue());
|
76
|
+
}
|
62
77
|
var user = {
|
63
78
|
hasScope: (scope) => defineConditional({
|
64
79
|
type: "object",
|
@@ -106,69 +121,120 @@ var event = {
|
|
106
121
|
required: ["$event"]
|
107
122
|
})
|
108
123
|
};
|
124
|
+
function getDateFromNow(days) {
|
125
|
+
return new Date(Date.now() - days * 24 * 60 * 60 * 1e3).toISOString().split("T")[0];
|
126
|
+
}
|
127
|
+
function getDateRangeToFieldReference(fieldId, comparedFieldId, clause) {
|
128
|
+
return {
|
129
|
+
type: "object",
|
130
|
+
properties: {
|
131
|
+
[fieldId]: {
|
132
|
+
type: "string",
|
133
|
+
format: "date",
|
134
|
+
[clause]: { $data: `1/${comparedFieldId}` }
|
135
|
+
},
|
136
|
+
[comparedFieldId]: { type: "string", format: "date" }
|
137
|
+
},
|
138
|
+
required: [fieldId]
|
139
|
+
};
|
140
|
+
}
|
141
|
+
function isFieldReference(value) {
|
142
|
+
return typeof value === "object" && value !== null && "_fieldId" in value;
|
143
|
+
}
|
109
144
|
function field(fieldId) {
|
110
|
-
const getDateFromNow = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1e3).toISOString().split("T")[0];
|
111
145
|
const getDateRange = (date, clause) => ({
|
112
146
|
type: "object",
|
113
147
|
properties: {
|
114
|
-
|
115
|
-
type: "
|
116
|
-
|
117
|
-
|
118
|
-
type: "string",
|
119
|
-
format: "date",
|
120
|
-
[clause]: date
|
121
|
-
}
|
122
|
-
},
|
123
|
-
required: [fieldId]
|
148
|
+
[fieldId]: {
|
149
|
+
type: "string",
|
150
|
+
format: "date",
|
151
|
+
[clause]: date
|
124
152
|
}
|
125
153
|
},
|
126
|
-
required: [
|
154
|
+
required: [fieldId]
|
127
155
|
});
|
128
156
|
return {
|
157
|
+
/**
|
158
|
+
* @private Internal property used for field reference tracking.
|
159
|
+
*/
|
160
|
+
_fieldId: fieldId,
|
129
161
|
isAfter: () => ({
|
130
162
|
days: (days) => ({
|
131
|
-
inPast: () =>
|
163
|
+
inPast: () => defineFormConditional(
|
132
164
|
getDateRange(getDateFromNow(days), "formatMinimum")
|
133
165
|
),
|
134
|
-
inFuture: () =>
|
166
|
+
inFuture: () => defineFormConditional(
|
135
167
|
getDateRange(getDateFromNow(-days), "formatMinimum")
|
136
168
|
)
|
137
169
|
}),
|
138
|
-
date: (date) =>
|
139
|
-
|
170
|
+
date: (date) => {
|
171
|
+
if (isFieldReference(date)) {
|
172
|
+
const comparedFieldId = date._fieldId;
|
173
|
+
return defineFormConditional(
|
174
|
+
getDateRangeToFieldReference(
|
175
|
+
fieldId,
|
176
|
+
comparedFieldId,
|
177
|
+
"formatMinimum"
|
178
|
+
)
|
179
|
+
);
|
180
|
+
}
|
181
|
+
return defineFormConditional(getDateRange(date, "formatMinimum"));
|
182
|
+
},
|
183
|
+
now: () => defineFormConditional(getDateRange(getDateFromNow(0), "formatMinimum"))
|
140
184
|
}),
|
141
185
|
isBefore: () => ({
|
142
186
|
days: (days) => ({
|
143
|
-
inPast: () =>
|
187
|
+
inPast: () => defineFormConditional(
|
144
188
|
getDateRange(getDateFromNow(days), "formatMaximum")
|
145
189
|
),
|
146
|
-
inFuture: () =>
|
190
|
+
inFuture: () => defineFormConditional(
|
147
191
|
getDateRange(getDateFromNow(-days), "formatMaximum")
|
148
192
|
)
|
149
193
|
}),
|
150
|
-
date: (date) =>
|
151
|
-
|
194
|
+
date: (date) => {
|
195
|
+
if (isFieldReference(date)) {
|
196
|
+
const comparedFieldId = date._fieldId;
|
197
|
+
return defineFormConditional(
|
198
|
+
getDateRangeToFieldReference(
|
199
|
+
fieldId,
|
200
|
+
comparedFieldId,
|
201
|
+
"formatMaximum"
|
202
|
+
)
|
203
|
+
);
|
204
|
+
}
|
205
|
+
return defineFormConditional(getDateRange(date, "formatMaximum"));
|
206
|
+
},
|
207
|
+
now: () => defineFormConditional(getDateRange(getDateFromNow(0), "formatMaximum"))
|
152
208
|
}),
|
153
|
-
isEqualTo: (value) =>
|
154
|
-
|
155
|
-
|
156
|
-
|
209
|
+
isEqualTo: (value) => {
|
210
|
+
if (isFieldReference(value)) {
|
211
|
+
const comparedFieldId = value._fieldId;
|
212
|
+
return defineFormConditional({
|
157
213
|
type: "object",
|
158
214
|
properties: {
|
159
215
|
[fieldId]: {
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
const: value
|
165
|
-
}
|
216
|
+
type: ["string", "boolean"],
|
217
|
+
const: { $data: `1/${comparedFieldId}` }
|
218
|
+
},
|
219
|
+
[comparedFieldId]: { type: ["string", "boolean"] }
|
166
220
|
},
|
167
|
-
required: [fieldId]
|
168
|
-
}
|
169
|
-
}
|
170
|
-
|
171
|
-
|
221
|
+
required: [fieldId, comparedFieldId]
|
222
|
+
});
|
223
|
+
}
|
224
|
+
return defineFormConditional({
|
225
|
+
type: "object",
|
226
|
+
properties: {
|
227
|
+
[fieldId]: {
|
228
|
+
oneOf: [
|
229
|
+
{ type: "string", const: value },
|
230
|
+
{ type: "boolean", const: value }
|
231
|
+
],
|
232
|
+
const: value
|
233
|
+
}
|
234
|
+
},
|
235
|
+
required: [fieldId]
|
236
|
+
});
|
237
|
+
},
|
172
238
|
/**
|
173
239
|
* Use case: Some fields are rendered when selection is not made, or boolean false is explicitly selected.
|
174
240
|
* @example field('recommender.none').isFalsy() vs not(field('recommender.none').isEqualTo(true))
|
@@ -177,68 +243,87 @@ function field(fieldId) {
|
|
177
243
|
* NOTE: For now, this only works with string, boolean, and null types. 0 is still allowed.
|
178
244
|
*
|
179
245
|
*/
|
180
|
-
isFalsy: () =>
|
246
|
+
isFalsy: () => defineFormConditional({
|
181
247
|
type: "object",
|
182
248
|
properties: {
|
183
|
-
|
184
|
-
type: "object",
|
185
|
-
properties: {
|
186
|
-
[fieldId]: {
|
187
|
-
anyOf: [
|
188
|
-
{ const: "undefined" },
|
189
|
-
{ const: false },
|
190
|
-
{ const: null },
|
191
|
-
{ const: "" }
|
192
|
-
]
|
193
|
-
}
|
194
|
-
},
|
249
|
+
[fieldId]: {
|
195
250
|
anyOf: [
|
196
|
-
{
|
197
|
-
|
198
|
-
},
|
199
|
-
{
|
200
|
-
not: {
|
201
|
-
required: [fieldId]
|
202
|
-
}
|
203
|
-
}
|
251
|
+
{ const: "undefined" },
|
252
|
+
{ const: false },
|
253
|
+
{ const: null },
|
254
|
+
{ const: "" }
|
204
255
|
]
|
205
256
|
}
|
206
257
|
},
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
$form: {
|
213
|
-
type: "object",
|
214
|
-
properties: {
|
215
|
-
[fieldId]: {
|
216
|
-
type: "string",
|
217
|
-
enum: ["undefined"]
|
218
|
-
}
|
219
|
-
},
|
258
|
+
anyOf: [
|
259
|
+
{
|
260
|
+
required: [fieldId]
|
261
|
+
},
|
262
|
+
{
|
220
263
|
not: {
|
221
264
|
required: [fieldId]
|
222
265
|
}
|
223
266
|
}
|
267
|
+
]
|
268
|
+
}),
|
269
|
+
isUndefined: () => defineFormConditional({
|
270
|
+
type: "object",
|
271
|
+
properties: {
|
272
|
+
[fieldId]: {
|
273
|
+
type: "string",
|
274
|
+
enum: ["undefined"]
|
275
|
+
}
|
224
276
|
},
|
225
|
-
|
277
|
+
not: {
|
278
|
+
required: [fieldId]
|
279
|
+
}
|
226
280
|
}),
|
227
|
-
inArray: (values) =>
|
281
|
+
inArray: (values) => defineFormConditional({
|
228
282
|
type: "object",
|
229
283
|
properties: {
|
230
|
-
|
231
|
-
type: "
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
284
|
+
[fieldId]: {
|
285
|
+
type: "string",
|
286
|
+
enum: values
|
287
|
+
}
|
288
|
+
},
|
289
|
+
required: [fieldId]
|
290
|
+
}),
|
291
|
+
isValidEnglishName: () => defineFormConditional({
|
292
|
+
type: "object",
|
293
|
+
properties: {
|
294
|
+
[fieldId]: {
|
295
|
+
type: "string",
|
296
|
+
pattern: "^[\\p{Script=Latin}0-9'._-]*(\\([\\p{Script=Latin}0-9'._-]+\\))?[\\p{Script=Latin}0-9'._-]*( [\\p{Script=Latin}0-9'._-]*(\\([\\p{Script=Latin}0-9'._-]+\\))?[\\p{Script=Latin}0-9'._-]*)*$",
|
297
|
+
description: "Name must contain only letters, numbers, and allowed special characters ('._-). No double spaces."
|
298
|
+
}
|
299
|
+
},
|
300
|
+
required: [fieldId]
|
301
|
+
}),
|
302
|
+
/**
|
303
|
+
* Checks if the field value matches a given regular expression pattern.
|
304
|
+
* @param pattern - The regular expression pattern to match the field value against.
|
305
|
+
* @returns A JSONSchema conditional that validates the field value against the pattern.
|
306
|
+
*/
|
307
|
+
matches: (pattern) => defineFormConditional({
|
308
|
+
type: "object",
|
309
|
+
properties: {
|
310
|
+
[fieldId]: {
|
311
|
+
type: "string",
|
312
|
+
pattern
|
313
|
+
}
|
314
|
+
},
|
315
|
+
required: [fieldId]
|
316
|
+
}),
|
317
|
+
isBetween: (min, max) => defineFormConditional({
|
318
|
+
type: "object",
|
319
|
+
properties: {
|
320
|
+
[fieldId]: {
|
321
|
+
type: "number",
|
322
|
+
minimum: min,
|
323
|
+
maximum: max
|
239
324
|
}
|
240
325
|
},
|
241
|
-
required: [
|
326
|
+
required: [fieldId]
|
242
327
|
})
|
243
328
|
};
|
244
329
|
}
|