@opencrvs/toolkit 1.8.1-rc.e32d7b8 → 1.8.1-rc.e59d03c
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/commons/api/router.d.ts +433 -796
- package/dist/commons/conditionals/validate.d.ts +11 -2
- package/dist/commons/events/ActionConfig.d.ts +2004 -366
- package/dist/commons/events/ActionDocument.d.ts +1302 -1389
- package/dist/commons/events/ActionInput.d.ts +658 -1136
- package/dist/commons/events/AdvancedSearchConfig.d.ts +83 -65
- package/dist/commons/events/CompositeFieldValue.d.ts +6 -6
- package/dist/commons/events/CountryConfigQueryInput.d.ts +88 -88
- package/dist/commons/events/Draft.d.ts +48 -92
- package/dist/commons/events/EventConfig.d.ts +695 -168
- package/dist/commons/events/EventDocument.d.ts +475 -846
- package/dist/commons/events/EventIndex.d.ts +184 -62
- package/dist/commons/events/EventMetadata.d.ts +9 -9
- package/dist/commons/events/FieldConfig.d.ts +254 -43
- package/dist/commons/events/FieldTypeMapping.d.ts +16 -16
- package/dist/commons/events/FieldValue.d.ts +12 -12
- package/dist/commons/events/FormConfig.d.ts +1032 -246
- package/dist/commons/events/PageConfig.d.ts +264 -46
- package/dist/commons/events/WorkqueueConfig.d.ts +288 -164
- package/dist/commons/events/defineConfig.d.ts +129 -30
- package/dist/commons/events/event.d.ts +68 -6
- package/dist/commons/events/field.d.ts +14 -0
- package/dist/commons/events/test.utils.d.ts +17 -13
- package/dist/commons/events/utils.d.ts +236 -64
- package/dist/conditionals/index.js +3 -2
- package/dist/events/index.js +265 -102
- package/package.json +1 -1
- package/tsconfig.json +1 -1
- package/dist/commons/conditionals/conditionals.test.d.ts +0 -2
- package/dist/commons/conditionals/validate-address.test.d.ts +0 -2
- package/dist/commons/conditionals/validate.test.d.ts +0 -2
- package/dist/commons/events/utils.test.d.ts +0 -2
package/dist/events/index.js
CHANGED
@@ -39,8 +39,8 @@ __export(events_exports, {
|
|
39
39
|
ActionConfig: () => ActionConfig,
|
40
40
|
ActionConfigBase: () => ActionConfigBase,
|
41
41
|
ActionCreationMetadata: () => ActionCreationMetadata,
|
42
|
-
ActionDetails: () => ActionDetails,
|
43
42
|
ActionDocument: () => ActionDocument,
|
43
|
+
ActionFlag: () => ActionFlag,
|
44
44
|
ActionFormConfig: () => ActionFormConfig,
|
45
45
|
ActionInput: () => ActionInput,
|
46
46
|
ActionStatus: () => ActionStatus,
|
@@ -96,6 +96,7 @@ __export(events_exports, {
|
|
96
96
|
EventDocument: () => EventDocument,
|
97
97
|
EventFieldConfigSchema: () => EventFieldConfigSchema,
|
98
98
|
EventFieldId: () => EventFieldId,
|
99
|
+
EventFieldIdInput: () => EventFieldIdInput,
|
99
100
|
EventIndex: () => EventIndex,
|
100
101
|
EventInput: () => EventInput,
|
101
102
|
EventMetadata: () => EventMetadata,
|
@@ -130,8 +131,10 @@ __export(events_exports, {
|
|
130
131
|
InherentFlags: () => InherentFlags,
|
131
132
|
LanguageConfig: () => LanguageConfig,
|
132
133
|
LegalStatuses: () => LegalStatuses,
|
134
|
+
METADATA_FIELD_PREFIX: () => METADATA_FIELD_PREFIX,
|
133
135
|
MarkedAsDuplicateActionInput: () => MarkedAsDuplicateActionInput,
|
134
136
|
MimeType: () => MimeType,
|
137
|
+
NameConfig: () => NameConfig,
|
135
138
|
NameFieldUpdateValue: () => NameFieldUpdateValue,
|
136
139
|
NameFieldValue: () => NameFieldValue,
|
137
140
|
NonEmptyTextValue: () => NonEmptyTextValue,
|
@@ -140,6 +143,7 @@ __export(events_exports, {
|
|
140
143
|
PageConfig: () => PageConfig,
|
141
144
|
PageTypes: () => PageTypes,
|
142
145
|
PrintCertificateActionInput: () => PrintCertificateActionInput,
|
146
|
+
PrintContent: () => PrintContent,
|
143
147
|
QueryExpression: () => QueryExpression,
|
144
148
|
QueryInput: () => QueryInput,
|
145
149
|
QueryType: () => QueryType,
|
@@ -168,6 +172,7 @@ __export(events_exports, {
|
|
168
172
|
TENNIS_CLUB_MEMBERSHIP: () => TENNIS_CLUB_MEMBERSHIP,
|
169
173
|
TEST_SYSTEM_IANA_TIMEZONE: () => TEST_SYSTEM_IANA_TIMEZONE,
|
170
174
|
TestUserRole: () => TestUserRole,
|
175
|
+
TextField: () => TextField,
|
171
176
|
TextValue: () => TextValue,
|
172
177
|
TimeValue: () => TimeValue,
|
173
178
|
TranslationConfig: () => TranslationConfig,
|
@@ -179,7 +184,6 @@ __export(events_exports, {
|
|
179
184
|
ValidationConfig: () => ValidationConfig,
|
180
185
|
VerificationActionConfig: () => VerificationActionConfig,
|
181
186
|
VerificationPageConfig: () => VerificationPageConfig,
|
182
|
-
VisibleStatus: () => VisibleStatus,
|
183
187
|
WRITE_ACTION_SCOPES: () => WRITE_ACTION_SCOPES,
|
184
188
|
Within: () => Within,
|
185
189
|
WorkqueueActionsWithDefault: () => WorkqueueActionsWithDefault,
|
@@ -198,6 +202,7 @@ __export(events_exports, {
|
|
198
202
|
annotationActions: () => annotationActions,
|
199
203
|
applyDeclarationToEventIndex: () => applyDeclarationToEventIndex,
|
200
204
|
applyDraftsToEventIndex: () => applyDraftsToEventIndex,
|
205
|
+
areCertificateConditionsMet: () => areCertificateConditionsMet,
|
201
206
|
areConditionsMet: () => areConditionsMet,
|
202
207
|
compositeFieldTypes: () => compositeFieldTypes,
|
203
208
|
createEmptyDraft: () => createEmptyDraft,
|
@@ -321,6 +326,7 @@ __export(events_exports, {
|
|
321
326
|
or: () => or,
|
322
327
|
resolveDateOfEvent: () => resolveDateOfEvent,
|
323
328
|
runFieldValidations: () => runFieldValidations,
|
329
|
+
runStructuralValidations: () => runStructuralValidations,
|
324
330
|
timePeriodToDateRange: () => timePeriodToDateRange,
|
325
331
|
user: () => user,
|
326
332
|
validate: () => validate,
|
@@ -555,7 +561,7 @@ var import_zod6 = require("zod");
|
|
555
561
|
var import_zod4 = require("zod");
|
556
562
|
var import_zod_openapi3 = require("zod-openapi");
|
557
563
|
(0, import_zod_openapi3.extendZodWithOpenApi)(import_zod4.z);
|
558
|
-
var
|
564
|
+
var FullDocumentUrl = import_zod4.z.string().brand("FullDocumentUrl").describe(
|
559
565
|
"A full url with protocol, host, bucket name, starting from the root of the S3 server, https://minio/bucket-name/document-id.jpg"
|
560
566
|
);
|
561
567
|
var FullDocumentPath = import_zod4.z.string().transform((val) => val.startsWith("/") ? val : `/${val}`).openapi({ effectType: "input", type: "string" }).describe(
|
@@ -612,8 +618,8 @@ var NameFieldValue = import_zod5.z.object({
|
|
612
618
|
middlename: import_zod5.z.string().optional()
|
613
619
|
});
|
614
620
|
var NameFieldUpdateValue = import_zod5.z.object({
|
615
|
-
firstname: import_zod5.z.string()
|
616
|
-
surname: import_zod5.z.string()
|
621
|
+
firstname: import_zod5.z.string(),
|
622
|
+
surname: import_zod5.z.string(),
|
617
623
|
middlename: import_zod5.z.string().nullish()
|
618
624
|
}).or(import_zod5.z.null()).or(import_zod5.z.undefined());
|
619
625
|
var RuralAddressUpdateValue = AdminStructure.extend({
|
@@ -910,18 +916,32 @@ var SelectDateRangeField = BaseField.extend({
|
|
910
916
|
defaultValue: SelectDateRangeValue.optional(),
|
911
917
|
options: import_zod7.z.array(SelectDateRangeOption).describe("A list of options")
|
912
918
|
}).describe("Select input with date range options");
|
919
|
+
var NameConfig = import_zod7.z.object({
|
920
|
+
firstname: import_zod7.z.object({ required: import_zod7.z.boolean() }).optional(),
|
921
|
+
middlename: import_zod7.z.object({ required: import_zod7.z.boolean() }).optional(),
|
922
|
+
surname: import_zod7.z.object({ required: import_zod7.z.boolean() }).optional()
|
923
|
+
});
|
913
924
|
var NameField = BaseField.extend({
|
914
925
|
type: import_zod7.z.literal(FieldType.NAME),
|
915
926
|
defaultValue: import_zod7.z.object({
|
916
|
-
firstname: NonEmptyTextValue,
|
917
|
-
|
927
|
+
firstname: NonEmptyTextValue.optional(),
|
928
|
+
middlename: NonEmptyTextValue.optional(),
|
929
|
+
surname: NonEmptyTextValue.optional()
|
918
930
|
}).optional(),
|
919
931
|
configuration: import_zod7.z.object({
|
932
|
+
name: NameConfig.default({
|
933
|
+
firstname: { required: true },
|
934
|
+
surname: { required: true }
|
935
|
+
}).optional(),
|
920
936
|
maxLength: import_zod7.z.number().optional().describe("Maximum length of the text"),
|
921
937
|
prefix: TranslationConfig.optional(),
|
922
938
|
postfix: TranslationConfig.optional(),
|
923
|
-
includeMiddlename: import_zod7.z.boolean().default(false).optional().describe("To make middle name visible in Name form field"),
|
924
939
|
searchMode: import_zod7.z.boolean().optional()
|
940
|
+
}).default({
|
941
|
+
name: {
|
942
|
+
firstname: { required: true },
|
943
|
+
surname: { required: true }
|
944
|
+
}
|
925
945
|
}).optional()
|
926
946
|
}).describe("Name input field");
|
927
947
|
var PhoneField = BaseField.extend({
|
@@ -1223,7 +1243,8 @@ var CertificateConfig = import_zod11.z.object({
|
|
1223
1243
|
delayed: import_zod11.z.number()
|
1224
1244
|
}),
|
1225
1245
|
svgUrl: import_zod11.z.string(),
|
1226
|
-
fonts: import_zod11.z.record(FontFamily).optional()
|
1246
|
+
fonts: import_zod11.z.record(FontFamily).optional(),
|
1247
|
+
conditionals: import_zod11.z.array(ShowConditional).optional()
|
1227
1248
|
});
|
1228
1249
|
var CertificateTemplateConfig = CertificateConfig.extend({
|
1229
1250
|
hash: import_zod11.z.string().optional(),
|
@@ -1341,7 +1362,7 @@ var SummaryConfig = import_zod14.z.object({
|
|
1341
1362
|
|
1342
1363
|
// ../commons/src/events/AdvancedSearchConfig.ts
|
1343
1364
|
var import_zod15 = require("zod");
|
1344
|
-
var MatchType = import_zod15.z.enum(["fuzzy", "exact", "range"]);
|
1365
|
+
var MatchType = import_zod15.z.enum(["fuzzy", "exact", "range", "within"]);
|
1345
1366
|
var BaseField3 = import_zod15.z.object({
|
1346
1367
|
config: import_zod15.z.object({
|
1347
1368
|
type: MatchType.describe("Determines the type of field")
|
@@ -1395,22 +1416,30 @@ var FieldConfigSchema = BaseField3.extend({
|
|
1395
1416
|
fieldType: import_zod15.z.literal("field"),
|
1396
1417
|
alternateFieldIds: import_zod15.z.array(import_zod15.z.string()).optional().describe(
|
1397
1418
|
`Sometimes there might be need to search a value against multiple field of same FormField type. For example
|
1398
|
-
search Country, Province, District against child.address.private and child.address.other. In such case, we
|
1419
|
+
search Country, Province, District against child.address.private and child.address.other. In such case, we
|
1399
1420
|
add a one field as fieldId, and accomodate others in alternateFieldIds`
|
1400
1421
|
),
|
1401
|
-
excludeInSearchQuery: import_zod15.z.boolean().default(false).optional().describe(`Sometimes there will be search fields which are used to
|
1402
|
-
conditionally display another search field, but its not needed in search query. For example, child.placeOfBirth
|
1422
|
+
excludeInSearchQuery: import_zod15.z.boolean().default(false).optional().describe(`Sometimes there will be search fields which are used to
|
1423
|
+
conditionally display another search field, but its not needed in search query. For example, child.placeOfBirth
|
1403
1424
|
is select field, which has 3 options, FACILITY, PRIVATE_HOME, OTHER. Upon selecting any of the option, pops up another field
|
1404
1425
|
related to the selected option, whose value is required in the search query. But child.placeOfBirth itself is not needed in the query.
|
1405
1426
|
In such case, populate this field (excludeInSearchQuery) with boolean true`)
|
1406
1427
|
});
|
1407
|
-
var
|
1428
|
+
var EventFieldIdInput = import_zod15.z.enum([
|
1408
1429
|
"trackingId",
|
1409
1430
|
"status",
|
1410
1431
|
"legalStatuses.REGISTERED.acceptedAt",
|
1411
1432
|
"legalStatuses.REGISTERED.createdAtLocation",
|
1412
1433
|
"updatedAt"
|
1413
1434
|
]);
|
1435
|
+
var METADATA_FIELD_PREFIX = "event.";
|
1436
|
+
var EventFieldId = import_zod15.z.enum([
|
1437
|
+
`${METADATA_FIELD_PREFIX}trackingId`,
|
1438
|
+
`${METADATA_FIELD_PREFIX}status`,
|
1439
|
+
`${METADATA_FIELD_PREFIX}legalStatuses.REGISTERED.acceptedAt`,
|
1440
|
+
`${METADATA_FIELD_PREFIX}legalStatuses.REGISTERED.createdAtLocation`,
|
1441
|
+
`${METADATA_FIELD_PREFIX}updatedAt`
|
1442
|
+
]);
|
1414
1443
|
var EventFieldConfigSchema = BaseField3.extend({
|
1415
1444
|
fieldId: EventFieldId,
|
1416
1445
|
fieldType: import_zod15.z.literal("event")
|
@@ -1883,10 +1912,6 @@ var ActionStatus = {
|
|
1883
1912
|
Accepted: "Accepted",
|
1884
1913
|
Rejected: "Rejected"
|
1885
1914
|
};
|
1886
|
-
var ActionDetails = import_zod19.z.object({
|
1887
|
-
templateId: import_zod19.z.string().optional(),
|
1888
|
-
isImmediateCorrection: import_zod19.z.boolean().optional()
|
1889
|
-
});
|
1890
1915
|
var ActionBase = import_zod19.z.object({
|
1891
1916
|
id: UUID,
|
1892
1917
|
transactionId: import_zod19.z.string(),
|
@@ -1898,7 +1923,6 @@ var ActionBase = import_zod19.z.object({
|
|
1898
1923
|
createdAtLocation: CreatedAtLocation,
|
1899
1924
|
declaration: ActionUpdate,
|
1900
1925
|
annotation: ActionUpdate.optional().nullable(),
|
1901
|
-
actionDetails: ActionDetails.optional().nullable(),
|
1902
1926
|
status: import_zod19.z.enum([
|
1903
1927
|
ActionStatus.Requested,
|
1904
1928
|
ActionStatus.Accepted,
|
@@ -1908,11 +1932,15 @@ var ActionBase = import_zod19.z.object({
|
|
1908
1932
|
originalActionId: UUID.optional().nullable().describe(
|
1909
1933
|
"Reference to the original action that was asynchronously rejected or accepted by 3rd party integration."
|
1910
1934
|
)
|
1935
|
+
// 'content' field reserved for additional data
|
1936
|
+
// Each action can define its own content specifc to the action
|
1937
|
+
// See PrintCertificateAction
|
1911
1938
|
});
|
1912
1939
|
var AssignedAction = ActionBase.merge(
|
1913
1940
|
import_zod19.z.object({
|
1914
1941
|
type: import_zod19.z.literal(ActionType.ASSIGN),
|
1915
1942
|
assignedTo: import_zod19.z.string()
|
1943
|
+
// TODO move into 'content' property
|
1916
1944
|
})
|
1917
1945
|
);
|
1918
1946
|
var UnassignedAction = ActionBase.merge(
|
@@ -1924,6 +1952,7 @@ var RegisterAction = ActionBase.merge(
|
|
1924
1952
|
import_zod19.z.object({
|
1925
1953
|
type: import_zod19.z.literal(ActionType.REGISTER),
|
1926
1954
|
registrationNumber: import_zod19.z.string().optional()
|
1955
|
+
// TODO move into 'content' property
|
1927
1956
|
})
|
1928
1957
|
);
|
1929
1958
|
var DeclareAction = ActionBase.merge(
|
@@ -1944,6 +1973,7 @@ var RejectAction = ActionBase.merge(
|
|
1944
1973
|
import_zod19.z.object({
|
1945
1974
|
type: import_zod19.z.literal(ActionType.REJECT),
|
1946
1975
|
reason: RejectionReason
|
1976
|
+
// TODO move into 'content' property
|
1947
1977
|
})
|
1948
1978
|
);
|
1949
1979
|
var MarkAsDuplicateAction = ActionBase.merge(
|
@@ -1955,6 +1985,7 @@ var ArchiveAction = ActionBase.merge(
|
|
1955
1985
|
import_zod19.z.object({
|
1956
1986
|
type: import_zod19.z.literal(ActionType.ARCHIVE),
|
1957
1987
|
reason: RejectionReason
|
1988
|
+
// TODO move into 'content' property
|
1958
1989
|
})
|
1959
1990
|
);
|
1960
1991
|
var CreatedAction = ActionBase.merge(
|
@@ -1967,9 +1998,13 @@ var NotifiedAction = ActionBase.merge(
|
|
1967
1998
|
type: import_zod19.z.literal(ActionType.NOTIFY)
|
1968
1999
|
})
|
1969
2000
|
);
|
2001
|
+
var PrintContent = import_zod19.z.object({
|
2002
|
+
templateId: import_zod19.z.string().optional()
|
2003
|
+
});
|
1970
2004
|
var PrintCertificateAction = ActionBase.merge(
|
1971
2005
|
import_zod19.z.object({
|
1972
|
-
type: import_zod19.z.literal(ActionType.PRINT_CERTIFICATE)
|
2006
|
+
type: import_zod19.z.literal(ActionType.PRINT_CERTIFICATE),
|
2007
|
+
content: PrintContent.optional().nullable()
|
1973
2008
|
})
|
1974
2009
|
);
|
1975
2010
|
var RequestedCorrectionAction = ActionBase.merge(
|
@@ -1981,12 +2016,15 @@ var ApprovedCorrectionAction = ActionBase.merge(
|
|
1981
2016
|
import_zod19.z.object({
|
1982
2017
|
type: import_zod19.z.literal(ActionType.APPROVE_CORRECTION),
|
1983
2018
|
requestId: import_zod19.z.string()
|
2019
|
+
// TODO move into 'content' property
|
1984
2020
|
})
|
1985
2021
|
);
|
1986
2022
|
var RejectedCorrectionAction = ActionBase.merge(
|
1987
2023
|
import_zod19.z.object({
|
1988
2024
|
type: import_zod19.z.literal(ActionType.REJECT_CORRECTION),
|
1989
|
-
requestId: import_zod19.z.string()
|
2025
|
+
requestId: import_zod19.z.string(),
|
2026
|
+
// TODO move into 'content' property
|
2027
|
+
reason: RejectionReason
|
1990
2028
|
})
|
1991
2029
|
);
|
1992
2030
|
var ReadAction = ActionBase.merge(
|
@@ -2036,7 +2074,7 @@ var ResolvedUser = import_zod19.z.object({
|
|
2036
2074
|
});
|
2037
2075
|
|
2038
2076
|
// ../commons/src/conditionals/validate.ts
|
2039
|
-
var
|
2077
|
+
var import__ = __toESM(require("ajv/dist/2019"));
|
2040
2078
|
var import_ajv_formats = __toESM(require("ajv-formats"));
|
2041
2079
|
var import_date_fns = require("date-fns");
|
2042
2080
|
|
@@ -2250,9 +2288,11 @@ var isNonInteractiveFieldType = (field2) => {
|
|
2250
2288
|
};
|
2251
2289
|
|
2252
2290
|
// ../commons/src/conditionals/validate.ts
|
2253
|
-
var ajv = new
|
2291
|
+
var ajv = new import__.default({
|
2254
2292
|
$data: true,
|
2255
|
-
allowUnionTypes: true
|
2293
|
+
allowUnionTypes: true,
|
2294
|
+
strict: false
|
2295
|
+
// Allow minContains and other newer features
|
2256
2296
|
});
|
2257
2297
|
(0, import_ajv_formats.default)(ajv);
|
2258
2298
|
ajv.addKeyword({
|
@@ -2425,6 +2465,23 @@ function validateFieldInput({
|
|
2425
2465
|
const rawError = zodType.safeParse(value, { errorMap: zodToIntlErrorMap });
|
2426
2466
|
return rawError.error?.issues.map((issue) => issue.message) ?? [];
|
2427
2467
|
}
|
2468
|
+
function runStructuralValidations({
|
2469
|
+
field: field2,
|
2470
|
+
values
|
2471
|
+
}) {
|
2472
|
+
if (!isFieldVisible(field2, values) || isFieldEmptyAndNotRequired(field2, values)) {
|
2473
|
+
return {
|
2474
|
+
errors: []
|
2475
|
+
};
|
2476
|
+
}
|
2477
|
+
const fieldValidationResult = validateFieldInput({
|
2478
|
+
field: field2,
|
2479
|
+
value: values[field2.id]
|
2480
|
+
});
|
2481
|
+
return {
|
2482
|
+
errors: fieldValidationResult
|
2483
|
+
};
|
2484
|
+
}
|
2428
2485
|
function runFieldValidations({
|
2429
2486
|
field: field2,
|
2430
2487
|
values
|
@@ -2490,6 +2547,11 @@ function getValidatorsForField(fieldId, validations) {
|
|
2490
2547
|
};
|
2491
2548
|
}).filter((x) => x !== null);
|
2492
2549
|
}
|
2550
|
+
function areCertificateConditionsMet(conditions, values) {
|
2551
|
+
return conditions.every((condition) => {
|
2552
|
+
return ajv.validate(condition.conditional, values);
|
2553
|
+
});
|
2554
|
+
}
|
2493
2555
|
|
2494
2556
|
// ../commons/src/utils.ts
|
2495
2557
|
function getOrThrow(x, message) {
|
@@ -2710,16 +2772,16 @@ function timePeriodToDateRange(value) {
|
|
2710
2772
|
let startDate;
|
2711
2773
|
switch (value) {
|
2712
2774
|
case "last7Days":
|
2713
|
-
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(),
|
2775
|
+
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(), 7);
|
2714
2776
|
break;
|
2715
2777
|
case "last30Days":
|
2716
|
-
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(),
|
2778
|
+
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(), 30);
|
2717
2779
|
break;
|
2718
2780
|
case "last90Days":
|
2719
|
-
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(),
|
2781
|
+
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(), 90);
|
2720
2782
|
break;
|
2721
2783
|
case "last365Days":
|
2722
|
-
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(),
|
2784
|
+
startDate = (0, import_date_fns2.subDays)(/* @__PURE__ */ new Date(), 365);
|
2723
2785
|
break;
|
2724
2786
|
}
|
2725
2787
|
return {
|
@@ -3086,8 +3148,9 @@ function createFieldConditionals(fieldId) {
|
|
3086
3148
|
properties: {
|
3087
3149
|
[fieldId]: {
|
3088
3150
|
type: "string",
|
3089
|
-
|
3090
|
-
|
3151
|
+
minLength: 1,
|
3152
|
+
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'.-]*)*$",
|
3153
|
+
description: "Name must contain only letters, numbers, and allowed special characters ('.-). No double spaces."
|
3091
3154
|
}
|
3092
3155
|
}
|
3093
3156
|
}),
|
@@ -3180,6 +3243,19 @@ function createSearchConfig(baseField) {
|
|
3180
3243
|
fuzzy: () => ({
|
3181
3244
|
...baseField,
|
3182
3245
|
config: { type: "fuzzy" }
|
3246
|
+
}),
|
3247
|
+
/**
|
3248
|
+
* Creates a configuration for matching locations and the child locations
|
3249
|
+
* @returns An object containing the field ID and a configuration object with a type of 'within'.
|
3250
|
+
* @example field('createdAtLocation').within()
|
3251
|
+
* // {
|
3252
|
+
* // ...
|
3253
|
+
* // config: { type: 'within' }
|
3254
|
+
* // }
|
3255
|
+
*/
|
3256
|
+
within: () => ({
|
3257
|
+
...baseField,
|
3258
|
+
config: { type: "within" }
|
3183
3259
|
})
|
3184
3260
|
};
|
3185
3261
|
}
|
@@ -3187,7 +3263,7 @@ function createSearchConfig(baseField) {
|
|
3187
3263
|
// ../commons/src/event-config/event-configuration.ts
|
3188
3264
|
function createEventFieldConfig(fieldId) {
|
3189
3265
|
const baseField = {
|
3190
|
-
fieldId
|
3266
|
+
fieldId: `${METADATA_FIELD_PREFIX}${fieldId}`,
|
3191
3267
|
fieldType: "event"
|
3192
3268
|
};
|
3193
3269
|
return createSearchConfig(baseField);
|
@@ -3200,32 +3276,107 @@ function eventFn(fieldId) {
|
|
3200
3276
|
var event = Object.assign(eventFn, {
|
3201
3277
|
/**
|
3202
3278
|
* Checks if the event contains a specific action type.
|
3279
|
+
* Can be used directly as a conditional or chained with additional methods.
|
3203
3280
|
* @param action - The action type to check for.
|
3204
3281
|
*/
|
3205
|
-
hasAction: (action) =>
|
3206
|
-
|
3207
|
-
|
3208
|
-
|
3282
|
+
hasAction: (action) => {
|
3283
|
+
const basicConditional = defineConditional({
|
3284
|
+
type: "object",
|
3285
|
+
properties: {
|
3286
|
+
$event: {
|
3287
|
+
type: "object",
|
3288
|
+
properties: {
|
3289
|
+
actions: {
|
3290
|
+
type: "array",
|
3291
|
+
contains: {
|
3292
|
+
type: "object",
|
3293
|
+
properties: {
|
3294
|
+
type: {
|
3295
|
+
const: action
|
3296
|
+
}
|
3297
|
+
},
|
3298
|
+
required: ["type"]
|
3299
|
+
}
|
3300
|
+
}
|
3301
|
+
},
|
3302
|
+
required: ["actions"]
|
3303
|
+
}
|
3304
|
+
},
|
3305
|
+
required: ["$event"]
|
3306
|
+
});
|
3307
|
+
const buildActionConstraints = (additionalFields) => {
|
3308
|
+
const actionProperties = {
|
3309
|
+
type: { const: action }
|
3310
|
+
};
|
3311
|
+
const requiredFields = ["type"];
|
3312
|
+
if (additionalFields) {
|
3313
|
+
Object.entries(additionalFields).forEach(([key, value]) => {
|
3314
|
+
actionProperties[key] = { const: value };
|
3315
|
+
requiredFields.push(key);
|
3316
|
+
});
|
3317
|
+
}
|
3318
|
+
return { actionProperties, requiredFields };
|
3319
|
+
};
|
3320
|
+
const createCountConditional = (countType, count, additionalFields) => {
|
3321
|
+
const { actionProperties, requiredFields } = buildActionConstraints(additionalFields);
|
3322
|
+
return defineConditional({
|
3209
3323
|
type: "object",
|
3210
3324
|
properties: {
|
3211
|
-
|
3212
|
-
type: "
|
3213
|
-
|
3214
|
-
|
3215
|
-
|
3216
|
-
|
3217
|
-
|
3218
|
-
|
3219
|
-
|
3220
|
-
|
3221
|
-
|
3325
|
+
$event: {
|
3326
|
+
type: "object",
|
3327
|
+
properties: {
|
3328
|
+
actions: {
|
3329
|
+
type: "array",
|
3330
|
+
contains: {
|
3331
|
+
type: "object",
|
3332
|
+
properties: actionProperties,
|
3333
|
+
required: requiredFields
|
3334
|
+
},
|
3335
|
+
[countType]: count
|
3336
|
+
}
|
3337
|
+
},
|
3338
|
+
required: ["actions"]
|
3222
3339
|
}
|
3223
3340
|
},
|
3224
|
-
required: ["
|
3225
|
-
}
|
3226
|
-
}
|
3227
|
-
|
3228
|
-
|
3341
|
+
required: ["$event"]
|
3342
|
+
});
|
3343
|
+
};
|
3344
|
+
const withMinMax = (additionalFields) => {
|
3345
|
+
return {
|
3346
|
+
/**
|
3347
|
+
* Creates a conditional that checks if the event contains a specific action type
|
3348
|
+
* with a minimum count of occurrences.
|
3349
|
+
*
|
3350
|
+
* @param minCount - The minimum number of actions required.
|
3351
|
+
*/
|
3352
|
+
minCount: (minCount) => createCountConditional("minContains", minCount, additionalFields),
|
3353
|
+
/**
|
3354
|
+
* Builds a conditional that sets a maximum count for the number of actions.
|
3355
|
+
* This is useful for limiting the number of actions of a specific type in a single event.
|
3356
|
+
*/
|
3357
|
+
maxCount: (maxCount) => createCountConditional("maxContains", maxCount, additionalFields)
|
3358
|
+
};
|
3359
|
+
};
|
3360
|
+
const chainableMethods = {
|
3361
|
+
/**
|
3362
|
+
* Adds additional field constraints to the action matching.
|
3363
|
+
*
|
3364
|
+
* @param fields - Object containing additional fields to match on the action.
|
3365
|
+
*/
|
3366
|
+
withFields: (fields) => withMinMax(fields),
|
3367
|
+
/**
|
3368
|
+
* Adds template ID constraint to the action matching.
|
3369
|
+
* This is a convenience method that adds content.templateId to the fields.
|
3370
|
+
*
|
3371
|
+
* @param id - The template ID to match against.
|
3372
|
+
*/
|
3373
|
+
withTemplate: (id) => withMinMax({
|
3374
|
+
content: { templateId: id }
|
3375
|
+
}),
|
3376
|
+
...withMinMax()
|
3377
|
+
};
|
3378
|
+
return { ...basicConditional, ...chainableMethods };
|
3379
|
+
},
|
3229
3380
|
field(field2) {
|
3230
3381
|
return {
|
3231
3382
|
$event: field2
|
@@ -3244,24 +3395,23 @@ var EventStatus = import_zod23.z.enum([
|
|
3244
3395
|
"DECLARED",
|
3245
3396
|
"VALIDATED",
|
3246
3397
|
"REGISTERED",
|
3247
|
-
"CERTIFIED",
|
3248
3398
|
"ARCHIVED"
|
3249
3399
|
]);
|
3250
|
-
var VisibleStatus = import_zod23.z.enum([...EventStatus.options, "REJECTED"]);
|
3251
3400
|
var InherentFlags = {
|
3252
|
-
|
3401
|
+
PENDING_CERTIFICATION: "pending-certification",
|
3253
3402
|
INCOMPLETE: "incomplete",
|
3254
3403
|
REJECTED: "rejected",
|
3255
3404
|
CORRECTION_REQUESTED: "correction-requested"
|
3256
3405
|
};
|
3257
|
-
var
|
3406
|
+
var ActionFlag = import_zod23.z.string().regex(
|
3258
3407
|
new RegExp(
|
3259
3408
|
`^(${Object.values(ActionType).join("|").toLowerCase()}):(${Object.values(
|
3260
3409
|
ActionStatus
|
3261
3410
|
).join("|").toLowerCase()})$`
|
3262
3411
|
),
|
3263
3412
|
"Flag must be in the format ActionType:ActionStatus (lowerCase)"
|
3264
|
-
)
|
3413
|
+
);
|
3414
|
+
var Flag = ActionFlag.or(import_zod23.z.nativeEnum(InherentFlags));
|
3265
3415
|
var ZodDate = import_zod23.z.string().date();
|
3266
3416
|
var ActionCreationMetadata = import_zod23.z.object({
|
3267
3417
|
createdAt: import_zod23.z.string().datetime().describe("The timestamp when the action request was created."),
|
@@ -3529,6 +3679,9 @@ var QueryExpression = import_zod25.z.object({
|
|
3529
3679
|
createdAt: import_zod25.z.optional(DateCondition),
|
3530
3680
|
updatedAt: import_zod25.z.optional(DateCondition),
|
3531
3681
|
"legalStatuses.REGISTERED.acceptedAt": import_zod25.z.optional(DateCondition),
|
3682
|
+
"legalStatuses.DECLARED.createdAtLocation": import_zod25.z.optional(
|
3683
|
+
import_zod25.z.union([Within, Exact])
|
3684
|
+
),
|
3532
3685
|
"legalStatuses.REGISTERED.createdAtLocation": import_zod25.z.optional(
|
3533
3686
|
import_zod25.z.union([Within, Exact])
|
3534
3687
|
),
|
@@ -3774,7 +3927,8 @@ var WorkqueueConfig = import_zod28.z.object({
|
|
3774
3927
|
})
|
3775
3928
|
),
|
3776
3929
|
columns: import_zod28.z.array(WorkqueueColumn).default(mandatoryColumns),
|
3777
|
-
icon: AvailableIcons
|
3930
|
+
icon: AvailableIcons,
|
3931
|
+
emptyMessage: TranslationConfig.optional()
|
3778
3932
|
}).describe("Configuration for workqueue.");
|
3779
3933
|
var WorkqueueConfigWithoutQuery = WorkqueueConfig.omit({
|
3780
3934
|
query: true,
|
@@ -3793,7 +3947,8 @@ var WorkqueueConfigInput = import_zod28.z.object({
|
|
3793
3947
|
})
|
3794
3948
|
),
|
3795
3949
|
columns: import_zod28.z.array(WorkqueueColumn).default(mandatoryColumns),
|
3796
|
-
icon: AvailableIcons
|
3950
|
+
icon: AvailableIcons,
|
3951
|
+
emptyMessage: TranslationConfig.optional()
|
3797
3952
|
});
|
3798
3953
|
function defineWorkqueue(workqueueInput) {
|
3799
3954
|
const queryInput = workqueueInput.query;
|
@@ -3840,7 +3995,6 @@ var BaseActionInput = import_zod29.z.object({
|
|
3840
3995
|
transactionId: import_zod29.z.string(),
|
3841
3996
|
declaration: ActionUpdate.default({}),
|
3842
3997
|
annotation: ActionUpdate.optional(),
|
3843
|
-
actionDetails: ActionDetails.optional(),
|
3844
3998
|
originalActionId: UUID.optional(),
|
3845
3999
|
// should not be part of base action.
|
3846
4000
|
keepAssignment: import_zod29.z.boolean().optional()
|
@@ -3883,7 +4037,8 @@ var DeclareActionInput = BaseActionInput.merge(
|
|
3883
4037
|
);
|
3884
4038
|
var PrintCertificateActionInput = BaseActionInput.merge(
|
3885
4039
|
import_zod29.z.object({
|
3886
|
-
type: import_zod29.z.literal(ActionType.PRINT_CERTIFICATE).default(ActionType.PRINT_CERTIFICATE)
|
4040
|
+
type: import_zod29.z.literal(ActionType.PRINT_CERTIFICATE).default(ActionType.PRINT_CERTIFICATE),
|
4041
|
+
content: PrintContent.optional()
|
3887
4042
|
})
|
3888
4043
|
);
|
3889
4044
|
var RejectDeclarationActionInput = BaseActionInput.merge(
|
@@ -3923,7 +4078,8 @@ var RequestCorrectionActionInput = BaseActionInput.merge(
|
|
3923
4078
|
var RejectCorrectionActionInput = BaseActionInput.merge(
|
3924
4079
|
import_zod29.z.object({
|
3925
4080
|
requestId: import_zod29.z.string(),
|
3926
|
-
type: import_zod29.z.literal(ActionType.REJECT_CORRECTION).default(ActionType.REJECT_CORRECTION)
|
4081
|
+
type: import_zod29.z.literal(ActionType.REJECT_CORRECTION).default(ActionType.REJECT_CORRECTION),
|
4082
|
+
reason: RejectionReason
|
3927
4083
|
})
|
3928
4084
|
);
|
3929
4085
|
var ApproveCorrectionActionInput = BaseActionInput.merge(
|
@@ -4094,16 +4250,19 @@ function getLegalStatuses(actions) {
|
|
4094
4250
|
}
|
4095
4251
|
|
4096
4252
|
// ../commons/src/events/state/flags.ts
|
4097
|
-
function
|
4253
|
+
function isPendingCertification(actions) {
|
4254
|
+
if (getStatusFromActions(actions) !== EventStatus.enum.REGISTERED) {
|
4255
|
+
return false;
|
4256
|
+
}
|
4098
4257
|
return actions.reduce((prev, { type }) => {
|
4099
4258
|
if (type === ActionType.PRINT_CERTIFICATE) {
|
4100
|
-
return
|
4259
|
+
return false;
|
4101
4260
|
}
|
4102
4261
|
if (type === ActionType.APPROVE_CORRECTION) {
|
4103
|
-
return
|
4262
|
+
return true;
|
4104
4263
|
}
|
4105
4264
|
return prev;
|
4106
|
-
},
|
4265
|
+
}, true);
|
4107
4266
|
}
|
4108
4267
|
function isCorrectionRequested(actions) {
|
4109
4268
|
return actions.reduce((prev, { type }) => {
|
@@ -4138,8 +4297,8 @@ function getFlagsFromActions(actions) {
|
|
4138
4297
|
const flag = joinValues([type, status], ":").toLowerCase();
|
4139
4298
|
return flag;
|
4140
4299
|
});
|
4141
|
-
if (
|
4142
|
-
flags.push(InherentFlags.
|
4300
|
+
if (isPendingCertification(sortedActions)) {
|
4301
|
+
flags.push(InherentFlags.PENDING_CERTIFICATION);
|
4143
4302
|
}
|
4144
4303
|
if (isCorrectionRequested(sortedActions)) {
|
4145
4304
|
flags.push(InherentFlags.CORRECTION_REQUESTED);
|
@@ -4170,7 +4329,6 @@ function getStatusFromActions(actions) {
|
|
4170
4329
|
case ActionType.NOTIFY:
|
4171
4330
|
return EventStatus.enum.NOTIFIED;
|
4172
4331
|
case ActionType.PRINT_CERTIFICATE:
|
4173
|
-
return EventStatus.enum.CERTIFIED;
|
4174
4332
|
case ActionType.ASSIGN:
|
4175
4333
|
case ActionType.UNASSIGN:
|
4176
4334
|
case ActionType.REJECT:
|
@@ -5135,7 +5293,27 @@ var TENNIS_CLUB_DECLARATION_FORM = defineDeclarationForm({
|
|
5135
5293
|
defaultMessage: "Applicant's name",
|
5136
5294
|
description: "This is the label for the field",
|
5137
5295
|
id: "v2.event.tennis-club-membership.action.declare.form.section.who.field.firstname.label"
|
5138
|
-
}
|
5296
|
+
},
|
5297
|
+
configuration: {
|
5298
|
+
name: {
|
5299
|
+
firstname: { required: true },
|
5300
|
+
middlename: { required: false },
|
5301
|
+
surname: { required: true }
|
5302
|
+
}
|
5303
|
+
},
|
5304
|
+
validation: [
|
5305
|
+
{
|
5306
|
+
validator: field("applicant.name").object({
|
5307
|
+
firstname: field("firstname").isValidEnglishName(),
|
5308
|
+
surname: field("surname").isValidEnglishName()
|
5309
|
+
}),
|
5310
|
+
message: {
|
5311
|
+
defaultMessage: "Input contains invalid characters. Please use only letters (a-z, A-Z), numbers (0-9), hyphens (-), apostrophes(') and underscores (_)",
|
5312
|
+
description: "This is the error message for invalid name",
|
5313
|
+
id: "v2.error.invalidName"
|
5314
|
+
}
|
5315
|
+
}
|
5316
|
+
]
|
5139
5317
|
},
|
5140
5318
|
{
|
5141
5319
|
id: "applicant.email",
|
@@ -5357,22 +5535,6 @@ var statusOptions = [
|
|
5357
5535
|
id: "v2.advancedSearch.form.recordStatusRegistered"
|
5358
5536
|
}
|
5359
5537
|
},
|
5360
|
-
{
|
5361
|
-
value: EventStatus.enum.CERTIFIED,
|
5362
|
-
label: {
|
5363
|
-
defaultMessage: "Certified",
|
5364
|
-
description: "Option for form field: status of record",
|
5365
|
-
id: "v2.advancedSearch.form.recordStatusCertified"
|
5366
|
-
}
|
5367
|
-
},
|
5368
|
-
{
|
5369
|
-
value: VisibleStatus.enum.REJECTED,
|
5370
|
-
label: {
|
5371
|
-
defaultMessage: "Rejected",
|
5372
|
-
description: "Option for form field: status of record",
|
5373
|
-
id: "v2.advancedSearch.form.recordStatusRejected"
|
5374
|
-
}
|
5375
|
-
},
|
5376
5538
|
{
|
5377
5539
|
value: EventStatus.enum.ARCHIVED,
|
5378
5540
|
label: {
|
@@ -6762,7 +6924,7 @@ function eventPayloadGenerator(rng) {
|
|
6762
6924
|
requestId,
|
6763
6925
|
keepAssignment: input.keepAssignment
|
6764
6926
|
}),
|
6765
|
-
reject: (eventId, requestId, input
|
6927
|
+
reject: (eventId, requestId, input) => ({
|
6766
6928
|
type: ActionType.REJECT_CORRECTION,
|
6767
6929
|
transactionId: input.transactionId ?? getUUID(),
|
6768
6930
|
declaration: {},
|
@@ -6773,7 +6935,8 @@ function eventPayloadGenerator(rng) {
|
|
6773
6935
|
),
|
6774
6936
|
eventId,
|
6775
6937
|
requestId,
|
6776
|
-
keepAssignment: input.keepAssignment
|
6938
|
+
keepAssignment: input.keepAssignment,
|
6939
|
+
reason: input.reason ?? { message: "" }
|
6777
6940
|
})
|
6778
6941
|
}
|
6779
6942
|
}
|
@@ -6823,7 +6986,11 @@ function generateActionDocument({
|
|
6823
6986
|
case ActionType.NOTIFY:
|
6824
6987
|
return { ...actionBase, type: action };
|
6825
6988
|
case ActionType.PRINT_CERTIFICATE:
|
6826
|
-
return {
|
6989
|
+
return {
|
6990
|
+
...actionBase,
|
6991
|
+
type: action,
|
6992
|
+
content: defaults.content
|
6993
|
+
};
|
6827
6994
|
case ActionType.REQUEST_CORRECTION:
|
6828
6995
|
return { ...actionBase, type: action };
|
6829
6996
|
case ActionType.APPROVE_CORRECTION:
|
@@ -6832,7 +6999,8 @@ function generateActionDocument({
|
|
6832
6999
|
return {
|
6833
7000
|
...actionBase,
|
6834
7001
|
requestId: getUUID(),
|
6835
|
-
type: action
|
7002
|
+
type: action,
|
7003
|
+
reason: { message: "Correction rejection" }
|
6836
7004
|
};
|
6837
7005
|
case ActionType.REGISTER:
|
6838
7006
|
return {
|
@@ -7222,14 +7390,6 @@ var AVAILABLE_ACTIONS_BY_EVENT_STATUS = {
|
|
7222
7390
|
ActionType.REJECT_CORRECTION,
|
7223
7391
|
ExclusiveActions.REVIEW_CORRECTION_REQUEST
|
7224
7392
|
],
|
7225
|
-
[EventStatus.enum.CERTIFIED]: [
|
7226
|
-
ActionType.READ,
|
7227
|
-
ActionType.PRINT_CERTIFICATE,
|
7228
|
-
ActionType.REQUEST_CORRECTION,
|
7229
|
-
ActionType.APPROVE_CORRECTION,
|
7230
|
-
ActionType.REJECT_CORRECTION,
|
7231
|
-
ExclusiveActions.REVIEW_CORRECTION_REQUEST
|
7232
|
-
],
|
7233
7393
|
[EventStatus.enum.ARCHIVED]: [
|
7234
7394
|
ActionType.READ,
|
7235
7395
|
ActionType.ASSIGN,
|
@@ -7237,9 +7397,12 @@ var AVAILABLE_ACTIONS_BY_EVENT_STATUS = {
|
|
7237
7397
|
]
|
7238
7398
|
};
|
7239
7399
|
var getAvailableActionsForEvent = (event2) => {
|
7240
|
-
|
7241
|
-
|
7242
|
-
|
7243
|
-
|
7244
|
-
|
7400
|
+
if (event2.flags.includes(InherentFlags.REJECTED)) {
|
7401
|
+
return [
|
7402
|
+
ActionType.READ,
|
7403
|
+
event2.status === EventStatus.Enum.VALIDATED ? ActionType.VALIDATE : ActionType.DECLARE,
|
7404
|
+
ActionType.ARCHIVE
|
7405
|
+
];
|
7406
|
+
}
|
7407
|
+
return AVAILABLE_ACTIONS_BY_EVENT_STATUS[event2.status];
|
7245
7408
|
};
|