@opencrvs/toolkit 2.0.0-rc.ff04b30 → 2.0.0-rc.ff1424b
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/create-countryconfig/index.js +50 -20
- package/create-countryconfig/package.json +12 -2
- package/dist/application-config/index.js +250 -97
- package/dist/cli.js +10 -4
- package/dist/commons/api/router.d.ts +107 -21
- package/dist/commons/application-config/index.d.ts +1 -0
- package/dist/commons/conditionals/conditionals.d.ts +354 -4
- package/dist/commons/conditionals/validate.d.ts +51 -2
- package/dist/commons/events/ActionConfig.d.ts +28 -2
- package/dist/commons/events/ActionDocument.d.ts +6 -0
- package/dist/commons/events/ActionInput.d.ts +42 -36
- package/dist/commons/events/AdvancedSearchConfig.d.ts +342 -0
- package/dist/commons/events/Draft.d.ts +2 -3
- package/dist/commons/events/EventDocument.d.ts +3 -0
- package/dist/commons/events/FieldConfig.d.ts +378 -50
- package/dist/commons/events/FieldType.d.ts +1 -0
- package/dist/commons/events/FieldTypeMapping.d.ts +1 -1
- package/dist/commons/events/FieldValue.d.ts +6 -0
- package/dist/commons/events/WorkqueueConfig.d.ts +5 -5
- package/dist/commons/events/field.d.ts +53 -1
- package/dist/commons/events/index.d.ts +2 -0
- package/dist/commons/events/state/flags.d.ts +16 -0
- package/dist/commons/events/state/utils.d.ts +12 -287
- package/dist/commons/events/utils.d.ts +12 -1
- package/dist/conditionals/index.js +52 -1
- package/dist/events/index.js +1035 -222
- package/dist/migrations/v2.0/checkout-upstream-files.d.ts +1 -1
- package/dist/migrations/v2.0/checkout-upstream-files.d.ts.map +1 -1
- package/dist/migrations/v2.0/checkout-upstream-files.js +1 -1
- package/dist/migrations/v2.0/index.js +10 -4
- package/dist/notification/index.js +869 -120
- package/dist/scopes/index.d.ts +4 -6
- package/dist/scopes/index.js +9 -3
- package/opencrvs-toolkit-2.0.0-rc.ff1424b.tgz +0 -0
- package/package.json +6 -2
- package/opencrvs-toolkit-2.0.0-rc.ff04b30.tgz +0 -0
|
@@ -655,8 +655,8 @@ var ActionConditional = z7.discriminatedUnion("type", [
|
|
|
655
655
|
// Action can be shown to the user in the list but as disabled
|
|
656
656
|
EnableConditional
|
|
657
657
|
]).meta({
|
|
658
|
-
|
|
659
|
-
|
|
658
|
+
id: "ActionConditional",
|
|
659
|
+
description: "Conditional gating whether an action is shown (SHOW) or enabled (ENABLE). When omitted from an action, the action is shown and enabled for everyone."
|
|
660
660
|
});
|
|
661
661
|
var DisplayOnReviewConditional = z7.object({
|
|
662
662
|
type: z7.literal(ConditionalType.DISPLAY_ON_REVIEW),
|
|
@@ -672,8 +672,8 @@ var FieldConditional = z7.discriminatedUnion("type", [
|
|
|
672
672
|
// Field output can be shown / hidden on the review page
|
|
673
673
|
DisplayOnReviewConditional
|
|
674
674
|
]).meta({
|
|
675
|
-
|
|
676
|
-
|
|
675
|
+
id: "FieldConditional",
|
|
676
|
+
description: "Conditional gating whether a form field is shown (SHOW), enabled (ENABLE), or displayed on the review page (DISPLAY_ON_REVIEW). When omitted, the field is shown and enabled for everyone, and is displayed on review whenever it has a value."
|
|
677
677
|
});
|
|
678
678
|
|
|
679
679
|
// ../commons/src/events/FieldType.ts
|
|
@@ -770,6 +770,11 @@ var FieldTypesToHideInReview = [
|
|
|
770
770
|
FieldType.ALPHA_PRINT_BUTTON,
|
|
771
771
|
FieldType.ALPHA_HIDDEN
|
|
772
772
|
];
|
|
773
|
+
var HiddenFieldTypes = [
|
|
774
|
+
FieldType.HTTP,
|
|
775
|
+
FieldType.QUERY_PARAM_READER,
|
|
776
|
+
FieldType.ALPHA_HIDDEN
|
|
777
|
+
];
|
|
773
778
|
|
|
774
779
|
// ../commons/src/events/FieldValue.ts
|
|
775
780
|
var z12 = __toESM(require("zod/v4"));
|
|
@@ -888,7 +893,7 @@ var PlainDate = import_zod.z.string().date().brand("PlainDate").describe("Date i
|
|
|
888
893
|
// ../commons/src/events/FieldValue.ts
|
|
889
894
|
var TextValue = z12.string();
|
|
890
895
|
var HiddenFieldValue = z12.string();
|
|
891
|
-
var NonEmptyTextValue =
|
|
896
|
+
var NonEmptyTextValue = z12.string().trim().min(1);
|
|
892
897
|
var DateValue = z12.iso.date().describe("Date in the format YYYY-MM-DD");
|
|
893
898
|
var AgeValue = z12.object({
|
|
894
899
|
age: z12.number(),
|
|
@@ -917,6 +922,7 @@ var DateRangeFieldValue = z12.object({
|
|
|
917
922
|
var EmailValue = z12.email();
|
|
918
923
|
var CheckboxFieldValue = z12.boolean();
|
|
919
924
|
var NumberFieldValue = z12.number();
|
|
925
|
+
var SignatureFieldValue = FileFieldValue;
|
|
920
926
|
var ButtonFieldValue = z12.number();
|
|
921
927
|
var VerificationStatusValue = z12.enum([
|
|
922
928
|
"verified",
|
|
@@ -1215,8 +1221,9 @@ var RequestedCorrectionAction = ActionBase.extend(
|
|
|
1215
1221
|
var ApprovedCorrectionAction = ActionBase.extend(
|
|
1216
1222
|
z14.object({
|
|
1217
1223
|
type: z14.literal(ActionType.APPROVE_CORRECTION),
|
|
1218
|
-
requestId: z14.string()
|
|
1224
|
+
requestId: z14.string(),
|
|
1219
1225
|
// TODO move into 'content' property
|
|
1226
|
+
content: z14.object({ immediateCorrection: z14.boolean().optional() }).optional()
|
|
1220
1227
|
}).shape
|
|
1221
1228
|
);
|
|
1222
1229
|
var RejectedCorrectionAction = ActionBase.extend(
|
|
@@ -1309,8 +1316,8 @@ var FlagConfig = z15.object({
|
|
|
1309
1316
|
),
|
|
1310
1317
|
label: TranslationConfig.describe("Human readable label of the flag.")
|
|
1311
1318
|
}).meta({
|
|
1312
|
-
|
|
1313
|
-
|
|
1319
|
+
id: "FlagConfig",
|
|
1320
|
+
description: "Configuration for a custom flag that can be added to or removed from records by event actions."
|
|
1314
1321
|
});
|
|
1315
1322
|
var ActionFlagConfig = z15.object({
|
|
1316
1323
|
id: Flag,
|
|
@@ -1319,8 +1326,8 @@ var ActionFlagConfig = z15.object({
|
|
|
1319
1326
|
"When conditional is met, the operation is performed on the flag. If not provided, the operation is performed unconditionally."
|
|
1320
1327
|
)
|
|
1321
1328
|
}).meta({
|
|
1322
|
-
|
|
1323
|
-
|
|
1329
|
+
id: "ActionFlagConfig",
|
|
1330
|
+
description: "Add or remove operation applied to a flag when the parent action is accepted. Optionally gated by a conditional."
|
|
1324
1331
|
});
|
|
1325
1332
|
|
|
1326
1333
|
// ../commons/src/events/EventMetadata.ts
|
|
@@ -1665,11 +1672,28 @@ var FieldReference = import_v43.default.object({
|
|
|
1665
1672
|
$$field: FieldId.describe("Id of the field to reference"),
|
|
1666
1673
|
$$subfield: import_v43.default.array(import_v43.default.string()).optional().default([]).describe(
|
|
1667
1674
|
'If the FieldValue is an object, subfield can be used to refer to e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`'
|
|
1675
|
+
),
|
|
1676
|
+
$$code: import_v43.default.string().optional().describe(
|
|
1677
|
+
"Serialised client-side function body. When present the expression is evaluated rather than dereferenced."
|
|
1668
1678
|
)
|
|
1669
|
-
}).describe(
|
|
1679
|
+
}).describe(
|
|
1680
|
+
"Reference to a field value, with an optional client-side computation applied."
|
|
1681
|
+
);
|
|
1682
|
+
var ComputedDefaultValue = import_v43.default.object({
|
|
1683
|
+
$$code: import_v43.default.string().describe(
|
|
1684
|
+
"Serialised client-side function body. Receives (undefined, context) where context includes $now, $online, and system variables."
|
|
1685
|
+
)
|
|
1686
|
+
}).describe("A context-only computation used as a field default value.");
|
|
1670
1687
|
var ValidationConfig = import_v43.default.object({
|
|
1671
|
-
validator: Conditional
|
|
1672
|
-
|
|
1688
|
+
validator: Conditional.describe(
|
|
1689
|
+
"Conditional expression that must hold for the field value to be considered valid."
|
|
1690
|
+
),
|
|
1691
|
+
message: TranslationConfig.describe(
|
|
1692
|
+
"Error message displayed when the validator does not hold."
|
|
1693
|
+
)
|
|
1694
|
+
}).meta({
|
|
1695
|
+
id: "ValidationConfig",
|
|
1696
|
+
description: "Validation rule applied to a form field. The validator is a conditional expression that must hold for the field value to be considered valid."
|
|
1673
1697
|
});
|
|
1674
1698
|
var requiredSchema = import_v43.default.union([
|
|
1675
1699
|
import_v43.default.boolean(),
|
|
@@ -1700,7 +1724,7 @@ var BaseField = import_v43.default.object({
|
|
|
1700
1724
|
"Indicates whether the field can be modified during record correction."
|
|
1701
1725
|
),
|
|
1702
1726
|
value: FieldReference.or(import_v43.default.array(FieldReference)).optional().describe(
|
|
1703
|
-
"Reference to the source field or fields. When a value is defined, it is copied from the parent field when changed. If multiple references are provided, the first truthy value is used."
|
|
1727
|
+
"Reference to the source field or fields. When a value is defined, it is copied from the parent field when changed. If multiple references are provided, the first truthy value is used. A FieldReference with $$code computes the value via a custom client-side function."
|
|
1704
1728
|
),
|
|
1705
1729
|
analytics: import_v43.default.boolean().default(false).optional().describe(
|
|
1706
1730
|
"Indicates whether the field is included in analytics. When enabled, its value becomes available in the analytics dashboard."
|
|
@@ -1708,30 +1732,40 @@ var BaseField = import_v43.default.object({
|
|
|
1708
1732
|
}).describe("Common properties shared across all field types.");
|
|
1709
1733
|
var Divider = BaseField.extend({
|
|
1710
1734
|
type: import_v43.default.literal(FieldType.DIVIDER)
|
|
1735
|
+
}).meta({
|
|
1736
|
+
description: "A horizontal line divider",
|
|
1737
|
+
id: "Divider"
|
|
1711
1738
|
});
|
|
1712
1739
|
var TextField = BaseField.extend({
|
|
1713
1740
|
type: import_v43.default.literal(FieldType.TEXT),
|
|
1714
|
-
defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField]).optional(),
|
|
1741
|
+
defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField, ComputedDefaultValue]).optional(),
|
|
1715
1742
|
configuration: import_v43.default.object({
|
|
1716
1743
|
maxLength: import_v43.default.number().optional().describe("Maximum length of the text"),
|
|
1717
1744
|
type: import_v43.default.enum(["text", "password"]).optional(),
|
|
1718
1745
|
prefix: TranslationConfig.optional(),
|
|
1719
1746
|
postfix: TranslationConfig.optional()
|
|
1720
1747
|
}).default({ type: "text" }).optional()
|
|
1721
|
-
}).
|
|
1748
|
+
}).meta({
|
|
1749
|
+
description: "A text input field",
|
|
1750
|
+
id: "TextField"
|
|
1751
|
+
});
|
|
1722
1752
|
var NumberField = BaseField.extend({
|
|
1723
1753
|
type: import_v43.default.literal(FieldType.NUMBER),
|
|
1724
|
-
defaultValue: NumberFieldValue.optional(),
|
|
1754
|
+
defaultValue: NumberFieldValue.or(ComputedDefaultValue).optional(),
|
|
1725
1755
|
configuration: import_v43.default.object({
|
|
1726
1756
|
min: import_v43.default.number().optional().describe("Minimum value"),
|
|
1727
1757
|
max: import_v43.default.number().optional().describe("Maximum value"),
|
|
1758
|
+
integer: import_v43.default.boolean().optional().describe("When true, only whole numbers are allowed"),
|
|
1728
1759
|
prefix: TranslationConfig.optional(),
|
|
1729
1760
|
postfix: TranslationConfig.optional()
|
|
1730
1761
|
}).optional()
|
|
1731
|
-
}).
|
|
1762
|
+
}).meta({
|
|
1763
|
+
description: "A number input field",
|
|
1764
|
+
id: "NumberField"
|
|
1765
|
+
});
|
|
1732
1766
|
var TextAreaField = BaseField.extend({
|
|
1733
1767
|
type: import_v43.default.literal(FieldType.TEXTAREA),
|
|
1734
|
-
defaultValue: NonEmptyTextValue.optional(),
|
|
1768
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
|
|
1735
1769
|
configuration: import_v43.default.object({
|
|
1736
1770
|
maxLength: import_v43.default.number().optional().describe("Maximum length of the text"),
|
|
1737
1771
|
rows: import_v43.default.number().optional().describe("Number of visible text lines"),
|
|
@@ -1739,7 +1773,10 @@ var TextAreaField = BaseField.extend({
|
|
|
1739
1773
|
prefix: TranslationConfig.optional(),
|
|
1740
1774
|
postfix: TranslationConfig.optional()
|
|
1741
1775
|
}).default({ rows: 4 }).optional()
|
|
1742
|
-
}).
|
|
1776
|
+
}).meta({
|
|
1777
|
+
description: "A multiline text input",
|
|
1778
|
+
id: "TextAreaField"
|
|
1779
|
+
});
|
|
1743
1780
|
var ImageMimeType = import_v43.default.enum([
|
|
1744
1781
|
"image/png",
|
|
1745
1782
|
"image/jpg",
|
|
@@ -1762,58 +1799,76 @@ var SignatureField = BaseField.extend({
|
|
|
1762
1799
|
signaturePromptLabel: TranslationConfig.describe(
|
|
1763
1800
|
"Title of the signature modal"
|
|
1764
1801
|
),
|
|
1765
|
-
defaultValue:
|
|
1802
|
+
defaultValue: SignatureFieldValue.or(ComputedDefaultValue).optional(),
|
|
1766
1803
|
configuration: import_v43.default.object({
|
|
1767
1804
|
maxFileSize: import_v43.default.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
|
|
1768
1805
|
acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature")
|
|
1769
1806
|
}).default({
|
|
1770
1807
|
maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
|
|
1771
1808
|
})
|
|
1772
|
-
}).
|
|
1809
|
+
}).meta({
|
|
1810
|
+
description: "A signature input field",
|
|
1811
|
+
id: "SignatureField"
|
|
1812
|
+
});
|
|
1773
1813
|
var EmailField = BaseField.extend({
|
|
1774
1814
|
type: import_v43.default.literal(FieldType.EMAIL),
|
|
1775
1815
|
configuration: import_v43.default.object({
|
|
1776
1816
|
maxLength: import_v43.default.number().optional().describe("Maximum length of the text")
|
|
1777
1817
|
}).default({ maxLength: 255 }).optional(),
|
|
1778
|
-
defaultValue: NonEmptyTextValue.optional()
|
|
1818
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional()
|
|
1819
|
+
}).meta({
|
|
1820
|
+
description: "An email input field",
|
|
1821
|
+
id: "EmailField"
|
|
1779
1822
|
});
|
|
1780
1823
|
var DateField = BaseField.extend({
|
|
1781
1824
|
type: import_v43.default.literal(FieldType.DATE),
|
|
1782
|
-
defaultValue: SerializedNowDateTime.or(PlainDate).optional().describe("Default date value(yyyy-MM-dd)"),
|
|
1825
|
+
defaultValue: SerializedNowDateTime.or(PlainDate).or(ComputedDefaultValue).optional().describe("Default date value(yyyy-MM-dd)"),
|
|
1783
1826
|
configuration: import_v43.default.object({
|
|
1784
1827
|
notice: TranslationConfig.describe(
|
|
1785
1828
|
"Text to display above the date input"
|
|
1786
1829
|
).optional()
|
|
1787
1830
|
}).optional()
|
|
1788
|
-
}).
|
|
1831
|
+
}).meta({
|
|
1832
|
+
description: "A date input (yyyy-MM-dd)",
|
|
1833
|
+
id: "DateField"
|
|
1834
|
+
});
|
|
1789
1835
|
var AgeField = BaseField.extend({
|
|
1790
1836
|
type: import_v43.default.literal(FieldType.AGE),
|
|
1791
|
-
defaultValue: NumberFieldValue.optional(),
|
|
1837
|
+
defaultValue: NumberFieldValue.or(ComputedDefaultValue).optional(),
|
|
1792
1838
|
configuration: import_v43.default.object({
|
|
1793
1839
|
asOfDate: FieldReference,
|
|
1794
1840
|
prefix: TranslationConfig.optional(),
|
|
1795
1841
|
postfix: TranslationConfig.optional()
|
|
1796
1842
|
})
|
|
1797
|
-
}).
|
|
1843
|
+
}).meta({
|
|
1844
|
+
description: "An age input field which uses the current date as the asOfDate",
|
|
1845
|
+
id: "AgeField"
|
|
1846
|
+
});
|
|
1798
1847
|
var TimeField = BaseField.extend({
|
|
1799
1848
|
type: import_v43.default.literal(FieldType.TIME),
|
|
1800
|
-
defaultValue: SerializedNowDateTime.or(TimeValue).optional().describe("Default time value (HH-mm)"),
|
|
1849
|
+
defaultValue: SerializedNowDateTime.or(TimeValue).or(ComputedDefaultValue).optional().describe("Default time value (HH-mm)"),
|
|
1801
1850
|
configuration: import_v43.default.object({
|
|
1802
1851
|
use12HourFormat: import_v43.default.boolean().optional().describe("Whether to use 12-hour format"),
|
|
1803
1852
|
notice: TranslationConfig.describe(
|
|
1804
1853
|
"Text to display above the time input"
|
|
1805
1854
|
).optional()
|
|
1806
1855
|
}).optional()
|
|
1807
|
-
}).
|
|
1856
|
+
}).meta({
|
|
1857
|
+
description: "A single time input (HH-mm)",
|
|
1858
|
+
id: "TimeField"
|
|
1859
|
+
});
|
|
1808
1860
|
var DateRangeField = BaseField.extend({
|
|
1809
1861
|
type: import_v43.default.literal(FieldType.DATE_RANGE),
|
|
1810
|
-
defaultValue: DateRangeFieldValue.optional(),
|
|
1862
|
+
defaultValue: DateRangeFieldValue.or(ComputedDefaultValue).optional(),
|
|
1811
1863
|
configuration: import_v43.default.object({
|
|
1812
1864
|
notice: TranslationConfig.describe(
|
|
1813
1865
|
"Text to display above the date input"
|
|
1814
1866
|
).optional()
|
|
1815
1867
|
}).optional()
|
|
1816
|
-
}).
|
|
1868
|
+
}).meta({
|
|
1869
|
+
description: "A date range input ({ start: yyyy-MM-dd, end: yyyy-MM-dd })",
|
|
1870
|
+
id: "DateRangeField"
|
|
1871
|
+
});
|
|
1817
1872
|
var HtmlFontVariant = import_v43.default.enum([
|
|
1818
1873
|
"reg12",
|
|
1819
1874
|
"reg14",
|
|
@@ -1857,21 +1912,33 @@ var ImageViewField = BaseField.extend({
|
|
|
1857
1912
|
type: import_v43.default.literal(FieldType.IMAGE_VIEW),
|
|
1858
1913
|
defaultValue: NonEmptyTextValue.optional(),
|
|
1859
1914
|
configuration: ImageConfiguration
|
|
1860
|
-
}).
|
|
1915
|
+
}).meta({
|
|
1916
|
+
description: "A read-only image component for form pages",
|
|
1917
|
+
id: "ImageViewField"
|
|
1918
|
+
});
|
|
1861
1919
|
var Paragraph = BaseField.extend({
|
|
1862
1920
|
type: import_v43.default.literal(FieldType.PARAGRAPH),
|
|
1863
1921
|
configuration: ParagraphConfiguration
|
|
1864
|
-
}).
|
|
1922
|
+
}).meta({
|
|
1923
|
+
description: "A read-only HTML <p> paragraph",
|
|
1924
|
+
id: "Paragraph"
|
|
1925
|
+
});
|
|
1865
1926
|
var Heading = BaseField.extend({
|
|
1866
1927
|
type: import_v43.default.literal(FieldType.HEADING),
|
|
1867
1928
|
configuration: HeadingConfiguration
|
|
1868
|
-
}).
|
|
1929
|
+
}).meta({
|
|
1930
|
+
description: "A read-only heading component for form pages",
|
|
1931
|
+
id: "Heading"
|
|
1932
|
+
});
|
|
1869
1933
|
var PageHeader = BaseField.extend({
|
|
1870
1934
|
type: import_v43.default.literal(FieldType.PAGE_HEADER)
|
|
1871
|
-
}).
|
|
1935
|
+
}).meta({
|
|
1936
|
+
description: "A read-only header component for form pages",
|
|
1937
|
+
id: "PageHeader"
|
|
1938
|
+
});
|
|
1872
1939
|
var File = BaseField.extend({
|
|
1873
1940
|
type: import_v43.default.literal(FieldType.FILE),
|
|
1874
|
-
defaultValue: FileFieldValue.optional(),
|
|
1941
|
+
defaultValue: FileFieldValue.or(ComputedDefaultValue).optional(),
|
|
1875
1942
|
configuration: import_v43.default.object({
|
|
1876
1943
|
maxFileSize: import_v43.default.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
|
|
1877
1944
|
acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature"),
|
|
@@ -1887,7 +1954,10 @@ var File = BaseField.extend({
|
|
|
1887
1954
|
}).default({
|
|
1888
1955
|
maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
|
|
1889
1956
|
})
|
|
1890
|
-
}).
|
|
1957
|
+
}).meta({
|
|
1958
|
+
description: "A file upload field",
|
|
1959
|
+
id: "File"
|
|
1960
|
+
});
|
|
1891
1961
|
var SelectOption = import_v43.default.object({
|
|
1892
1962
|
value: import_v43.default.string().describe("The value of the option"),
|
|
1893
1963
|
label: import_v43.default.union([import_v43.default.string(), TranslationConfig]).describe("The label of the option"),
|
|
@@ -1895,7 +1965,7 @@ var SelectOption = import_v43.default.object({
|
|
|
1895
1965
|
});
|
|
1896
1966
|
var NumberWithUnitField = BaseField.extend({
|
|
1897
1967
|
type: import_v43.default.literal(FieldType.NUMBER_WITH_UNIT),
|
|
1898
|
-
defaultValue: NumberWithUnitFieldValue.optional(),
|
|
1968
|
+
defaultValue: NumberWithUnitFieldValue.or(ComputedDefaultValue).optional(),
|
|
1899
1969
|
options: import_v43.default.array(SelectOption).describe("A list of options for the unit select"),
|
|
1900
1970
|
configuration: import_v43.default.object({
|
|
1901
1971
|
min: import_v43.default.number().optional().describe("Minimum value of the number field"),
|
|
@@ -1904,17 +1974,23 @@ var NumberWithUnitField = BaseField.extend({
|
|
|
1904
1974
|
"Placeholder for the number field"
|
|
1905
1975
|
)
|
|
1906
1976
|
}).optional()
|
|
1907
|
-
}).
|
|
1977
|
+
}).meta({
|
|
1978
|
+
description: "A number with unit input field",
|
|
1979
|
+
id: "NumberWithUnitField"
|
|
1980
|
+
});
|
|
1908
1981
|
var RadioGroup = BaseField.extend({
|
|
1909
1982
|
type: import_v43.default.literal(FieldType.RADIO_GROUP),
|
|
1910
|
-
defaultValue: TextValue.optional(),
|
|
1983
|
+
defaultValue: TextValue.or(ComputedDefaultValue).optional(),
|
|
1911
1984
|
options: import_v43.default.array(SelectOption).describe("A list of options"),
|
|
1912
1985
|
configuration: import_v43.default.object({
|
|
1913
1986
|
styles: import_v43.default.object({
|
|
1914
1987
|
size: import_v43.default.enum(["NORMAL", "LARGE"]).optional()
|
|
1915
1988
|
}).optional()
|
|
1916
1989
|
}).optional()
|
|
1917
|
-
}).
|
|
1990
|
+
}).meta({
|
|
1991
|
+
description: "A grouped radio button field",
|
|
1992
|
+
id: "RadioGroup"
|
|
1993
|
+
});
|
|
1918
1994
|
var BulletList = BaseField.extend({
|
|
1919
1995
|
type: import_v43.default.literal(FieldType.BULLET_LIST),
|
|
1920
1996
|
items: import_v43.default.array(TranslationConfig).describe("A list of items"),
|
|
@@ -1923,10 +1999,13 @@ var BulletList = BaseField.extend({
|
|
|
1923
1999
|
fontVariant: HtmlFontVariant.optional()
|
|
1924
2000
|
}).optional()
|
|
1925
2001
|
}).default({})
|
|
1926
|
-
}).
|
|
2002
|
+
}).meta({
|
|
2003
|
+
description: "A list of bullet points",
|
|
2004
|
+
id: "BulletList"
|
|
2005
|
+
});
|
|
1927
2006
|
var Select = BaseField.extend({
|
|
1928
2007
|
type: import_v43.default.literal(FieldType.SELECT),
|
|
1929
|
-
defaultValue: TextValue.optional(),
|
|
2008
|
+
defaultValue: TextValue.or(ComputedDefaultValue).optional(),
|
|
1930
2009
|
options: import_v43.default.array(SelectOption).describe("A list of options"),
|
|
1931
2010
|
noOptionsMessage: TranslationConfig.optional().describe(
|
|
1932
2011
|
`
|
|
@@ -1938,16 +2017,22 @@ var Select = BaseField.extend({
|
|
|
1938
2017
|
{ ..., defaultMessage: "'{input}' is not listed among the health facilities." }
|
|
1939
2018
|
`
|
|
1940
2019
|
)
|
|
1941
|
-
}).
|
|
2020
|
+
}).meta({
|
|
2021
|
+
description: "A select input field",
|
|
2022
|
+
id: "Select"
|
|
2023
|
+
});
|
|
1942
2024
|
var SelectDateRangeOption = import_v43.default.object({
|
|
1943
2025
|
value: SelectDateRangeValue.describe("The value of the option"),
|
|
1944
2026
|
label: TranslationConfig.describe("The label of the option")
|
|
1945
2027
|
});
|
|
1946
2028
|
var SelectDateRangeField = BaseField.extend({
|
|
1947
2029
|
type: import_v43.default.literal(FieldType.SELECT_DATE_RANGE),
|
|
1948
|
-
defaultValue: SelectDateRangeValue.optional(),
|
|
2030
|
+
defaultValue: SelectDateRangeValue.or(ComputedDefaultValue).optional(),
|
|
1949
2031
|
options: import_v43.default.array(SelectDateRangeOption).describe("A list of options")
|
|
1950
|
-
}).
|
|
2032
|
+
}).meta({
|
|
2033
|
+
description: "A date range selection field",
|
|
2034
|
+
id: "SelectDateRangeField"
|
|
2035
|
+
});
|
|
1951
2036
|
var NameConfig = import_v43.default.object({
|
|
1952
2037
|
firstname: import_v43.default.object({ required: requiredSchema, label: TranslationConfig.optional() }).optional(),
|
|
1953
2038
|
middlename: import_v43.default.object({ required: requiredSchema, label: TranslationConfig.optional() }).optional(),
|
|
@@ -1959,7 +2044,7 @@ var NameField = BaseField.extend({
|
|
|
1959
2044
|
firstname: SerializedUserField.or(NonEmptyTextValue).optional(),
|
|
1960
2045
|
middlename: SerializedUserField.or(NonEmptyTextValue).optional(),
|
|
1961
2046
|
surname: SerializedUserField.or(NonEmptyTextValue).optional()
|
|
1962
|
-
}).optional(),
|
|
2047
|
+
}).or(ComputedDefaultValue).optional(),
|
|
1963
2048
|
configuration: import_v43.default.object({
|
|
1964
2049
|
name: NameConfig.default({
|
|
1965
2050
|
firstname: { required: true },
|
|
@@ -1978,26 +2063,41 @@ var NameField = BaseField.extend({
|
|
|
1978
2063
|
surname: { required: true }
|
|
1979
2064
|
}
|
|
1980
2065
|
}).optional()
|
|
1981
|
-
}).
|
|
2066
|
+
}).meta({
|
|
2067
|
+
description: "A field for entering a persons name",
|
|
2068
|
+
id: "NameField"
|
|
2069
|
+
});
|
|
1982
2070
|
var PhoneField = BaseField.extend({
|
|
1983
|
-
defaultValue: NonEmptyTextValue.optional(),
|
|
2071
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
|
|
1984
2072
|
type: import_v43.default.literal(FieldType.PHONE)
|
|
1985
|
-
}).
|
|
2073
|
+
}).meta({
|
|
2074
|
+
description: "A field for entering a phone number",
|
|
2075
|
+
id: "PhoneField"
|
|
2076
|
+
});
|
|
1986
2077
|
var IdField = BaseField.extend({
|
|
1987
|
-
defaultValue: NonEmptyTextValue.optional(),
|
|
2078
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
|
|
1988
2079
|
type: import_v43.default.literal(FieldType.ID)
|
|
1989
|
-
}).
|
|
2080
|
+
}).meta({
|
|
2081
|
+
description: "A field for entering an ID",
|
|
2082
|
+
id: "IdField"
|
|
2083
|
+
});
|
|
1990
2084
|
var Checkbox = BaseField.extend({
|
|
1991
2085
|
type: import_v43.default.literal(FieldType.CHECKBOX),
|
|
1992
|
-
defaultValue: CheckboxFieldValue.default(false)
|
|
1993
|
-
}).
|
|
2086
|
+
defaultValue: CheckboxFieldValue.or(ComputedDefaultValue).default(false)
|
|
2087
|
+
}).meta({
|
|
2088
|
+
description: "A boolean checkbox field",
|
|
2089
|
+
id: "Checkbox"
|
|
2090
|
+
});
|
|
1994
2091
|
var Country = BaseField.extend({
|
|
1995
2092
|
type: import_v43.default.literal(FieldType.COUNTRY),
|
|
1996
|
-
defaultValue: NonEmptyTextValue.optional(),
|
|
2093
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
|
|
1997
2094
|
optionOverrides: import_v43.default.array(SelectOption.omit({ label: true })).optional().describe(
|
|
1998
2095
|
"Conditionals for specific countries. Countries not listed are always shown and enabled."
|
|
1999
2096
|
)
|
|
2000
|
-
}).
|
|
2097
|
+
}).meta({
|
|
2098
|
+
description: "A field for selecting a country",
|
|
2099
|
+
id: "Country"
|
|
2100
|
+
});
|
|
2001
2101
|
var AllowedLocations = JurisdictionReference.optional().describe(
|
|
2002
2102
|
"Limits which location options are selectable depending on user jurisdiction and location."
|
|
2003
2103
|
);
|
|
@@ -2006,28 +2106,33 @@ var AdministrativeAreas = import_v43.default.enum([
|
|
|
2006
2106
|
"HEALTH_FACILITY",
|
|
2007
2107
|
"CRVS_OFFICE"
|
|
2008
2108
|
]);
|
|
2009
|
-
var AdministrativeAreaConfiguration = import_v43.default.object({
|
|
2010
|
-
partOf: FieldReference.optional().describe("Parent location"),
|
|
2011
|
-
type: AdministrativeAreas,
|
|
2012
|
-
allowedLocations: AllowedLocations
|
|
2013
|
-
}).describe("Administrative area options");
|
|
2014
2109
|
var AdministrativeAreaField = BaseField.extend({
|
|
2015
2110
|
type: import_v43.default.literal(FieldType.ADMINISTRATIVE_AREA),
|
|
2016
|
-
defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField]).optional(),
|
|
2017
|
-
configuration:
|
|
2018
|
-
|
|
2111
|
+
defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField, ComputedDefaultValue]).optional(),
|
|
2112
|
+
configuration: import_v43.default.object({
|
|
2113
|
+
partOf: FieldReference.optional().describe("Parent location"),
|
|
2114
|
+
type: AdministrativeAreas,
|
|
2115
|
+
allowedLocations: AllowedLocations
|
|
2116
|
+
}).describe("Administrative area options")
|
|
2117
|
+
}).meta({
|
|
2118
|
+
description: "Administrative area input field",
|
|
2119
|
+
id: "AdministrativeAreaField"
|
|
2120
|
+
});
|
|
2019
2121
|
var LocationInput = BaseField.extend({
|
|
2020
2122
|
type: import_v43.default.literal(FieldType.LOCATION),
|
|
2021
|
-
defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField]).optional(),
|
|
2123
|
+
defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField, ComputedDefaultValue]).optional(),
|
|
2022
2124
|
configuration: import_v43.default.object({
|
|
2023
2125
|
locationTypes: import_v43.default.array(import_v43.default.string()).optional().describe("Types of the locations that are available for selection."),
|
|
2024
2126
|
allowedLocations: AllowedLocations
|
|
2025
2127
|
}).optional()
|
|
2026
|
-
}).
|
|
2128
|
+
}).meta({
|
|
2129
|
+
description: "A field for selecting a location",
|
|
2130
|
+
id: "LocationInput"
|
|
2131
|
+
});
|
|
2027
2132
|
var FileUploadWithOptions = BaseField.extend({
|
|
2028
2133
|
type: import_v43.default.literal(FieldType.FILE_WITH_OPTIONS),
|
|
2029
2134
|
options: import_v43.default.array(SelectOption).describe("A list of options"),
|
|
2030
|
-
defaultValue: FileFieldWithOptionValue.optional(),
|
|
2135
|
+
defaultValue: FileFieldWithOptionValue.or(ComputedDefaultValue).optional(),
|
|
2031
2136
|
configuration: import_v43.default.object({
|
|
2032
2137
|
maxFileSize: import_v43.default.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
|
|
2033
2138
|
maxImageSize: import_v43.default.object({
|
|
@@ -2037,15 +2142,18 @@ var FileUploadWithOptions = BaseField.extend({
|
|
|
2037
2142
|
}).default({
|
|
2038
2143
|
maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
|
|
2039
2144
|
})
|
|
2145
|
+
}).meta({
|
|
2146
|
+
description: "A field for uploading files with file type options",
|
|
2147
|
+
id: "FileUploadWithOptions"
|
|
2040
2148
|
});
|
|
2041
2149
|
var Facility = BaseField.extend({
|
|
2042
2150
|
type: import_v43.default.literal(FieldType.FACILITY),
|
|
2043
|
-
defaultValue: NonEmptyTextValue.optional(),
|
|
2151
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
|
|
2044
2152
|
configuration: import_v43.default.object({ allowedLocations: AllowedLocations }).optional()
|
|
2045
2153
|
}).describe("Input field for a facility");
|
|
2046
2154
|
var Office = BaseField.extend({
|
|
2047
2155
|
type: import_v43.default.literal(FieldType.OFFICE),
|
|
2048
|
-
defaultValue: NonEmptyTextValue.optional(),
|
|
2156
|
+
defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
|
|
2049
2157
|
configuration: import_v43.default.object({ allowedLocations: AllowedLocations }).optional()
|
|
2050
2158
|
}).describe("Input field for an office");
|
|
2051
2159
|
var DefaultAddressFieldValue = DomesticAddressFieldValue.extend({
|
|
@@ -2081,8 +2189,11 @@ var Address = BaseField.extend({
|
|
|
2081
2189
|
).optional(),
|
|
2082
2190
|
allowedLocations: AllowedLocations
|
|
2083
2191
|
}).optional(),
|
|
2084
|
-
defaultValue: DefaultAddressFieldValue.optional()
|
|
2085
|
-
}).
|
|
2192
|
+
defaultValue: DefaultAddressFieldValue.or(ComputedDefaultValue).optional()
|
|
2193
|
+
}).meta({
|
|
2194
|
+
description: "Address input field \u2013 a combination of location and text fields",
|
|
2195
|
+
id: "Address"
|
|
2196
|
+
});
|
|
2086
2197
|
var StaticDataEntry = import_v43.default.object({
|
|
2087
2198
|
id: import_v43.default.string().describe("ID for the data entry."),
|
|
2088
2199
|
label: TranslationConfig,
|
|
@@ -2097,7 +2208,10 @@ var DataField = BaseField.extend({
|
|
|
2097
2208
|
subtitle: TranslationConfig.optional(),
|
|
2098
2209
|
data: import_v43.default.array(DataEntry)
|
|
2099
2210
|
})
|
|
2100
|
-
}).
|
|
2211
|
+
}).meta({
|
|
2212
|
+
description: "A field for displaying a table of read-only data",
|
|
2213
|
+
id: "DataField"
|
|
2214
|
+
});
|
|
2101
2215
|
var ButtonSize = import_v43.default.enum(["small", "medium", "large"]);
|
|
2102
2216
|
var ButtonType = import_v43.default.enum([
|
|
2103
2217
|
"primary",
|
|
@@ -2122,13 +2236,19 @@ var ButtonConfiguration = import_v43.default.object({
|
|
|
2122
2236
|
});
|
|
2123
2237
|
var ButtonField = BaseField.extend({
|
|
2124
2238
|
type: import_v43.default.literal(FieldType.BUTTON),
|
|
2125
|
-
defaultValue: ButtonFieldValue.optional(),
|
|
2239
|
+
defaultValue: ButtonFieldValue.or(ComputedDefaultValue).optional(),
|
|
2126
2240
|
configuration: ButtonConfiguration
|
|
2127
|
-
}).
|
|
2241
|
+
}).meta({
|
|
2242
|
+
description: "A generic button that can be used to trigger an action",
|
|
2243
|
+
id: "ButtonField"
|
|
2244
|
+
});
|
|
2128
2245
|
var FieldGroup = BaseField.extend({
|
|
2129
2246
|
type: import_v43.default.literal(FieldType.FIELD_GROUP),
|
|
2130
2247
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
2131
2248
|
fields: import_v43.default.lazy(() => import_v43.default.array(FieldConfig))
|
|
2249
|
+
}).meta({
|
|
2250
|
+
description: "A group of fields that are displayed together",
|
|
2251
|
+
id: "FieldGroup"
|
|
2132
2252
|
});
|
|
2133
2253
|
var AlphaPrintButton = BaseField.extend({
|
|
2134
2254
|
type: import_v43.default.literal(FieldType.ALPHA_PRINT_BUTTON),
|
|
@@ -2138,10 +2258,13 @@ var AlphaPrintButton = BaseField.extend({
|
|
|
2138
2258
|
"Label for the print button"
|
|
2139
2259
|
)
|
|
2140
2260
|
})
|
|
2141
|
-
}).
|
|
2261
|
+
}).meta({
|
|
2262
|
+
description: "An experimental print button field for printing certificates during the declaration process",
|
|
2263
|
+
id: "AlphaPrintButton"
|
|
2264
|
+
});
|
|
2142
2265
|
var HttpField = BaseField.extend({
|
|
2143
2266
|
type: import_v43.default.literal(FieldType.HTTP),
|
|
2144
|
-
defaultValue: HttpFieldValue.optional(),
|
|
2267
|
+
defaultValue: HttpFieldValue.or(ComputedDefaultValue).optional(),
|
|
2145
2268
|
configuration: import_v43.default.object({
|
|
2146
2269
|
trigger: FieldReference.optional().describe(
|
|
2147
2270
|
"Reference to the field that triggers the HTTP request when its value changes. If not provided, the HTTP request is triggered once on component mount."
|
|
@@ -2154,20 +2277,30 @@ var HttpField = BaseField.extend({
|
|
|
2154
2277
|
params: import_v43.default.record(import_v43.default.string(), import_v43.default.union([import_v43.default.string(), FieldReference])).optional(),
|
|
2155
2278
|
timeout: import_v43.default.number().default(15e3).describe("Request timeout in milliseconds")
|
|
2156
2279
|
})
|
|
2157
|
-
}).
|
|
2280
|
+
}).meta({
|
|
2281
|
+
description: "Makes a background HTTP request to an external service and stores the response so other fields can use it. Has no visible UI \u2014 pair with LOADER to show request status.",
|
|
2282
|
+
id: "HttpField"
|
|
2283
|
+
});
|
|
2158
2284
|
var AutocompleteField = BaseField.extend({
|
|
2159
2285
|
type: import_v43.default.literal(FieldType.AUTOCOMPLETE),
|
|
2160
2286
|
configuration: import_v43.default.object({
|
|
2161
|
-
url: import_v43.default.string().describe(
|
|
2287
|
+
url: import_v43.default.string().describe(
|
|
2288
|
+
"URL to fetch autocomplete suggestions from. This should be a country config server endpoint."
|
|
2289
|
+
).optional(),
|
|
2162
2290
|
method: import_v43.default.enum(["GET", "POST"]).default("GET").optional(),
|
|
2163
2291
|
defaultOptions: import_v43.default.array(
|
|
2164
2292
|
import_v43.default.object({
|
|
2165
2293
|
label: import_v43.default.string(),
|
|
2166
2294
|
value: import_v43.default.string()
|
|
2167
2295
|
})
|
|
2168
|
-
).optional()
|
|
2296
|
+
).optional().describe(
|
|
2297
|
+
"Manual entry is supported through configuration, allowing users to provide values not currently represented in the dataset."
|
|
2298
|
+
)
|
|
2169
2299
|
})
|
|
2170
|
-
}).
|
|
2300
|
+
}).meta({
|
|
2301
|
+
description: "Generic autocomplete component designed for use with large dictionary-based datasets. The component supports dynamic retrieval of options from configurable data sources and is intended for datasets that may contain tens or hundreds of thousands of records.",
|
|
2302
|
+
id: "AutocompleteField"
|
|
2303
|
+
});
|
|
2171
2304
|
var SearchField = HttpField.extend({
|
|
2172
2305
|
type: import_v43.default.literal(FieldType.SEARCH),
|
|
2173
2306
|
configuration: SearchQuery.pick({
|
|
@@ -2200,6 +2333,9 @@ var SearchField = HttpField.extend({
|
|
|
2200
2333
|
ok: TranslationConfig.optional()
|
|
2201
2334
|
}).optional()
|
|
2202
2335
|
})
|
|
2336
|
+
}).meta({
|
|
2337
|
+
description: "A search input field",
|
|
2338
|
+
id: "SearchField"
|
|
2203
2339
|
});
|
|
2204
2340
|
var LinkButtonField = BaseField.extend({
|
|
2205
2341
|
type: import_v43.default.literal(FieldType.LINK_BUTTON),
|
|
@@ -2208,28 +2344,35 @@ var LinkButtonField = BaseField.extend({
|
|
|
2208
2344
|
text: TranslationConfig.describe("Text to display on the button"),
|
|
2209
2345
|
icon: import_v43.default.string().optional().describe("Icon for the button. You can find icons from OpenCRVS UI-Kit.")
|
|
2210
2346
|
})
|
|
2211
|
-
}).
|
|
2347
|
+
}).meta({
|
|
2348
|
+
description: "A button that opens a URL link",
|
|
2349
|
+
id: "LinkButtonField"
|
|
2350
|
+
});
|
|
2212
2351
|
var VerificationStatus = BaseField.extend({
|
|
2213
2352
|
type: import_v43.default.literal(FieldType.VERIFICATION_STATUS),
|
|
2214
|
-
defaultValue: VerificationStatusValue.optional(),
|
|
2353
|
+
defaultValue: VerificationStatusValue.or(ComputedDefaultValue).optional(),
|
|
2215
2354
|
configuration: import_v43.default.object({
|
|
2216
2355
|
status: TranslationConfig.describe("Text to display on the status pill."),
|
|
2217
2356
|
description: TranslationConfig.describe(
|
|
2218
2357
|
"Explaining text on the banner in form."
|
|
2219
2358
|
)
|
|
2220
2359
|
})
|
|
2360
|
+
}).meta({
|
|
2361
|
+
description: "Displays a verification state (e.g. ID verified / pending). Often paired with ID_READER \u2014 it can read its value off an ID_READER rather than holding its own.",
|
|
2362
|
+
id: "VerificationStatus"
|
|
2221
2363
|
});
|
|
2222
2364
|
var QueryParamReaderField = BaseField.extend({
|
|
2223
2365
|
type: import_v43.default.literal(FieldType.QUERY_PARAM_READER),
|
|
2224
2366
|
configuration: import_v43.default.object({
|
|
2225
2367
|
pickParams: import_v43.default.array(import_v43.default.string()).describe("List of query parameters to read from the URL")
|
|
2226
2368
|
})
|
|
2227
|
-
}).
|
|
2228
|
-
"A field that maps URL query params into form values and clears them afterward"
|
|
2229
|
-
|
|
2369
|
+
}).meta({
|
|
2370
|
+
description: "A field that maps URL query params into form values and clears them afterward",
|
|
2371
|
+
id: "QueryParamReaderField"
|
|
2372
|
+
});
|
|
2230
2373
|
var QrReaderField = BaseField.extend({
|
|
2231
2374
|
type: import_v43.default.literal(FieldType.QR_READER),
|
|
2232
|
-
defaultValue: QrReaderFieldValue.optional(),
|
|
2375
|
+
defaultValue: QrReaderFieldValue.or(ComputedDefaultValue).optional(),
|
|
2233
2376
|
configuration: import_v43.default.object({
|
|
2234
2377
|
validator: import_v43.default.any().meta({
|
|
2235
2378
|
description: "JSON Schema to validate the scanned QR code data against before populating the form fields.",
|
|
@@ -2237,21 +2380,27 @@ var QrReaderField = BaseField.extend({
|
|
|
2237
2380
|
})
|
|
2238
2381
|
}).optional()
|
|
2239
2382
|
}).meta({
|
|
2240
|
-
description: "
|
|
2383
|
+
description: "QR code reader field, including optional JSON Schema validator.",
|
|
2241
2384
|
id: "QrReaderField"
|
|
2242
2385
|
});
|
|
2243
2386
|
var IdReaderField = BaseField.extend({
|
|
2244
2387
|
type: import_v43.default.literal(FieldType.ID_READER),
|
|
2245
|
-
defaultValue: IdReaderFieldValue.optional(),
|
|
2388
|
+
defaultValue: IdReaderFieldValue.or(ComputedDefaultValue).optional(),
|
|
2246
2389
|
methods: import_v43.default.array(
|
|
2247
2390
|
import_v43.default.union([QrReaderField, LinkButtonField]).describe("Methods for reading an ID")
|
|
2248
2391
|
)
|
|
2392
|
+
}).meta({
|
|
2393
|
+
description: "A wrapper around nested form fields, specifically QR_READER and LINK_BUTTON. It can hold the QR_READERs value.",
|
|
2394
|
+
id: "IdReaderField"
|
|
2249
2395
|
});
|
|
2250
2396
|
var CustomField = BaseField.extend({
|
|
2251
2397
|
type: import_v43.default.literal(FieldType._EXPERIMENTAL_CUSTOM),
|
|
2252
2398
|
defaultValue: CustomFieldValue.optional(),
|
|
2253
2399
|
src: import_v43.default.string().describe("Module source path for the custom field component"),
|
|
2254
2400
|
configuration: import_v43.default.unknown().optional()
|
|
2401
|
+
}).meta({
|
|
2402
|
+
description: "An expiremental custom field that is defined by a module source path",
|
|
2403
|
+
id: "CustomField"
|
|
2255
2404
|
});
|
|
2256
2405
|
var FieldStyleVariant = import_v43.default.enum(["default", "highlighted"]);
|
|
2257
2406
|
var LoaderField = BaseField.extend({
|
|
@@ -2261,22 +2410,25 @@ var LoaderField = BaseField.extend({
|
|
|
2261
2410
|
configuration: import_v43.default.object({
|
|
2262
2411
|
text: TranslationConfig.describe("Display text above the loading spinner")
|
|
2263
2412
|
})
|
|
2264
|
-
}).
|
|
2265
|
-
"A non-interactive field that indicates an in progress operation in form"
|
|
2266
|
-
|
|
2413
|
+
}).meta({
|
|
2414
|
+
description: "A non-interactive field that indicates an in progress operation in form",
|
|
2415
|
+
id: "LoaderField"
|
|
2416
|
+
});
|
|
2267
2417
|
var HiddenField = BaseField.extend({
|
|
2268
2418
|
type: import_v43.default.literal(FieldType.ALPHA_HIDDEN),
|
|
2269
2419
|
required: import_v43.default.boolean().default(false).optional(),
|
|
2270
2420
|
defaultValue: TextValue.optional()
|
|
2271
|
-
}).
|
|
2272
|
-
"A non-interactive, hidden field that only hold a value in the form"
|
|
2273
|
-
|
|
2421
|
+
}).meta({
|
|
2422
|
+
description: "A non-interactive, hidden field that only hold a value in the form",
|
|
2423
|
+
id: "HiddenField"
|
|
2424
|
+
});
|
|
2274
2425
|
var UserRoleField = BaseField.extend({
|
|
2275
2426
|
type: import_v43.default.literal(FieldType.USER_ROLE),
|
|
2276
2427
|
defaultValue: TextValue.optional()
|
|
2277
|
-
}).
|
|
2278
|
-
"A select dropdown that is automatically populated with available user roles"
|
|
2279
|
-
|
|
2428
|
+
}).meta({
|
|
2429
|
+
description: "A select dropdown that is automatically populated with available user roles",
|
|
2430
|
+
id: "UserRoleField"
|
|
2431
|
+
});
|
|
2280
2432
|
var FieldConfig = import_v43.default.discriminatedUnion("type", [
|
|
2281
2433
|
FieldGroup,
|
|
2282
2434
|
Address,
|
|
@@ -2376,15 +2528,18 @@ var VerificationPageConfig = FormPageConfig.extend({
|
|
|
2376
2528
|
actions: VerificationActionConfig
|
|
2377
2529
|
});
|
|
2378
2530
|
var PageConfig = z21.discriminatedUnion("type", [FormPageConfig, VerificationPageConfig]).meta({
|
|
2379
|
-
|
|
2380
|
-
|
|
2531
|
+
id: "PageConfig",
|
|
2532
|
+
description: "Configuration for a single page in a form. Either a form page with fields and a continue button, or a verification page with verify/cancel options."
|
|
2381
2533
|
});
|
|
2382
2534
|
|
|
2383
2535
|
// ../commons/src/events/FormConfig.ts
|
|
2384
2536
|
var DeclarationFormConfig = z22.object({
|
|
2385
2537
|
label: TranslationConfig.describe("Human readable description of the form"),
|
|
2386
2538
|
pages: z22.array(FormPageConfig)
|
|
2387
|
-
}).
|
|
2539
|
+
}).meta({
|
|
2540
|
+
id: "DeclarationFormConfig",
|
|
2541
|
+
description: "Configuration of the declaration form."
|
|
2542
|
+
});
|
|
2388
2543
|
var ActionFormConfig = z22.object({
|
|
2389
2544
|
label: TranslationConfig.describe("Human readable description of the form"),
|
|
2390
2545
|
pages: z22.array(PageConfig)
|
|
@@ -2484,6 +2639,9 @@ var DeduplicationConfig = z23.object({
|
|
|
2484
2639
|
id: z23.string(),
|
|
2485
2640
|
label: TranslationConfig,
|
|
2486
2641
|
query: Clause
|
|
2642
|
+
}).meta({
|
|
2643
|
+
id: "DeduplicationConfig",
|
|
2644
|
+
description: "Configuration for duplicate detection on a declare or register action. The query is built from fuzzy / strict / date-range matchers combined with and/or/not."
|
|
2487
2645
|
});
|
|
2488
2646
|
|
|
2489
2647
|
// ../commons/src/events/ActionConfig.ts
|
|
@@ -2521,6 +2679,11 @@ var ReadActionConfig = ActionConfigBase.extend(
|
|
|
2521
2679
|
conditionals: z24.never().optional().describe("Read-action can not be disabled or hidden with conditionals.")
|
|
2522
2680
|
}).shape
|
|
2523
2681
|
);
|
|
2682
|
+
var NotifyConfig = ActionConfigBase.extend(
|
|
2683
|
+
z24.object({
|
|
2684
|
+
type: z24.literal(ActionType.NOTIFY)
|
|
2685
|
+
}).shape
|
|
2686
|
+
);
|
|
2524
2687
|
var DeclareConfig = DeclarationActionBase.extend(
|
|
2525
2688
|
z24.object({
|
|
2526
2689
|
type: z24.literal(ActionType.DECLARE),
|
|
@@ -2601,17 +2764,46 @@ var ActionConfig = z24.discriminatedUnion("type", [
|
|
|
2601
2764
|
* OpenAPI references are defined here so our generated OpenAPI spec knows to reuse the models
|
|
2602
2765
|
* and treat them as "models" instead of duplicating the data structure in each endpoint.
|
|
2603
2766
|
*/
|
|
2604
|
-
ReadActionConfig.meta({
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2767
|
+
ReadActionConfig.meta({
|
|
2768
|
+
id: "ReadActionConfig",
|
|
2769
|
+
description: "Configuration for the read action \u2014 defines the record-tab content displayed on the event overview page."
|
|
2770
|
+
}),
|
|
2771
|
+
NotifyConfig.meta({
|
|
2772
|
+
id: "NotifyActionConfig",
|
|
2773
|
+
description: "Configuration for the notify action. When present, NOTIFY uses this config independently from DECLARE. When absent, NOTIFY falls back to the DeclareActionConfig."
|
|
2774
|
+
}),
|
|
2775
|
+
DeclareConfig.meta({
|
|
2776
|
+
id: "DeclareActionConfig",
|
|
2777
|
+
description: "Configuration for the declare action. Includes review-page fields. NOTIFY falls back to this config when no dedicated NotifyActionConfig is provided."
|
|
2778
|
+
}),
|
|
2779
|
+
RejectConfig.meta({
|
|
2780
|
+
id: "RejectActionConfig",
|
|
2781
|
+
description: "Configuration for rejecting a record before registration."
|
|
2782
|
+
}),
|
|
2783
|
+
RegisterConfig.meta({
|
|
2784
|
+
id: "RegisterActionConfig",
|
|
2785
|
+
description: "Configuration for registering a record."
|
|
2786
|
+
}),
|
|
2608
2787
|
PrintCertificateActionConfig.meta({
|
|
2609
|
-
id: "PrintCertificateActionConfig"
|
|
2788
|
+
id: "PrintCertificateActionConfig",
|
|
2789
|
+
description: "Configuration for printing a certificate of a registered record."
|
|
2790
|
+
}),
|
|
2791
|
+
RequestCorrectionConfig.meta({
|
|
2792
|
+
id: "RequestCorrectionActionConfig",
|
|
2793
|
+
description: "Configuration for requesting a correction on a registered record."
|
|
2794
|
+
}),
|
|
2795
|
+
EditActionConfig.meta({
|
|
2796
|
+
id: "EditActionConfig",
|
|
2797
|
+
description: "Configuration for editing a record before registration."
|
|
2610
2798
|
}),
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2799
|
+
ArchiveConfig.meta({
|
|
2800
|
+
id: "ArchiveActionConfig",
|
|
2801
|
+
description: "Configuration for archiving a record."
|
|
2802
|
+
}),
|
|
2803
|
+
CustomActionConfig.meta({
|
|
2804
|
+
id: "CustomActionConfig",
|
|
2805
|
+
description: "Configuration for a country-defined custom action. An event may include any number of these."
|
|
2806
|
+
})
|
|
2615
2807
|
]).describe(
|
|
2616
2808
|
"Configuration of an action available for an event. Data collected depends on the action type and is accessible through the annotation property in ActionDocument."
|
|
2617
2809
|
).meta({ id: "ActionConfig" });
|
|
@@ -2687,7 +2879,10 @@ var Field = BaseField2.extend({
|
|
|
2687
2879
|
}).describe("Custom field defined for the summary view.");
|
|
2688
2880
|
var SummaryConfig = z27.object({
|
|
2689
2881
|
fields: z27.array(z27.union([Field, ReferenceField])).describe("Fields displayed in the event summary view.")
|
|
2690
|
-
}).
|
|
2882
|
+
}).meta({
|
|
2883
|
+
id: "SummaryConfig",
|
|
2884
|
+
description: "Configuration of the event overview page. Defines which declaration fields appear in the record summary, optionally with custom labels, empty-value messages, and templated values."
|
|
2885
|
+
});
|
|
2691
2886
|
|
|
2692
2887
|
// ../commons/src/events/AdvancedSearchConfig.ts
|
|
2693
2888
|
var z28 = __toESM(require("zod/v4"));
|
|
@@ -2758,6 +2953,9 @@ var BaseField3 = z28.object({
|
|
|
2758
2953
|
),
|
|
2759
2954
|
validations: z28.array(ValidationConfig).optional().describe(
|
|
2760
2955
|
`Option for overriding the field validations specifically for advanced search form.`
|
|
2956
|
+
),
|
|
2957
|
+
allowedLocations: JurisdictionReference.optional().describe(
|
|
2958
|
+
`Override the allowedLocations for a location field in advanced search. Use this when the declaration form's allowedLocations references a scope (e.g. record.create) that search-only users don't have \u2014 specify record.search scope instead.`
|
|
2761
2959
|
)
|
|
2762
2960
|
});
|
|
2763
2961
|
var SearchQueryParams = z28.object({
|
|
@@ -2811,6 +3009,9 @@ var AdvancedSearchField = z28.discriminatedUnion("fieldType", [FieldConfigSchema
|
|
|
2811
3009
|
var AdvancedSearchConfig = z28.object({
|
|
2812
3010
|
title: TranslationConfig.describe("Advanced search tab title"),
|
|
2813
3011
|
fields: z28.array(AdvancedSearchField).describe("Advanced search fields within the tab.")
|
|
3012
|
+
}).meta({
|
|
3013
|
+
id: "AdvancedSearchConfig",
|
|
3014
|
+
description: "Configuration of one advanced search tab. Each tab has a title and a list of searchable fields \u2014 either declaration fields (via `field()`) or event metadata (via `event()`)."
|
|
2814
3015
|
});
|
|
2815
3016
|
|
|
2816
3017
|
// ../commons/src/events/utils.ts
|
|
@@ -2861,7 +3062,37 @@ function resolveDataPath(rootData, dataPath, instancePath) {
|
|
|
2861
3062
|
}
|
|
2862
3063
|
return current;
|
|
2863
3064
|
}
|
|
3065
|
+
function todayISO() {
|
|
3066
|
+
return (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" });
|
|
3067
|
+
}
|
|
3068
|
+
var compiledFunctionCache = /* @__PURE__ */ new Map();
|
|
3069
|
+
function compileClientFunction(code) {
|
|
3070
|
+
let fn = compiledFunctionCache.get(code);
|
|
3071
|
+
if (!fn) {
|
|
3072
|
+
fn = new Function(`return (${code})`)();
|
|
3073
|
+
compiledFunctionCache.set(code, fn);
|
|
3074
|
+
}
|
|
3075
|
+
return fn;
|
|
3076
|
+
}
|
|
2864
3077
|
(0, import_ajv_formats.default)(ajv);
|
|
3078
|
+
function buildClientFunctionContext(input) {
|
|
3079
|
+
return {
|
|
3080
|
+
$form: input.form,
|
|
3081
|
+
$now: todayISO(),
|
|
3082
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
3083
|
+
$online: isOnline(),
|
|
3084
|
+
$user: input.validatorContext?.user,
|
|
3085
|
+
$event: input.validatorContext?.event,
|
|
3086
|
+
$leafAdminStructureLocationIds: input.validatorContext?.leafAdminStructureLocationIds ?? [],
|
|
3087
|
+
user: input.systemVariables?.user,
|
|
3088
|
+
$window: input.systemVariables?.$window,
|
|
3089
|
+
locations: input.locations,
|
|
3090
|
+
adminLevelIds: input.adminLevelIds
|
|
3091
|
+
};
|
|
3092
|
+
}
|
|
3093
|
+
function runClientFunction(code, data, context) {
|
|
3094
|
+
return compileClientFunction(code)(data, context);
|
|
3095
|
+
}
|
|
2865
3096
|
ajv.addKeyword({
|
|
2866
3097
|
keyword: "daysFromDate",
|
|
2867
3098
|
type: "string",
|
|
@@ -2906,12 +3137,35 @@ ajv.addKeyword({
|
|
|
2906
3137
|
$data: true,
|
|
2907
3138
|
errors: true,
|
|
2908
3139
|
// @ts-ignore -- Force type. We will move this away from AJV next. Parsing the array will take seconds and is only called by core.
|
|
2909
|
-
validate(
|
|
3140
|
+
validate(_schema, data, _2, dataContext) {
|
|
2910
3141
|
const locationIdInput = data;
|
|
2911
3142
|
const locations = dataContext?.rootData.$leafAdminStructureLocationIds ?? [];
|
|
2912
3143
|
return locations.some((location) => location.id === locationIdInput);
|
|
2913
3144
|
}
|
|
2914
3145
|
});
|
|
3146
|
+
ajv.addKeyword({
|
|
3147
|
+
keyword: "customClientValidator",
|
|
3148
|
+
schemaType: "object",
|
|
3149
|
+
errors: true,
|
|
3150
|
+
// @ts-expect-error -- AJV's public types don't expose `rootData`. All
|
|
3151
|
+
// `validate()` callers build root data via `buildClientFunctionContext`,
|
|
3152
|
+
// so the cast holds.
|
|
3153
|
+
validate(schema, data, _2, dataContext) {
|
|
3154
|
+
return Boolean(
|
|
3155
|
+
runClientFunction(
|
|
3156
|
+
schema.code,
|
|
3157
|
+
data,
|
|
3158
|
+
dataContext?.rootData ?? buildClientFunctionContext({ form: {} })
|
|
3159
|
+
)
|
|
3160
|
+
);
|
|
3161
|
+
}
|
|
3162
|
+
});
|
|
3163
|
+
function isOnline() {
|
|
3164
|
+
if (typeof window !== "undefined" && typeof navigator !== "undefined") {
|
|
3165
|
+
return navigator.onLine;
|
|
3166
|
+
}
|
|
3167
|
+
return true;
|
|
3168
|
+
}
|
|
2915
3169
|
|
|
2916
3170
|
// ../commons/src/utils.ts
|
|
2917
3171
|
var z32 = __toESM(require("zod/v4"));
|
|
@@ -2954,7 +3208,7 @@ var getActionAnnotationFields = (actionConfig) => {
|
|
|
2954
3208
|
if (actionConfig.type === ActionType.CUSTOM) {
|
|
2955
3209
|
return actionConfig.form;
|
|
2956
3210
|
}
|
|
2957
|
-
if ("review" in actionConfig) {
|
|
3211
|
+
if ("review" in actionConfig && actionConfig.review != null) {
|
|
2958
3212
|
return actionConfig.review.fields;
|
|
2959
3213
|
}
|
|
2960
3214
|
return [];
|
|
@@ -3530,7 +3784,54 @@ function createFieldConditionals(fieldId) {
|
|
|
3530
3784
|
}
|
|
3531
3785
|
},
|
|
3532
3786
|
required: [fieldId]
|
|
3533
|
-
})
|
|
3787
|
+
}),
|
|
3788
|
+
/**
|
|
3789
|
+
* Custom client-side validator. The provided function is serialised and executed
|
|
3790
|
+
* just-in-time on the client only. External references (e.g. lodash) are not
|
|
3791
|
+
* available inside the function body — all logic must be self-contained.
|
|
3792
|
+
*
|
|
3793
|
+
* @example
|
|
3794
|
+
* field('nid').customClientValidator((value) => {
|
|
3795
|
+
* // LUHN check — all logic must be inline
|
|
3796
|
+
* const digits = String(value).split('').map(Number)
|
|
3797
|
+
* // ...
|
|
3798
|
+
* return isValid
|
|
3799
|
+
* })
|
|
3800
|
+
*/
|
|
3801
|
+
customClientValidator(validationFn) {
|
|
3802
|
+
const code = validationFn.toString();
|
|
3803
|
+
return defineFormConditional({
|
|
3804
|
+
type: "object",
|
|
3805
|
+
properties: wrapToPath(
|
|
3806
|
+
{ [fieldId]: { customClientValidator: { code } } },
|
|
3807
|
+
this.$$subfield
|
|
3808
|
+
),
|
|
3809
|
+
required: [fieldId]
|
|
3810
|
+
});
|
|
3811
|
+
},
|
|
3812
|
+
/**
|
|
3813
|
+
* Custom client-side evaluation. Returns a {@link FieldReference} descriptor
|
|
3814
|
+
* that can be used as the `value` property or a DATA component entry.
|
|
3815
|
+
* The function receives the referenced field's value as the first argument and
|
|
3816
|
+
* the full form context as the second; its return value replaces the field reference.
|
|
3817
|
+
* The function is serialised and executed just-in-time on the client only.
|
|
3818
|
+
* External references (e.g. lodash) are not available inside the function body.
|
|
3819
|
+
*
|
|
3820
|
+
* For computing a default value without referencing a specific field, use
|
|
3821
|
+
* `evaluate(fn)` in the `defaultValue` property instead.
|
|
3822
|
+
*
|
|
3823
|
+
* @example
|
|
3824
|
+
* field('a').customClientEvaluation((aValue, ctx) =>
|
|
3825
|
+
* Number(aValue) + Number(ctx.$form.b)
|
|
3826
|
+
* )
|
|
3827
|
+
*/
|
|
3828
|
+
customClientEvaluation(computationFn) {
|
|
3829
|
+
return {
|
|
3830
|
+
$$code: computationFn.toString(),
|
|
3831
|
+
$$field: fieldId,
|
|
3832
|
+
$$subfield: this.$$subfield
|
|
3833
|
+
};
|
|
3834
|
+
}
|
|
3534
3835
|
};
|
|
3535
3836
|
}
|
|
3536
3837
|
|
|
@@ -3703,8 +4004,9 @@ var EventConfig = _EventConfigBase.superRefine((event2, ctx) => {
|
|
|
3703
4004
|
validateActionFlags(event2, ctx);
|
|
3704
4005
|
validateActionOrder(event2, ctx);
|
|
3705
4006
|
}).meta({
|
|
3706
|
-
id: "EventConfig"
|
|
3707
|
-
|
|
4007
|
+
id: "EventConfig",
|
|
4008
|
+
description: "Configuration defining an event type registered in OpenCRVS (for example birth or death)."
|
|
4009
|
+
});
|
|
3708
4010
|
|
|
3709
4011
|
// ../commons/src/events/EventConfigInput.ts
|
|
3710
4012
|
var defineDeclarationForm = (form) => DeclarationFormConfig.parse(form);
|
|
@@ -3926,6 +4228,9 @@ var WorkqueueColumnValue = z34.object({
|
|
|
3926
4228
|
var WorkqueueColumn = z34.object({
|
|
3927
4229
|
label: TranslationConfig,
|
|
3928
4230
|
value: WorkqueueColumnValue
|
|
4231
|
+
}).meta({
|
|
4232
|
+
id: "WorkqueueColumn",
|
|
4233
|
+
description: "Configuration for a single workqueue column. The value references an event metadata key (e.g. `dateOfEvent`, `status`, `trackingId`)."
|
|
3929
4234
|
});
|
|
3930
4235
|
function defineWorkqueuesColumns(workqueueColumns) {
|
|
3931
4236
|
return workqueueColumns.map(
|
|
@@ -4131,8 +4436,8 @@ var WorkqueueConfigWithoutQuery = WorkqueueConfig.omit({
|
|
|
4131
4436
|
var WorkqueueConfigInput = WorkqueueConfig.extend({
|
|
4132
4437
|
query: CountryConfigQueryInputType
|
|
4133
4438
|
}).meta({
|
|
4134
|
-
|
|
4135
|
-
|
|
4439
|
+
id: "WorkqueueConfig",
|
|
4440
|
+
description: "Configuration for a single workqueue. Defines the filter applied to the event index, the quick-action button, the columns shown on each row, and the message rendered when the queue is empty."
|
|
4136
4441
|
});
|
|
4137
4442
|
var WorkqueueCountInput = z37.array(
|
|
4138
4443
|
z37.object({ slug: z37.string(), query: QueryType })
|
|
@@ -4174,7 +4479,9 @@ var BaseActionInput = z38.object({
|
|
|
4174
4479
|
keepAssignment: z38.boolean().optional(),
|
|
4175
4480
|
keepAssignmentIfAccepted: z38.boolean().optional(),
|
|
4176
4481
|
keepAssignmentIfRejected: z38.boolean().optional(),
|
|
4177
|
-
waitFor: z38.boolean().
|
|
4482
|
+
waitFor: z38.boolean().default(true).describe(
|
|
4483
|
+
"Whether action waits for the indexing before returning. Defaults to true. Setting this to to false completes faster but might lead to stale data in the client if the client tries to read the event immediately after performing the action. Use with care."
|
|
4484
|
+
),
|
|
4178
4485
|
// For normal users, the createdAtLocation is resolved on the backend from the user's primaryOfficeId.
|
|
4179
4486
|
// @TODO: createdAtLocation should be limited to actions that system users can perform. For normal users, it should not be part of the base action.
|
|
4180
4487
|
createdAtLocation: UUID.nullish().describe(
|
|
@@ -4292,7 +4599,8 @@ var RejectCorrectionActionInput = BaseActionInput.extend(
|
|
|
4292
4599
|
var ApproveCorrectionActionInput = BaseActionInput.extend(
|
|
4293
4600
|
z38.object({
|
|
4294
4601
|
requestId: z38.string(),
|
|
4295
|
-
type: z38.literal(ActionType.APPROVE_CORRECTION).default(ActionType.APPROVE_CORRECTION)
|
|
4602
|
+
type: z38.literal(ActionType.APPROVE_CORRECTION).default(ActionType.APPROVE_CORRECTION),
|
|
4603
|
+
content: z38.object({ immediateCorrection: z38.boolean().optional() }).optional()
|
|
4296
4604
|
}).shape
|
|
4297
4605
|
);
|
|
4298
4606
|
var ReadActionInput = BaseActionInput.extend(
|
|
@@ -4354,7 +4662,7 @@ var Draft = z39.object({
|
|
|
4354
4662
|
}).describe(
|
|
4355
4663
|
"A temporary storage for an action. Stored with details of the event, creator and creation time."
|
|
4356
4664
|
);
|
|
4357
|
-
var DraftInput = BaseActionInput.extend({
|
|
4665
|
+
var DraftInput = BaseActionInput.omit({ waitFor: true }).extend({
|
|
4358
4666
|
type: ActionTypes.exclude([ActionTypes.enum.DELETE]),
|
|
4359
4667
|
status: z39.enum([
|
|
4360
4668
|
ActionStatus.Requested,
|
|
@@ -4404,12 +4712,53 @@ var updateActions = ActionTypes.extract([
|
|
|
4404
4712
|
ActionType.ARCHIVE,
|
|
4405
4713
|
ActionType.PRINT_CERTIFICATE,
|
|
4406
4714
|
ActionType.REQUEST_CORRECTION,
|
|
4715
|
+
ActionType.APPROVE_CORRECTION,
|
|
4716
|
+
ActionType.REJECT_CORRECTION,
|
|
4407
4717
|
ActionType.CUSTOM
|
|
4408
4718
|
]);
|
|
4409
4719
|
|
|
4410
4720
|
// ../commons/src/events/state/flags.ts
|
|
4411
4721
|
var import_lodash3 = require("lodash");
|
|
4412
4722
|
var import_date_fns3 = require("date-fns");
|
|
4723
|
+
var INHERENT_FLAG_RULES = [
|
|
4724
|
+
{
|
|
4725
|
+
flag: InherentFlags.CORRECTION_REQUESTED,
|
|
4726
|
+
setOn: [ActionType.REQUEST_CORRECTION],
|
|
4727
|
+
resetOn: [ActionType.APPROVE_CORRECTION, ActionType.REJECT_CORRECTION]
|
|
4728
|
+
},
|
|
4729
|
+
{
|
|
4730
|
+
// INCOMPLETE mirrors the NOTIFIED status: set by NOTIFY, cleared by any
|
|
4731
|
+
// other status-changing action (see getStatusFromActions).
|
|
4732
|
+
flag: InherentFlags.INCOMPLETE,
|
|
4733
|
+
setOn: [ActionType.NOTIFY],
|
|
4734
|
+
resetOn: [
|
|
4735
|
+
ActionType.CREATE,
|
|
4736
|
+
ActionType.DECLARE,
|
|
4737
|
+
ActionType.REGISTER,
|
|
4738
|
+
ActionType.ARCHIVE
|
|
4739
|
+
]
|
|
4740
|
+
},
|
|
4741
|
+
{
|
|
4742
|
+
flag: InherentFlags.REJECTED,
|
|
4743
|
+
setOn: [ActionType.REJECT],
|
|
4744
|
+
resetOn: [
|
|
4745
|
+
ActionType.NOTIFY,
|
|
4746
|
+
ActionType.DECLARE,
|
|
4747
|
+
ActionType.EDIT,
|
|
4748
|
+
ActionType.REGISTER
|
|
4749
|
+
]
|
|
4750
|
+
},
|
|
4751
|
+
{
|
|
4752
|
+
flag: InherentFlags.POTENTIAL_DUPLICATE,
|
|
4753
|
+
setOn: [ActionType.DUPLICATE_DETECTED],
|
|
4754
|
+
resetOn: [ActionType.MARK_AS_DUPLICATE, ActionType.MARK_AS_NOT_DUPLICATE]
|
|
4755
|
+
},
|
|
4756
|
+
{
|
|
4757
|
+
flag: InherentFlags.EDIT_IN_PROGRESS,
|
|
4758
|
+
setOn: [ActionType.EDIT],
|
|
4759
|
+
resetOnAnyOtherAction: true
|
|
4760
|
+
}
|
|
4761
|
+
];
|
|
4413
4762
|
|
|
4414
4763
|
// ../commons/src/events/defineConfig.ts
|
|
4415
4764
|
var IGNORED_EVENT_TYPES = [
|
|
@@ -5155,6 +5504,11 @@ var TENNIS_CLUB_DECLARATION_REVIEW = {
|
|
|
5155
5504
|
id: "signature.upload.modal.title",
|
|
5156
5505
|
defaultMessage: "Draw signature",
|
|
5157
5506
|
description: "Title for the modal to draw signature"
|
|
5507
|
+
},
|
|
5508
|
+
// Zod applies the schema default at parse time, but this fixture bypasses
|
|
5509
|
+
// parsing — GeneratedInputField accesses configuration.maxFileSize directly.
|
|
5510
|
+
configuration: {
|
|
5511
|
+
maxFileSize: 5 * 1024 * 1024
|
|
5158
5512
|
}
|
|
5159
5513
|
}
|
|
5160
5514
|
]
|
|
@@ -5711,6 +6065,20 @@ var tennisClubMembershipEvent = defineConfig({
|
|
|
5711
6065
|
},
|
|
5712
6066
|
review: TENNIS_CLUB_DECLARATION_REVIEW
|
|
5713
6067
|
},
|
|
6068
|
+
{
|
|
6069
|
+
type: ActionType.NOTIFY,
|
|
6070
|
+
label: {
|
|
6071
|
+
defaultMessage: "Notify health worker",
|
|
6072
|
+
description: "This is shown as the action name anywhere the user can trigger the action from",
|
|
6073
|
+
id: "event.tennis-club-membership.action.notify.label"
|
|
6074
|
+
},
|
|
6075
|
+
flags: [
|
|
6076
|
+
{
|
|
6077
|
+
id: "health-worker-notified",
|
|
6078
|
+
operation: "add"
|
|
6079
|
+
}
|
|
6080
|
+
]
|
|
6081
|
+
},
|
|
5714
6082
|
{
|
|
5715
6083
|
type: ActionType.REJECT,
|
|
5716
6084
|
label: {
|
|
@@ -5953,6 +6321,17 @@ var tennisClubMembershipEvent = defineConfig({
|
|
|
5953
6321
|
}
|
|
5954
6322
|
}
|
|
5955
6323
|
],
|
|
6324
|
+
flags: [
|
|
6325
|
+
{
|
|
6326
|
+
id: "health-worker-notified",
|
|
6327
|
+
requiresAction: false,
|
|
6328
|
+
label: {
|
|
6329
|
+
id: "event.tennis-club-membership.flag.health-worker-notified.label",
|
|
6330
|
+
defaultMessage: "Health worker notified",
|
|
6331
|
+
description: "Label for the health-worker-notified flag"
|
|
6332
|
+
}
|
|
6333
|
+
}
|
|
6334
|
+
],
|
|
5956
6335
|
advancedSearch: [
|
|
5957
6336
|
{
|
|
5958
6337
|
title: {
|
|
@@ -6948,10 +7327,380 @@ var ACTION_FILTERS = {
|
|
|
6948
7327
|
[ActionType.UNASSIGN]: (flags) => !flags.some((flag) => flag.endsWith(":requested")),
|
|
6949
7328
|
[ActionType.CUSTOM]: (flags) => !flags.some((flag) => flag.endsWith(":requested"))
|
|
6950
7329
|
};
|
|
7330
|
+
var REJECTED_ACTIONS = [
|
|
7331
|
+
ActionType.READ,
|
|
7332
|
+
ActionType.NOTIFY,
|
|
7333
|
+
ActionType.CUSTOM,
|
|
7334
|
+
ActionType.EDIT,
|
|
7335
|
+
ActionType.ARCHIVE
|
|
7336
|
+
];
|
|
6951
7337
|
|
|
6952
7338
|
// ../commons/src/events/FileUtils.ts
|
|
6953
7339
|
var import_lodash7 = require("lodash");
|
|
6954
7340
|
|
|
7341
|
+
// ../commons/src/events/mocks.test.utils.ts
|
|
7342
|
+
var V2_DEFAULT_MOCK_ADMINISTRATIVE_AREAS = [
|
|
7343
|
+
{
|
|
7344
|
+
id: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7345
|
+
name: "Central",
|
|
7346
|
+
parentId: null,
|
|
7347
|
+
validUntil: null,
|
|
7348
|
+
externalId: "ydyJb1RAy4U1"
|
|
7349
|
+
},
|
|
7350
|
+
{
|
|
7351
|
+
id: "c599b691-fd2d-45e1-abf4-d185de727fb5",
|
|
7352
|
+
name: "Sulaka",
|
|
7353
|
+
parentId: null,
|
|
7354
|
+
validUntil: null,
|
|
7355
|
+
externalId: "pQ8nGxWmZ2Q3"
|
|
7356
|
+
},
|
|
7357
|
+
{
|
|
7358
|
+
id: "7ef2b9c7-5e6d-49f6-ae05-656207d0fc64",
|
|
7359
|
+
name: "Pualula",
|
|
7360
|
+
parentId: null,
|
|
7361
|
+
validUntil: null,
|
|
7362
|
+
externalId: "Aq91DweLmT8k"
|
|
7363
|
+
},
|
|
7364
|
+
{
|
|
7365
|
+
id: "6d1a59df-988c-4021-a846-ccbc021931a7",
|
|
7366
|
+
name: "Chuminga",
|
|
7367
|
+
parentId: null,
|
|
7368
|
+
validUntil: null,
|
|
7369
|
+
externalId: "Rw0fYNh2Xk9a"
|
|
7370
|
+
},
|
|
7371
|
+
{
|
|
7372
|
+
id: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7373
|
+
name: "Ibombo",
|
|
7374
|
+
parentId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7375
|
+
validUntil: null,
|
|
7376
|
+
externalId: "k7DsP4vbN1Qe"
|
|
7377
|
+
},
|
|
7378
|
+
{
|
|
7379
|
+
id: "27160bbd-32d1-4625-812f-860226bfb92a",
|
|
7380
|
+
name: "Isango",
|
|
7381
|
+
parentId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7382
|
+
validUntil: null,
|
|
7383
|
+
externalId: "Gm3Z9eQpHw4L"
|
|
7384
|
+
},
|
|
7385
|
+
{
|
|
7386
|
+
id: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7387
|
+
name: "Isamba",
|
|
7388
|
+
parentId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7389
|
+
validUntil: null,
|
|
7390
|
+
externalId: "sT0xVu1KqJ7r"
|
|
7391
|
+
},
|
|
7392
|
+
{
|
|
7393
|
+
id: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7394
|
+
name: "Itambo",
|
|
7395
|
+
parentId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7396
|
+
validUntil: null,
|
|
7397
|
+
externalId: "Nq6Bv2HpL9Te"
|
|
7398
|
+
},
|
|
7399
|
+
{
|
|
7400
|
+
id: "d42ab2fe-e7ed-470e-8b31-4fb27f9b8250",
|
|
7401
|
+
name: "Ezhi",
|
|
7402
|
+
parentId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7403
|
+
validUntil: null,
|
|
7404
|
+
externalId: "xK8cQ0ZRy5Wd"
|
|
7405
|
+
},
|
|
7406
|
+
{
|
|
7407
|
+
id: "8fbd09d2-212b-47f4-beb3-5e1694931d9f",
|
|
7408
|
+
name: "Ilanga",
|
|
7409
|
+
parentId: "c599b691-fd2d-45e1-abf4-d185de727fb5",
|
|
7410
|
+
validUntil: null,
|
|
7411
|
+
externalId: "Cq4Jm1XvN8Ls"
|
|
7412
|
+
},
|
|
7413
|
+
// Villages under Ibombo (62a0ccb4-880d-4f30-8882-f256007dfff9)
|
|
7414
|
+
{
|
|
7415
|
+
id: "1d4e5f6a-7b8c-4912-8efa-345678901234",
|
|
7416
|
+
name: "Klow",
|
|
7417
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7418
|
+
validUntil: null,
|
|
7419
|
+
externalId: "IkYcYBUcyY2"
|
|
7420
|
+
},
|
|
7421
|
+
{
|
|
7422
|
+
id: "2e5f6a7b-8c9d-4a23-8fab-456789012345",
|
|
7423
|
+
name: "Mbondo",
|
|
7424
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7425
|
+
validUntil: null,
|
|
7426
|
+
externalId: "Qhvv5hvo3mY"
|
|
7427
|
+
},
|
|
7428
|
+
{
|
|
7429
|
+
id: "3f6a7b8c-9d0e-4b34-8abc-567890123456",
|
|
7430
|
+
name: "Ndara",
|
|
7431
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7432
|
+
validUntil: null,
|
|
7433
|
+
externalId: "crXh068O9TR"
|
|
7434
|
+
},
|
|
7435
|
+
{
|
|
7436
|
+
id: "4a7b8c9d-0e1f-4c45-abcd-678901234567",
|
|
7437
|
+
name: "Olani",
|
|
7438
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7439
|
+
validUntil: null,
|
|
7440
|
+
externalId: "r00It8Tvvp7"
|
|
7441
|
+
},
|
|
7442
|
+
{
|
|
7443
|
+
id: "5b8c9d0e-1f2a-4d56-bcde-789012345678",
|
|
7444
|
+
name: "Pemba",
|
|
7445
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7446
|
+
validUntil: null,
|
|
7447
|
+
externalId: "ZnUWsbONIaH"
|
|
7448
|
+
},
|
|
7449
|
+
{
|
|
7450
|
+
id: "6c9d0e1f-2a3b-4e67-8def-890123456789",
|
|
7451
|
+
name: "Quanza",
|
|
7452
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7453
|
+
validUntil: null,
|
|
7454
|
+
externalId: "fDZycvQTa7l"
|
|
7455
|
+
},
|
|
7456
|
+
{
|
|
7457
|
+
id: "7d0e1f2a-3b4c-4f78-8efa-901234567890",
|
|
7458
|
+
name: "Rivka",
|
|
7459
|
+
parentId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7460
|
+
validUntil: null,
|
|
7461
|
+
externalId: "KqswxCGTELa"
|
|
7462
|
+
},
|
|
7463
|
+
// Villages under Isamba (967032fd-3f81-478a-826c-30cb8fe121bd)
|
|
7464
|
+
{
|
|
7465
|
+
id: "8e1f2a3b-4c5d-4089-8fab-012345678901",
|
|
7466
|
+
name: "Mbula",
|
|
7467
|
+
parentId: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7468
|
+
validUntil: null,
|
|
7469
|
+
externalId: "osEbKjRc9Kg"
|
|
7470
|
+
},
|
|
7471
|
+
{
|
|
7472
|
+
id: "9f2a3b4c-5d6e-4190-8abf-123456789012",
|
|
7473
|
+
name: "Ndoki",
|
|
7474
|
+
parentId: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7475
|
+
validUntil: null,
|
|
7476
|
+
externalId: "aq4daBUAGr3"
|
|
7477
|
+
},
|
|
7478
|
+
{
|
|
7479
|
+
id: "0a3b4c5d-6e7f-4201-abcd-234567890123",
|
|
7480
|
+
name: "Tsanga",
|
|
7481
|
+
parentId: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7482
|
+
validUntil: null,
|
|
7483
|
+
externalId: "cqis6Y8trbJ"
|
|
7484
|
+
},
|
|
7485
|
+
{
|
|
7486
|
+
id: "1b4c5d6e-7f8a-4312-bcde-345678901234",
|
|
7487
|
+
name: "Waziri",
|
|
7488
|
+
parentId: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7489
|
+
validUntil: null,
|
|
7490
|
+
externalId: "LMijHPyyx6d"
|
|
7491
|
+
},
|
|
7492
|
+
{
|
|
7493
|
+
id: "2c5d6e7f-8a9b-4423-8def-456789012345",
|
|
7494
|
+
name: "Zimbi",
|
|
7495
|
+
parentId: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7496
|
+
validUntil: null,
|
|
7497
|
+
externalId: "pcQYbPuKGZ7"
|
|
7498
|
+
},
|
|
7499
|
+
// Villages under Itambo (89a33893-b17d-481d-a26d-6461e7ac1651)
|
|
7500
|
+
{
|
|
7501
|
+
id: "3d6e7f8a-9b0c-4534-8efa-567890123456",
|
|
7502
|
+
name: "Felani",
|
|
7503
|
+
parentId: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7504
|
+
validUntil: null,
|
|
7505
|
+
externalId: "gSqpoCGdMXp"
|
|
7506
|
+
},
|
|
7507
|
+
{
|
|
7508
|
+
id: "4e7f8a9b-0c1d-4645-8fab-678901234567",
|
|
7509
|
+
name: "Goroma",
|
|
7510
|
+
parentId: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7511
|
+
validUntil: null,
|
|
7512
|
+
externalId: "KvAAIaNqVrp"
|
|
7513
|
+
},
|
|
7514
|
+
{
|
|
7515
|
+
id: "5f8a9b0c-1d2e-4756-8abc-789012345678",
|
|
7516
|
+
name: "Halifu",
|
|
7517
|
+
parentId: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7518
|
+
validUntil: null,
|
|
7519
|
+
externalId: "qe4UnEVt1hv"
|
|
7520
|
+
},
|
|
7521
|
+
{
|
|
7522
|
+
id: "6a9b0c1d-2e3f-4867-abcd-890123456789",
|
|
7523
|
+
name: "Jabari",
|
|
7524
|
+
parentId: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7525
|
+
validUntil: null,
|
|
7526
|
+
externalId: "yHH9Nz4rLOt"
|
|
7527
|
+
},
|
|
7528
|
+
{
|
|
7529
|
+
id: "7b0c1d2e-3f4a-4978-bcde-901234567890",
|
|
7530
|
+
name: "Kifani",
|
|
7531
|
+
parentId: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7532
|
+
validUntil: null,
|
|
7533
|
+
externalId: "eSWmXIGeu1I"
|
|
7534
|
+
},
|
|
7535
|
+
{
|
|
7536
|
+
id: "8c1d2e3f-4a5b-4089-8def-012345678901",
|
|
7537
|
+
name: "Lumela",
|
|
7538
|
+
parentId: "89a33893-b17d-481d-a26d-6461e7ac1651",
|
|
7539
|
+
validUntil: null,
|
|
7540
|
+
externalId: "bh0b3aI1uP3"
|
|
7541
|
+
}
|
|
7542
|
+
];
|
|
7543
|
+
var V2_DEFAULT_MOCK_LOCATIONS = [
|
|
7544
|
+
{
|
|
7545
|
+
id: "6f6186ce-cd5f-4a5f-810a-2d99e7c4ba12",
|
|
7546
|
+
name: "Central Provincial Office",
|
|
7547
|
+
locationType: "CRVS_OFFICE",
|
|
7548
|
+
administrativeAreaId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7549
|
+
validUntil: null,
|
|
7550
|
+
externalId: "Xr3Df8WpK6Ys"
|
|
7551
|
+
},
|
|
7552
|
+
{
|
|
7553
|
+
id: "b1c2d3e4-f5a6-7890-bcde-f12345678901",
|
|
7554
|
+
name: "Central Health Post",
|
|
7555
|
+
locationType: "HEALTH_FACILITY",
|
|
7556
|
+
administrativeAreaId: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
|
|
7557
|
+
validUntil: null
|
|
7558
|
+
},
|
|
7559
|
+
{
|
|
7560
|
+
id: "028d2c85-ca31-426d-b5d1-2cef545a4902",
|
|
7561
|
+
name: "Ibombo District Office",
|
|
7562
|
+
locationType: "CRVS_OFFICE",
|
|
7563
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7564
|
+
validUntil: null,
|
|
7565
|
+
externalId: "Sm4Nw7GrD2Vy"
|
|
7566
|
+
},
|
|
7567
|
+
{
|
|
7568
|
+
id: "62a0ccb4-4f30-4f30-8882-f256007dff9f",
|
|
7569
|
+
name: "Isamba District Office",
|
|
7570
|
+
locationType: "CRVS_OFFICE",
|
|
7571
|
+
administrativeAreaId: "967032fd-3f81-478a-826c-30cb8fe121bd",
|
|
7572
|
+
validUntil: null,
|
|
7573
|
+
externalId: "Vg1Bq5XeH9Lt"
|
|
7574
|
+
},
|
|
7575
|
+
{
|
|
7576
|
+
id: "954c93e1-13f7-4435-bb82-35e0e215e07d",
|
|
7577
|
+
name: "Isango District Office",
|
|
7578
|
+
locationType: "CRVS_OFFICE",
|
|
7579
|
+
administrativeAreaId: "27160bbd-32d1-4625-812f-860226bfb92a",
|
|
7580
|
+
validUntil: null,
|
|
7581
|
+
externalId: "Je7Lm2XqN9Vz"
|
|
7582
|
+
},
|
|
7583
|
+
{
|
|
7584
|
+
id: "2884f5b9-17b4-49ce-bf4d-f538228935df",
|
|
7585
|
+
name: "Sulaka Provincial Office",
|
|
7586
|
+
locationType: "CRVS_OFFICE",
|
|
7587
|
+
administrativeAreaId: "c599b691-fd2d-45e1-abf4-d185de727fb5",
|
|
7588
|
+
validUntil: null,
|
|
7589
|
+
externalId: "Ht2Wp9KcX5Qv"
|
|
7590
|
+
},
|
|
7591
|
+
{
|
|
7592
|
+
id: "030358c6-54af-44be-821b-8e4af963a49c",
|
|
7593
|
+
name: "Ilanga District Office",
|
|
7594
|
+
locationType: "CRVS_OFFICE",
|
|
7595
|
+
administrativeAreaId: "8fbd09d2-212b-47f4-beb3-5e1694931d9f",
|
|
7596
|
+
validUntil: null,
|
|
7597
|
+
externalId: "Yp6Ds1WqN3Xz"
|
|
7598
|
+
},
|
|
7599
|
+
{
|
|
7600
|
+
id: "423d000f-101b-47c0-8b86-21a908067cee",
|
|
7601
|
+
name: "Chamakubi Health Post",
|
|
7602
|
+
locationType: "HEALTH_FACILITY",
|
|
7603
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7604
|
+
validUntil: null,
|
|
7605
|
+
externalId: "M1nFr8LbC2Qy"
|
|
7606
|
+
},
|
|
7607
|
+
{
|
|
7608
|
+
id: "4d3279be-d026-420c-88f7-f0a4ae986973",
|
|
7609
|
+
name: "Ibombo Rural Health Centre",
|
|
7610
|
+
locationType: "HEALTH_FACILITY",
|
|
7611
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7612
|
+
validUntil: null,
|
|
7613
|
+
externalId: "bT7pV6YrW0Xc"
|
|
7614
|
+
},
|
|
7615
|
+
{
|
|
7616
|
+
id: "190902f4-1d77-476a-8947-41145af1db7d",
|
|
7617
|
+
name: "Chikobo Rural Health Centre",
|
|
7618
|
+
locationType: "HEALTH_FACILITY",
|
|
7619
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7620
|
+
validUntil: null,
|
|
7621
|
+
externalId: "zE4qPn2SgJ5d"
|
|
7622
|
+
},
|
|
7623
|
+
{
|
|
7624
|
+
id: "f5ecbd9b-a01e-4a65-910e-70e86ab41b71",
|
|
7625
|
+
name: "Chilochabalenje Health Post",
|
|
7626
|
+
locationType: "HEALTH_FACILITY",
|
|
7627
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7628
|
+
validUntil: null,
|
|
7629
|
+
externalId: "H8vDs1MqR4Uf"
|
|
7630
|
+
},
|
|
7631
|
+
{
|
|
7632
|
+
id: "dbfc178f-7295-4b90-b28d-111c95b03127",
|
|
7633
|
+
name: "Chipeso Rural Health Centre",
|
|
7634
|
+
locationType: "HEALTH_FACILITY",
|
|
7635
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7636
|
+
validUntil: null,
|
|
7637
|
+
externalId: "Qw3uZ9KfX6Lm"
|
|
7638
|
+
},
|
|
7639
|
+
{
|
|
7640
|
+
id: "09862bfe-c7ac-46cd-987b-668681533c80",
|
|
7641
|
+
name: "Chisamba Rural Health Centre",
|
|
7642
|
+
locationType: "HEALTH_FACILITY",
|
|
7643
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7644
|
+
validUntil: null,
|
|
7645
|
+
externalId: "Yr0pCg8LdM2s"
|
|
7646
|
+
},
|
|
7647
|
+
{
|
|
7648
|
+
id: "834ce389-e95b-4fb0-96a0-33e9ab323059",
|
|
7649
|
+
name: "Chitanda Rural Health Centre",
|
|
7650
|
+
locationType: "HEALTH_FACILITY",
|
|
7651
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7652
|
+
validUntil: null,
|
|
7653
|
+
externalId: "tS9gJ4PwB1Qx"
|
|
7654
|
+
},
|
|
7655
|
+
{
|
|
7656
|
+
id: "0431c433-6062-4a4c-aee9-25271aec61ee",
|
|
7657
|
+
name: "Golden Valley Rural Health Centre",
|
|
7658
|
+
locationType: "HEALTH_FACILITY",
|
|
7659
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7660
|
+
validUntil: null,
|
|
7661
|
+
externalId: "Ld7Qm3XsA8Vr"
|
|
7662
|
+
},
|
|
7663
|
+
{
|
|
7664
|
+
id: "bc84d0b6-7ba7-480d-a339-5d9920d90eb2",
|
|
7665
|
+
name: "Ipongo Rural Health Centre",
|
|
7666
|
+
locationType: "HEALTH_FACILITY",
|
|
7667
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7668
|
+
validUntil: null,
|
|
7669
|
+
externalId: "kF2sW9DmH0Bt"
|
|
7670
|
+
},
|
|
7671
|
+
{
|
|
7672
|
+
id: "4cf1f53b-b730-41d2-8649-dff7eeed970d",
|
|
7673
|
+
name: "Itumbwe Health Post",
|
|
7674
|
+
locationType: "HEALTH_FACILITY",
|
|
7675
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7676
|
+
validUntil: null,
|
|
7677
|
+
externalId: "Ue5Xb3VaC7Pq"
|
|
7678
|
+
},
|
|
7679
|
+
{
|
|
7680
|
+
id: "4b3676cb-9355-4942-9eb9-2ce46acaf0e0",
|
|
7681
|
+
name: "Kabangalala Rural Health Centre",
|
|
7682
|
+
locationType: "HEALTH_FACILITY",
|
|
7683
|
+
administrativeAreaId: "62a0ccb4-880d-4f30-8882-f256007dfff9",
|
|
7684
|
+
validUntil: null,
|
|
7685
|
+
externalId: "Pz8Kc1TqH6Jn"
|
|
7686
|
+
},
|
|
7687
|
+
// Village offices
|
|
7688
|
+
{
|
|
7689
|
+
id: "1f4a5b6c-7d8e-4312-8abc-345678901234",
|
|
7690
|
+
name: "Klow Village Office",
|
|
7691
|
+
locationType: "CRVS_OFFICE",
|
|
7692
|
+
administrativeAreaId: "1d4e5f6a-7b8c-4912-8efa-345678901234",
|
|
7693
|
+
validUntil: null,
|
|
7694
|
+
externalId: "PmAyxAJkxiJ"
|
|
7695
|
+
}
|
|
7696
|
+
];
|
|
7697
|
+
var V2_DEFAULT_MOCK_LOCATIONS_MAP = new Map(
|
|
7698
|
+
V2_DEFAULT_MOCK_LOCATIONS.map((l) => [l.id, l])
|
|
7699
|
+
);
|
|
7700
|
+
var V2_DEFAULT_MOCK_ADMINISTRATIVE_AREAS_MAP = new Map(
|
|
7701
|
+
V2_DEFAULT_MOCK_ADMINISTRATIVE_AREAS.map((a) => [a.id, a])
|
|
7702
|
+
);
|
|
7703
|
+
|
|
6955
7704
|
// ../commons/src/notification/UserNotifications.ts
|
|
6956
7705
|
var z44 = __toESM(require("zod/v4"));
|
|
6957
7706
|
var TriggerEvent = {
|