Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- BPay handling to NSW GovPay provider
- `formsAppService.getFormSubmissionMetaList()`

### Changed

- required logic for `lookupButton` form element

## [10.1.2] - 2026-05-07

### Added
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion src/components/renderer/LookupButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type Props = {
hasMarginTop?: boolean
isInputButton?: boolean
lookupButtonConfig?: EnvironmentTypes.ButtonConfiguration
overrideRequiredMessage: string | undefined
}

function LookupButton({
Expand All @@ -20,6 +21,7 @@ function LookupButton({
hasMarginTop,
isInputButton,
lookupButtonConfig,
overrideRequiredMessage,
}: Props) {
const { isLookup, onLookup, isDisabled, isLoading, allowLookupOnEmptyValue } =
useLookupNotification(value)
Expand Down Expand Up @@ -51,7 +53,10 @@ function LookupButton({
(!isEmptyValue &&
!!validationMessage &&
validationMessage !==
generateLookupValidationMessage(lookupButtonConfig))
generateLookupValidationMessage(
lookupButtonConfig,
overrideRequiredMessage,
))
}
>
{isInputButton && <span></span>}
Expand Down
4 changes: 3 additions & 1 deletion src/form-elements/FormElementABN.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ function FormElementABN({
})
if (result.ABRPayloadSearchResults.response.exception) {
throw new Error(
result.ABRPayloadSearchResults.response.exception.exceptionDescription,
result.ABRPayloadSearchResults.response.exception
.exceptionDescription,
)
}

Expand Down Expand Up @@ -269,6 +270,7 @@ function FormElementABN({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>
{value && (
Expand Down
3 changes: 2 additions & 1 deletion src/form-elements/FormElementBSB.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ function FormElementBSB({
onChange(element, {
value: undefined,
})
setText("")
setText('')
}
setIsDirty()
}}
Expand Down Expand Up @@ -198,6 +198,7 @@ function FormElementBSB({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>
{bsbRecord && (
Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementBarcodeScanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ function FormElementBarcodeScanner({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>

Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementCheckBoxes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ function FormElementCheckboxes({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</FormElementOptions>

Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementDate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ function FormElementDate({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>

Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementDateTime.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ function FormElementDateTime({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>

Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementEmail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ function FormElementEmail({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>

Expand Down
7 changes: 5 additions & 2 deletions src/form-elements/FormElementLookupButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ function FormElementLookupButton({
element,
onChange,
onLookup,
validationMessage,
...validationMessageProps
}: Props & {
onChange: FormElementValueChangeHandler
Expand Down Expand Up @@ -111,14 +112,16 @@ function FormElementLookupButton({
className="ob-lookup-button"
id={id}
element={element}
required={false}
required={!!element.required}
>
<LookupButton
value={value}
validationMessage={undefined}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={element.requiredMessage}
/>
<FormElementLookupButtonValidationMessage
validationMessage={validationMessage}
{...validationMessageProps}
/>
</FormElementLabelContainer>
Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementNumber.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ function FormElementNumber({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>
) : isPageVisible ? (
Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementSelect.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ function FormElementSelect({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>
)}
Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementTelephone.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ function FormElementTelephone({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>

Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementText.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ function FormElementText({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>
{(isDisplayingValidationMessage || !!element.maxLength) && (
Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementTextarea.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ function FormElementTextarea({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
)}
</div>
Expand Down
1 change: 1 addition & 0 deletions src/form-elements/FormElementTime.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ function FormElementTime({
value={value}
validationMessage={validationMessage}
lookupButtonConfig={element.lookupButton}
overrideRequiredMessage={undefined}
/>
</div>

Expand Down
71 changes: 0 additions & 71 deletions src/services/form-validation/determineLookupButtonIsRequired.ts

This file was deleted.

16 changes: 13 additions & 3 deletions src/services/form-validation/extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,18 @@ const validationExtensions = {
executedLookups,
formElement,
}: {
formElement: FormTypes.LookupFormElement & FormTypes.FormElementRequired
formElement: FormTypes.LookupFormElement &
FormTypes.FormElementRequired & {
type: FormTypes.FormElement['type']
}
executedLookups: ExecutedLookups
}): string[] {
if (!formElement.isDataLookup && !formElement.isElementLookup) {
return []
}

// Lookups must only be executed on required form elements
if (formElement && !formElement.required) {
if (!formElement.required) {
return []
}

Expand All @@ -33,7 +36,14 @@ const validationExtensions = {
return []
}

return [generateLookupValidationMessage(formElement.lookupButton)]
return [
generateLookupValidationMessage(
formElement.lookupButton,
formElement.type === 'lookupButton'
? formElement.requiredMessage
: undefined,
),
]
},

presence(
Expand Down
10 changes: 1 addition & 9 deletions src/services/form-validation/validateSubmission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import { parseDateValue } from '../generate-default-data'
import { localisationService } from '../../apps'
import { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'
import { generateConfirmationFormElementName } from '../dynamic-elements'
import { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired'
import { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'
import {
defaultAutoSnapshotButtonLabel,
Expand Down Expand Up @@ -752,14 +751,7 @@ export default function validateSubmission({
}
case 'lookupButton': {
const errorMessages = validationExtensions.lookups({
formElement: {
...formElement,
required: determineLookupButtonIsRequired(
formElement.elementDependencies,
elements,
submission ? [submission] : [],
),
},
formElement,
executedLookups,
})
if (errorMessages.length) {
Expand Down
13 changes: 9 additions & 4 deletions src/services/form-validation/validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,14 @@ export function validateAttachments(
}

export const generateLookupValidationMessage = (
lookupButtonConfig?: EnvironmentTypes.ButtonConfiguration,
lookupButtonConfig: EnvironmentTypes.ButtonConfiguration | undefined,
overrideMessage: string | undefined,
) => {
return lookupButtonConfig && lookupButtonConfig.label
? `${lookupButtonConfig.label} is required`
: 'Lookup is required'
if (overrideMessage) {
return overrideMessage
}
if (lookupButtonConfig && lookupButtonConfig.label) {
return `${lookupButtonConfig.label} is required`
}
return 'Lookup is required'
}
Loading