An input specialised for IremboHub application numbers — validates the format and can look up the referenced application to populate downstream fields.
Read Form Rules before using this component — keys, labels, required fields, expressions, visibility, and validation all follow shared conventions.
populatesInstead of customapplicationnumberinput, use… |
For… |
|---|---|
customidinput |
Identity document lookup (NID, passport, refugee ID) |
customcrvsidinput |
CRVS document lookup (birth/death/marriage certificate) |
input |
A free-text reference number with no IremboHub lookup |
The full prop surface mirrors customidinput (label, required, defaultRequired, url, endpointCode, useBaseUrl, populates, hideField). Verify exact prop names against the running UI library before shipping.
| Prop | Type | Required? | Description |
|---|---|---|---|
label |
string |
required | Visible label. |
required |
boolean |
required | Always false. The expression controls the runtime value. |
defaultRequired |
boolean |
required | true for required fields, false for optional ones. |
endpointCode |
string |
optional | Integration endpoint code for the application lookup, if a lookup is required. |
url |
string |
optional | Integration endpoint path — typically /integration/v1/fetch/sync. |
useBaseUrl |
boolean |
optional | Prepend the API gateway base URL to url. Set true for production. |
populates |
array |
optional | { valueKey, targetKey } mappings to auto-fill downstream fields from the response. |
hideField |
boolean |
optional | Hides the field and excludes its value from submission. Toggle via expressions["props.hideField"]. |
{
"key": "PREVIOUS_APPLICATION",
"type": "customapplicationnumberinput",
"props": {
"label": "Previous Application Number",
"required": false,
"defaultRequired": true
},
"expressions": {
"props.required": "!(field?.props?.hideField || field?.hide) && field?.props?.defaultRequired"
},
"validation": {
"messages": {
"required": "Application number is required.",
"invalidAppNo": "Enter a valid application number."
}
}
}
{
"key": "PREVIOUS_APPLICATION",
"type": "customapplicationnumberinput",
"props": {
"label": "Previous Application Number",
"required": false,
"defaultRequired": true,
"url": "/integration/v1/fetch/sync",
"useBaseUrl": true,
"endpointCode": "GETAPPLICATIONBYNUMBER",
"populates": [
{ "valueKey": "applicantFirstName", "targetKey": "FIRST_NAME" },
{ "valueKey": "applicantLastName", "targetKey": "LAST_NAME" },
{ "valueKey": "applicationDate", "targetKey": "PREVIOUS_APP_DATE" }
]
},
"expressions": {
"props.required": "!(field?.props?.hideField || field?.hide) && field?.props?.defaultRequired"
},
"validation": {
"messages": {
"required": "Application number is required.",
"invalidAppNo": "Enter a valid application number."
}
}
}
The widget emits invalidAppNo when the entered number fails the format or lookup check. See Cross-field Validators for the full identity-validator list.
required: true directly — use the required: false + defaultRequired: true + expression pattern from Form Rules.useBaseUrl: true in production when a lookup is configured — the request is sent to a relative path with no host and fails.customapplicationnumberinput for a free-text reference that needs no lookup — use plain input and add a pattern if you want format validation.validation.messages.invalidAppNo — when the format check fails the user sees no error text.key is UPPER_SNAKE_CASE and unique across the entire formprops.label is present, unique, and correctly casedsections > formly-group > block > customapplicationnumberinputrequired: false is set (never true)defaultRequired is set (true or false)expressions["props.required"] is present with the exact required expressionendpointCode, url, and useBaseUrl are all configuredpopulates is used, every targetKey corresponds to a declared fieldvalidation.messages.required and validation.messages.invalidAppNo are present