@oneblink/apps-react 12.0.0 → 13.0.0-beta.10

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.
Files changed (207) hide show
  1. package/dist/OneBlinkAutoSaveForm.d.ts +5 -2
  2. package/dist/OneBlinkAutoSaveForm.js.map +1 -1
  3. package/dist/OneBlinkForm.d.ts +12 -62
  4. package/dist/OneBlinkForm.js +5 -2
  5. package/dist/OneBlinkForm.js.map +1 -1
  6. package/dist/OneBlinkFormBase.d.ts +23 -3
  7. package/dist/OneBlinkFormBase.js +357 -194
  8. package/dist/OneBlinkFormBase.js.map +1 -1
  9. package/dist/OneBlinkReadOnlyForm.d.ts +17 -9
  10. package/dist/OneBlinkReadOnlyForm.js +24 -47
  11. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  12. package/dist/apps/approvals-service.d.ts +1 -0
  13. package/dist/apps/approvals-service.js.map +1 -1
  14. package/dist/apps/services/api/submissions.d.ts +19 -2
  15. package/dist/apps/services/api/submissions.js +37 -4
  16. package/dist/apps/services/api/submissions.js.map +1 -1
  17. package/dist/apps/services/errors/oneBlinkAppsError.d.ts +8 -0
  18. package/dist/apps/services/errors/oneBlinkAppsError.js +1 -0
  19. package/dist/apps/services/errors/oneBlinkAppsError.js.map +1 -1
  20. package/dist/apps/submission-service.d.ts +16 -6
  21. package/dist/apps/submission-service.js +11 -6
  22. package/dist/apps/submission-service.js.map +1 -1
  23. package/dist/components/ArcGISWebMap.d.ts +2 -1
  24. package/dist/components/ArcGISWebMap.js +12 -4
  25. package/dist/components/ArcGISWebMap.js.map +1 -1
  26. package/dist/components/renderer/LookupButton.js +7 -5
  27. package/dist/components/renderer/LookupButton.js.map +1 -1
  28. package/dist/components/renderer/LookupNotification.js +32 -15
  29. package/dist/components/renderer/LookupNotification.js.map +1 -1
  30. package/dist/components/renderer/OneBlinkFormElements.d.ts +14 -1
  31. package/dist/components/renderer/OneBlinkFormElements.js +58 -39
  32. package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
  33. package/dist/components/renderer/PageFormElements.js +8 -3
  34. package/dist/components/renderer/PageFormElements.js.map +1 -1
  35. package/dist/components/renderer/ReverseGeocode.js +11 -4
  36. package/dist/components/renderer/ReverseGeocode.js.map +1 -1
  37. package/dist/components/renderer/attachments/DropdownMenu.d.ts +1 -2
  38. package/dist/components/renderer/attachments/DropdownMenu.js +4 -10
  39. package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
  40. package/dist/components/renderer/attachments/FileCard.d.ts +2 -1
  41. package/dist/components/renderer/attachments/FileCard.js +2 -2
  42. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  43. package/dist/form-elements/FormElementABN.d.ts +2 -1
  44. package/dist/form-elements/FormElementABN.js +3 -3
  45. package/dist/form-elements/FormElementABN.js.map +1 -1
  46. package/dist/form-elements/FormElementAPINSWLiquorLicence.d.ts +2 -1
  47. package/dist/form-elements/FormElementAPINSWLiquorLicence.js +2 -2
  48. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  49. package/dist/form-elements/FormElementArcGISWebMap.d.ts +2 -1
  50. package/dist/form-elements/FormElementArcGISWebMap.js +5 -5
  51. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  52. package/dist/form-elements/FormElementAutocomplete.d.ts +1 -0
  53. package/dist/form-elements/FormElementAutocomplete.js +4 -4
  54. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  55. package/dist/form-elements/FormElementBSB.d.ts +2 -1
  56. package/dist/form-elements/FormElementBSB.js +3 -3
  57. package/dist/form-elements/FormElementBSB.js.map +1 -1
  58. package/dist/form-elements/FormElementBarcodeScanner.d.ts +2 -1
  59. package/dist/form-elements/FormElementBarcodeScanner.js +2 -2
  60. package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
  61. package/dist/form-elements/FormElementBoolean.d.ts +2 -1
  62. package/dist/form-elements/FormElementBoolean.js +3 -3
  63. package/dist/form-elements/FormElementBoolean.js.map +1 -1
  64. package/dist/form-elements/FormElementCalculation.js +1 -0
  65. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  66. package/dist/form-elements/FormElementCamera.d.ts +2 -1
  67. package/dist/form-elements/FormElementCamera.js +4 -4
  68. package/dist/form-elements/FormElementCamera.js.map +1 -1
  69. package/dist/form-elements/FormElementCheckBoxes.d.ts +2 -1
  70. package/dist/form-elements/FormElementCheckBoxes.js +4 -4
  71. package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
  72. package/dist/form-elements/FormElementCivicaNameRecord.js +1 -1
  73. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  74. package/dist/form-elements/FormElementCivicaStreetName.d.ts +2 -1
  75. package/dist/form-elements/FormElementCivicaStreetName.js +2 -2
  76. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  77. package/dist/form-elements/FormElementCompliance.d.ts +2 -1
  78. package/dist/form-elements/FormElementCompliance.js +5 -12
  79. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  80. package/dist/form-elements/FormElementDate.d.ts +2 -1
  81. package/dist/form-elements/FormElementDate.js +3 -3
  82. package/dist/form-elements/FormElementDate.js.map +1 -1
  83. package/dist/form-elements/FormElementDateTime.d.ts +2 -1
  84. package/dist/form-elements/FormElementDateTime.js +3 -3
  85. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  86. package/dist/form-elements/FormElementEmail.d.ts +2 -1
  87. package/dist/form-elements/FormElementEmail.js +2 -2
  88. package/dist/form-elements/FormElementEmail.js.map +1 -1
  89. package/dist/form-elements/FormElementFile.d.ts +1 -0
  90. package/dist/form-elements/FormElementFile.js +2 -2
  91. package/dist/form-elements/FormElementFile.js.map +1 -1
  92. package/dist/form-elements/FormElementFiles.d.ts +2 -1
  93. package/dist/form-elements/FormElementFiles.js +4 -4
  94. package/dist/form-elements/FormElementFiles.js.map +1 -1
  95. package/dist/form-elements/FormElementForm.d.ts +20 -1
  96. package/dist/form-elements/FormElementForm.js +9 -15
  97. package/dist/form-elements/FormElementForm.js.map +1 -1
  98. package/dist/form-elements/FormElementFreshdeskDependentField.js +1 -1
  99. package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
  100. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +2 -1
  101. package/dist/form-elements/FormElementGeoscapeAddress.js +2 -2
  102. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  103. package/dist/form-elements/FormElementGoogleAddress.d.ts +2 -1
  104. package/dist/form-elements/FormElementGoogleAddress.js +2 -2
  105. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  106. package/dist/form-elements/FormElementLocation.d.ts +2 -1
  107. package/dist/form-elements/FormElementLocation.js +3 -3
  108. package/dist/form-elements/FormElementLocation.js.map +1 -1
  109. package/dist/form-elements/FormElementLookupButton.d.ts +2 -1
  110. package/dist/form-elements/FormElementLookupButton.js +8 -4
  111. package/dist/form-elements/FormElementLookupButton.js.map +1 -1
  112. package/dist/form-elements/FormElementNumber.d.ts +2 -1
  113. package/dist/form-elements/FormElementNumber.js +4 -4
  114. package/dist/form-elements/FormElementNumber.js.map +1 -1
  115. package/dist/form-elements/FormElementPointAddress.d.ts +2 -1
  116. package/dist/form-elements/FormElementPointAddress.js +2 -2
  117. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  118. package/dist/form-elements/FormElementPointAddressV3.d.ts +2 -1
  119. package/dist/form-elements/FormElementPointAddressV3.js +2 -2
  120. package/dist/form-elements/FormElementPointAddressV3.js.map +1 -1
  121. package/dist/form-elements/FormElementPointCadastralParcel.d.ts +2 -1
  122. package/dist/form-elements/FormElementPointCadastralParcel.js +3 -3
  123. package/dist/form-elements/FormElementPointCadastralParcel.js.map +1 -1
  124. package/dist/form-elements/FormElementRadio.d.ts +2 -1
  125. package/dist/form-elements/FormElementRadio.js +3 -3
  126. package/dist/form-elements/FormElementRadio.js.map +1 -1
  127. package/dist/form-elements/FormElementRepeatableSet.d.ts +13 -1
  128. package/dist/form-elements/FormElementRepeatableSet.js +16 -14
  129. package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
  130. package/dist/form-elements/FormElementSection.d.ts +7 -1
  131. package/dist/form-elements/FormElementSection.js +4 -4
  132. package/dist/form-elements/FormElementSection.js.map +1 -1
  133. package/dist/form-elements/FormElementSelect.d.ts +2 -1
  134. package/dist/form-elements/FormElementSelect.js +4 -4
  135. package/dist/form-elements/FormElementSelect.js.map +1 -1
  136. package/dist/form-elements/FormElementSignature.d.ts +2 -1
  137. package/dist/form-elements/FormElementSignature.js +9 -9
  138. package/dist/form-elements/FormElementSignature.js.map +1 -1
  139. package/dist/form-elements/FormElementSummary.js +2 -0
  140. package/dist/form-elements/FormElementSummary.js.map +1 -1
  141. package/dist/form-elements/FormElementTelephone.d.ts +2 -1
  142. package/dist/form-elements/FormElementTelephone.js +2 -2
  143. package/dist/form-elements/FormElementTelephone.js.map +1 -1
  144. package/dist/form-elements/FormElementText.d.ts +2 -1
  145. package/dist/form-elements/FormElementText.js +2 -2
  146. package/dist/form-elements/FormElementText.js.map +1 -1
  147. package/dist/form-elements/FormElementTextarea.d.ts +2 -1
  148. package/dist/form-elements/FormElementTextarea.js +3 -3
  149. package/dist/form-elements/FormElementTextarea.js.map +1 -1
  150. package/dist/form-elements/FormElementTime.d.ts +2 -1
  151. package/dist/form-elements/FormElementTime.js +3 -3
  152. package/dist/form-elements/FormElementTime.js.map +1 -1
  153. package/dist/form-elements/OptionButton.d.ts +1 -1
  154. package/dist/form-elements/OptionButton.js +2 -2
  155. package/dist/form-elements/OptionButton.js.map +1 -1
  156. package/dist/hooks/useAreLookupsDisallowed.d.ts +2 -0
  157. package/dist/hooks/useAreLookupsDisallowed.js +12 -0
  158. package/dist/hooks/useAreLookupsDisallowed.js.map +1 -0
  159. package/dist/hooks/useDynamicOptionsLoaderState.js +5 -1
  160. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  161. package/dist/hooks/useEditableFormElementIds.d.ts +3 -0
  162. package/dist/hooks/useEditableFormElementIds.js +6 -0
  163. package/dist/hooks/useEditableFormElementIds.js.map +1 -0
  164. package/dist/hooks/useFormElementOptions.js +2 -0
  165. package/dist/hooks/useFormElementOptions.js.map +1 -1
  166. package/dist/hooks/useFormIsDirty.d.ts +38 -0
  167. package/dist/hooks/useFormIsDirty.js +78 -0
  168. package/dist/hooks/useFormIsDirty.js.map +1 -0
  169. package/dist/hooks/useFormSubmissionAttempt.d.ts +88 -0
  170. package/dist/hooks/useFormSubmissionAttempt.js +103 -0
  171. package/dist/hooks/useFormSubmissionAttempt.js.map +1 -0
  172. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +2 -9
  173. package/dist/hooks/useFormSubmissionAutoSaveState.js +4 -2
  174. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  175. package/dist/hooks/useFormValidation.d.ts +1 -1
  176. package/dist/hooks/useFormValidation.js +21 -8
  177. package/dist/hooks/useFormValidation.js.map +1 -1
  178. package/dist/hooks/useInjectPages.d.ts +2 -1
  179. package/dist/hooks/useInjectPages.js.map +1 -1
  180. package/dist/hooks/useIsFormElementReadOnly.d.ts +2 -0
  181. package/dist/hooks/useIsFormElementReadOnly.js +13 -0
  182. package/dist/hooks/useIsFormElementReadOnly.js.map +1 -0
  183. package/dist/hooks/useLookupNotification.d.ts +23 -2
  184. package/dist/hooks/useLookupNotification.js +2 -1
  185. package/dist/hooks/useLookupNotification.js.map +1 -1
  186. package/dist/hooks/useLookups.d.ts +3 -3
  187. package/dist/hooks/useLookups.js +7 -4
  188. package/dist/hooks/useLookups.js.map +1 -1
  189. package/dist/index.d.ts +3 -1
  190. package/dist/index.js +2 -0
  191. package/dist/index.js.map +1 -1
  192. package/dist/services/form-validation/extensions.d.ts +3 -1
  193. package/dist/services/form-validation/extensions.js +3 -1
  194. package/dist/services/form-validation/extensions.js.map +1 -1
  195. package/dist/services/form-validation/validateSubmission.d.ts +3 -1
  196. package/dist/services/form-validation/validateSubmission.js +43 -12
  197. package/dist/services/form-validation/validateSubmission.js.map +1 -1
  198. package/dist/services/generateCivicaNameRecordElements.js +0 -13
  199. package/dist/services/generateCivicaNameRecordElements.js.map +1 -1
  200. package/dist/services/generateFreshdeskDependentFieldElements.js +0 -3
  201. package/dist/services/generateFreshdeskDependentFieldElements.js.map +1 -1
  202. package/dist/types/form.d.ts +17 -3
  203. package/dist/types/form.js.map +1 -1
  204. package/dist/utils/read-only-form-elements.d.ts +37 -0
  205. package/dist/utils/read-only-form-elements.js +63 -0
  206. package/dist/utils/read-only-form-elements.js.map +1 -0
  207. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementLookupButton.js","sourceRoot":"","sources":["../../src/form-elements/FormElementLookupButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import { memo, useCallback, useContext, useEffect, useMemo } from 'react'\nimport LookupButton from '../components/renderer/LookupButton'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport {\n FormElementLookupHandler,\n FormElementValueChangeHandler,\n IsDirtyProps,\n} from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport LookupNotification from '../components/renderer/LookupNotification'\nimport useFormSubmissionModel from '../hooks/useFormSubmissionModelContext'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\ntype ValidationMessageProps = {\n displayValidationMessage: boolean\n validationMessage: string | undefined\n} & IsDirtyProps\n\ntype Props = {\n id: string\n element: FormTypes.LookupButtonFormElement\n} & ValidationMessageProps\n\nfunction stringifyLookupButtonValue(v: unknown): string {\n return JSON.stringify(v) as string\n}\n\nconst FormElementLookupButtonValidationMessage = memo(\n function FormElementLookupButtonValidationMessageComponent({\n validationMessage,\n displayValidationMessage,\n isDirty,\n }: ValidationMessageProps) {\n const { isLookingUp } = useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isLookingUp\n\n if (!isDisplayingValidationMessage) {\n return null\n }\n\n return <FormElementValidationMessage message={validationMessage} />\n },\n)\n\nfunction FormElementLookupButton({\n id,\n element,\n onChange,\n onLookup,\n validationMessage,\n ...validationMessageProps\n}: Props & {\n onChange: FormElementValueChangeHandler\n onLookup: FormElementLookupHandler\n}) {\n const { formSubmissionModel, elements } = useFormSubmissionModel()\n const { isAutoLookup, data } = useMemo(() => {\n return generateLookupButtonValue(\n element.elementDependencies,\n elements,\n formSubmissionModel,\n )\n }, [element.elementDependencies, elements, formSubmissionModel])\n\n const handleLookup = useCallback<FormElementLookupHandler>(\n (setter) => {\n onLookup((data) => {\n const dataAfterSetting = setter(data)\n dataAfterSetting.submission[element.name] = true\n return dataAfterSetting\n })\n },\n [element.name, onLookup],\n )\n\n const stringifyData = useMemo(() => {\n if (!data) {\n return undefined\n }\n return stringifyLookupButtonValue(data)\n }, [data])\n\n useEffect(() => {\n onChange(element, {\n value: false,\n })\n }, [element, onChange, stringifyData])\n\n const value = useMemo(() => {\n // Want the value to be `true` if there is data or if there are\n // no element dependencies i.e. the lookup can be run at any time.\n if (!element.elementDependencies.length || data) {\n return true\n }\n return undefined\n }, [data, element.elementDependencies.length])\n\n return (\n <LookupNotification\n autoLookupValue={isAutoLookup ? stringifyData : undefined}\n element={element}\n onLookup={handleLookup}\n stringifyAutoLookupValue={stringifyLookupButtonValue}\n >\n <div className=\"cypress-lookup-button-element\">\n <FormElementLabelContainer\n className=\"ob-lookup-button\"\n id={id}\n element={element}\n required={false}\n >\n <LookupButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n overrideRequiredMessage={element.requiredMessage}\n />\n <FormElementLookupButtonValidationMessage\n validationMessage={validationMessage}\n {...validationMessageProps}\n />\n </FormElementLabelContainer>\n </div>\n </LookupNotification>\n )\n}\n\nexport default memo(FormElementLookupButton)\n\nfunction generateLookupButtonValue(\n elementDependencies: FormTypes.LookupButtonFormElement['elementDependencies'],\n elements: FormTypes.FormElement[],\n formSubmissionModel:\n | SubmissionTypes.S3SubmissionData['submission']\n | undefined,\n): {\n isAutoLookup: boolean\n data: SubmissionTypes.S3SubmissionData['submission'] | undefined\n} {\n if (!formSubmissionModel) {\n return {\n isAutoLookup: false,\n data: undefined,\n }\n }\n\n // \"data\" should be `undefined` if there are no dependent elements with a value.\n // If a least one dependent element has a value, we will enable to lookup to run.\n return elementDependencies.reduce<{\n isAutoLookup: boolean\n data: SubmissionTypes.S3SubmissionData['submission'] | undefined\n }>(\n (memo, elementDependency) => {\n const formElement = formElementsService.findFormElement(\n elements,\n (formElement) => formElement.id === elementDependency.elementId,\n )\n if (!formElement || !('name' in formElement)) {\n return memo\n }\n\n const formElementValue = formSubmissionModel[formElement.name]\n\n switch (elementDependency.type) {\n case 'FORM_FORM_ELEMENT': {\n if (\n formElement.type === 'form' &&\n Array.isArray(formElement.elements)\n ) {\n const nestedLookupButtonValue = generateLookupButtonValue(\n [elementDependency.elementDependency],\n formElement.elements,\n formElementValue as SubmissionTypes.S3SubmissionData['submission'],\n )\n return {\n isAutoLookup:\n memo.isAutoLookup && nestedLookupButtonValue.isAutoLookup,\n data:\n nestedLookupButtonValue.data !== undefined\n ? {\n ...memo.data,\n [formElement.name]: {\n ...(memo?.data?.[formElement.name] || {}),\n ...nestedLookupButtonValue.data,\n },\n }\n : memo.data,\n }\n }\n break\n }\n case 'REPEATABLE_SET_FORM_ELEMENT': {\n if (formElement.type === 'repeatableSet') {\n const entries: {\n isAutoLookup: boolean\n data: Record<\n number,\n SubmissionTypes.S3SubmissionData['submission'] | undefined\n >\n } = {\n isAutoLookup: memo.isAutoLookup,\n data: {},\n }\n let hasAnEntry = false\n const existingEntries =\n (memo.data?.[formElement.name] as object[]) || undefined\n if (Array.isArray(formElementValue)) {\n for (const entry of formElementValue) {\n const index = formElementValue.indexOf(entry)\n const nestedLookupButtonValue = generateLookupButtonValue(\n [elementDependency.elementDependency],\n formElement.elements,\n entry as SubmissionTypes.S3SubmissionData['submission'],\n )\n entries.isAutoLookup =\n entries.isAutoLookup && nestedLookupButtonValue.isAutoLookup\n if (nestedLookupButtonValue.data || existingEntries?.[index]) {\n entries.data[index] = {\n ...existingEntries?.[index],\n ...nestedLookupButtonValue.data,\n }\n hasAnEntry = true\n } else {\n entries.data[index] = undefined\n }\n }\n }\n\n return {\n isAutoLookup: memo.isAutoLookup && entries.isAutoLookup,\n data: hasAnEntry\n ? {\n ...memo.data,\n [formElement.name]: entries.data,\n }\n : memo.data,\n }\n }\n break\n }\n default: {\n if (formElement && 'name' in formElement) {\n let dependencyValue = formSubmissionModel[formElement.name]\n // If the dependency is a compliance element, we need to get the value of the compliance element\n // and not trigger the lookup if the notes or files are changing.\n if (\n formElement.type === 'compliance' &&\n typeof dependencyValue === 'object' &&\n dependencyValue !== null &&\n 'value' in dependencyValue\n ) {\n dependencyValue = dependencyValue.value\n }\n const isAutoLookupChecker = autoLookupElementMap[formElement.type]\n const isFormElementAutoLookup =\n typeof isAutoLookupChecker === 'function'\n ? isAutoLookupChecker(formElement)\n : isAutoLookupChecker\n return {\n isAutoLookup: memo.isAutoLookup && isFormElementAutoLookup,\n data:\n dependencyValue !== undefined && dependencyValue !== null\n ? {\n ...memo.data,\n [formElement.name]: dependencyValue,\n }\n : memo.data,\n }\n }\n break\n }\n }\n\n return memo\n },\n {\n isAutoLookup: true,\n data: undefined,\n },\n )\n}\n\n// Creating an object here so we get a Typescript error when adding a\n// new element type and forgetting to add to the array of allowed types\nconst autoLookupElementMap: Record<\n Exclude<FormTypes.FormElement['type'], 'page'>,\n boolean | ((element: FormTypes.FormElement) => boolean)\n> = {\n text: false,\n textarea: false,\n number: false,\n email: false,\n telephone: false,\n barcodeScanner: false,\n radio: true,\n checkboxes: false,\n select: (formElement) => formElement.type === 'select' && !formElement.multi,\n autocomplete: true,\n boolean: true,\n date: false,\n datetime: false,\n time: false,\n heading: false,\n html: false,\n image: false,\n infoPage: false,\n camera: false,\n repeatableSet: false,\n draw: false,\n calculation: false,\n location: true,\n files: true,\n captcha: false,\n form: false,\n summary: false,\n compliance: true,\n geoscapeAddress: true,\n pointAddress: true,\n pointAddressV3: true,\n googleAddress: false,\n civicaStreetName: true,\n civicaNameRecord: false,\n section: false,\n bsb: false,\n abn: false,\n freshdeskDependentField: false,\n apiNSWLiquorLicence: true,\n arcGISWebMap: true,\n pointCadastralParcel: true,\n lookupButton: false,\n}\n"]}
1
+ {"version":3,"file":"FormElementLookupButton.js","sourceRoot":"","sources":["../../src/form-elements/FormElementLookupButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import { memo, useCallback, useContext, useEffect, useMemo } from 'react'\nimport LookupButton from '../components/renderer/LookupButton'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport {\n FormElementLookupHandler,\n FormElementValueChangeHandler,\n IsDirtyProps,\n} from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport LookupNotification from '../components/renderer/LookupNotification'\nimport useFormSubmissionModel from '../hooks/useFormSubmissionModelContext'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\ntype ValidationMessageProps = {\n displayValidationMessage: boolean\n validationMessage: string | undefined\n} & IsDirtyProps\n\ntype Props = {\n id: string\n element: FormTypes.LookupButtonFormElement\n readOnly: boolean\n} & ValidationMessageProps\n\nfunction stringifyLookupButtonValue(v: unknown): string {\n return JSON.stringify(v) as string\n}\n\nconst FormElementLookupButtonValidationMessage = memo(\n function FormElementLookupButtonValidationMessageComponent({\n validationMessage,\n displayValidationMessage,\n isDirty,\n }: ValidationMessageProps) {\n const { isLookingUp } = useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isLookingUp\n\n if (!isDisplayingValidationMessage) {\n return null\n }\n\n return <FormElementValidationMessage message={validationMessage} />\n },\n)\n\nfunction FormElementLookupButton({\n id,\n element,\n readOnly,\n onChange,\n onLookup,\n validationMessage,\n ...validationMessageProps\n}: Props & {\n onChange: FormElementValueChangeHandler\n onLookup: FormElementLookupHandler\n}) {\n const { formSubmissionModel, elements } = useFormSubmissionModel()\n const { isAutoLookup, data } = useMemo(() => {\n return generateLookupButtonValue(\n element.elementDependencies,\n elements,\n formSubmissionModel,\n )\n }, [element.elementDependencies, elements, formSubmissionModel])\n\n const handleLookup = useCallback<FormElementLookupHandler>(\n (setter, options) => {\n onLookup((data) => {\n const dataAfterSetting = setter(data)\n dataAfterSetting.submission[element.name] = true\n return dataAfterSetting\n }, options)\n },\n [element.name, onLookup],\n )\n\n const stringifyData = useMemo(() => {\n if (!data) {\n return undefined\n }\n return stringifyLookupButtonValue(data)\n }, [data])\n\n useEffect(() => {\n if (readOnly) {\n return\n }\n onChange(element, {\n value: false,\n isDerivedChange: true,\n })\n }, [element, onChange, readOnly, stringifyData])\n\n const value = useMemo(() => {\n // Want the value to be `true` if there is data or if there are\n // no element dependencies i.e. the lookup can be run at any time.\n if (!element.elementDependencies.length || data) {\n return true\n }\n return undefined\n }, [data, element.elementDependencies.length])\n\n return (\n <LookupNotification\n autoLookupValue={isAutoLookup ? stringifyData : undefined}\n element={element}\n onLookup={handleLookup}\n stringifyAutoLookupValue={stringifyLookupButtonValue}\n >\n <div className=\"cypress-lookup-button-element\">\n <FormElementLabelContainer\n className=\"ob-lookup-button\"\n id={id}\n element={element}\n required={false}\n >\n <LookupButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n overrideRequiredMessage={element.requiredMessage}\n />\n <FormElementLookupButtonValidationMessage\n validationMessage={validationMessage}\n {...validationMessageProps}\n />\n </FormElementLabelContainer>\n </div>\n </LookupNotification>\n )\n}\n\nexport default memo(FormElementLookupButton)\n\nfunction generateLookupButtonValue(\n elementDependencies: FormTypes.LookupButtonFormElement['elementDependencies'],\n elements: FormTypes.FormElement[],\n formSubmissionModel:\n | SubmissionTypes.S3SubmissionData['submission']\n | undefined,\n): {\n isAutoLookup: boolean\n data: SubmissionTypes.S3SubmissionData['submission'] | undefined\n} {\n if (!formSubmissionModel) {\n return {\n isAutoLookup: false,\n data: undefined,\n }\n }\n\n // \"data\" should be `undefined` if there are no dependent elements with a value.\n // If a least one dependent element has a value, we will enable to lookup to run.\n return elementDependencies.reduce<{\n isAutoLookup: boolean\n data: SubmissionTypes.S3SubmissionData['submission'] | undefined\n }>(\n (memo, elementDependency) => {\n const formElement = formElementsService.findFormElement(\n elements,\n (formElement) => formElement.id === elementDependency.elementId,\n )\n if (!formElement || !('name' in formElement)) {\n return memo\n }\n\n const formElementValue = formSubmissionModel[formElement.name]\n\n switch (elementDependency.type) {\n case 'FORM_FORM_ELEMENT': {\n if (\n formElement.type === 'form' &&\n Array.isArray(formElement.elements)\n ) {\n const nestedLookupButtonValue = generateLookupButtonValue(\n [elementDependency.elementDependency],\n formElement.elements,\n formElementValue as SubmissionTypes.S3SubmissionData['submission'],\n )\n return {\n isAutoLookup:\n memo.isAutoLookup && nestedLookupButtonValue.isAutoLookup,\n data:\n nestedLookupButtonValue.data !== undefined\n ? {\n ...memo.data,\n [formElement.name]: {\n ...(memo?.data?.[formElement.name] || {}),\n ...nestedLookupButtonValue.data,\n },\n }\n : memo.data,\n }\n }\n break\n }\n case 'REPEATABLE_SET_FORM_ELEMENT': {\n if (formElement.type === 'repeatableSet') {\n const entries: {\n isAutoLookup: boolean\n data: Record<\n number,\n SubmissionTypes.S3SubmissionData['submission'] | undefined\n >\n } = {\n isAutoLookup: memo.isAutoLookup,\n data: {},\n }\n let hasAnEntry = false\n const existingEntries =\n (memo.data?.[formElement.name] as object[]) || undefined\n if (Array.isArray(formElementValue)) {\n for (const entry of formElementValue) {\n const index = formElementValue.indexOf(entry)\n const nestedLookupButtonValue = generateLookupButtonValue(\n [elementDependency.elementDependency],\n formElement.elements,\n entry as SubmissionTypes.S3SubmissionData['submission'],\n )\n entries.isAutoLookup =\n entries.isAutoLookup && nestedLookupButtonValue.isAutoLookup\n if (nestedLookupButtonValue.data || existingEntries?.[index]) {\n entries.data[index] = {\n ...existingEntries?.[index],\n ...nestedLookupButtonValue.data,\n }\n hasAnEntry = true\n } else {\n entries.data[index] = undefined\n }\n }\n }\n\n return {\n isAutoLookup: memo.isAutoLookup && entries.isAutoLookup,\n data: hasAnEntry\n ? {\n ...memo.data,\n [formElement.name]: entries.data,\n }\n : memo.data,\n }\n }\n break\n }\n default: {\n if (formElement && 'name' in formElement) {\n let dependencyValue = formSubmissionModel[formElement.name]\n // If the dependency is a compliance element, we need to get the value of the compliance element\n // and not trigger the lookup if the notes or files are changing.\n if (\n formElement.type === 'compliance' &&\n typeof dependencyValue === 'object' &&\n dependencyValue !== null &&\n 'value' in dependencyValue\n ) {\n dependencyValue = dependencyValue.value\n }\n const isAutoLookupChecker = autoLookupElementMap[formElement.type]\n const isFormElementAutoLookup =\n typeof isAutoLookupChecker === 'function'\n ? isAutoLookupChecker(formElement)\n : isAutoLookupChecker\n return {\n isAutoLookup: memo.isAutoLookup && isFormElementAutoLookup,\n data:\n dependencyValue !== undefined && dependencyValue !== null\n ? {\n ...memo.data,\n [formElement.name]: dependencyValue,\n }\n : memo.data,\n }\n }\n break\n }\n }\n\n return memo\n },\n {\n isAutoLookup: true,\n data: undefined,\n },\n )\n}\n\n// Creating an object here so we get a Typescript error when adding a\n// new element type and forgetting to add to the array of allowed types\nconst autoLookupElementMap: Record<\n Exclude<FormTypes.FormElement['type'], 'page'>,\n boolean | ((element: FormTypes.FormElement) => boolean)\n> = {\n text: false,\n textarea: false,\n number: false,\n email: false,\n telephone: false,\n barcodeScanner: false,\n radio: true,\n checkboxes: false,\n select: (formElement) => formElement.type === 'select' && !formElement.multi,\n autocomplete: true,\n boolean: true,\n date: false,\n datetime: false,\n time: false,\n heading: false,\n html: false,\n image: false,\n infoPage: false,\n camera: false,\n repeatableSet: false,\n draw: false,\n calculation: false,\n location: true,\n files: true,\n captcha: false,\n form: false,\n summary: false,\n compliance: true,\n geoscapeAddress: true,\n pointAddress: true,\n pointAddressV3: true,\n googleAddress: false,\n civicaStreetName: true,\n civicaNameRecord: false,\n section: false,\n bsb: false,\n abn: false,\n freshdeskDependentField: false,\n apiNSWLiquorLicence: true,\n arcGISWebMap: true,\n pointCadastralParcel: true,\n lookupButton: false,\n}\n"]}
@@ -4,12 +4,13 @@ import { FormElementValueChangeHandler, IsDirtyProps } from '../types/form';
4
4
  type Props = {
5
5
  id: string;
6
6
  element: FormTypes.NumberElement;
7
+ readOnly: boolean;
7
8
  value: unknown;
8
9
  onChange: FormElementValueChangeHandler<number>;
9
10
  displayValidationMessage: boolean;
10
11
  validationMessage: string | undefined;
11
12
  autocompleteAttributes?: string;
12
13
  } & IsDirtyProps;
13
- declare function FormElementNumber({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }: Props): import("react/jsx-runtime").JSX.Element;
14
+ declare function FormElementNumber({ id, element, readOnly, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }: Props): import("react/jsx-runtime").JSX.Element;
14
15
  declare const _default: React.MemoExoticComponent<typeof FormElementNumber>;
15
16
  export default _default;
@@ -10,7 +10,7 @@ import { LookupNotificationContext } from '../hooks/useLookupNotification';
10
10
  import useElementAriaDescribedby from '../hooks/useElementAriaDescribedby';
11
11
  import MaterialIcon from '../components/MaterialIcon';
12
12
  import FormElementValidationMessage from '../components/renderer/FormElementValidationMessage';
13
- function FormElementNumber({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }) {
13
+ function FormElementNumber({ id, element, readOnly, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }) {
14
14
  const ariaDescribedby = useElementAriaDescribedby(id, element);
15
15
  const isPageVisible = useIsPageVisible();
16
16
  const text = React.useMemo(() => {
@@ -43,10 +43,10 @@ function FormElementNumber({ id, element, value, onChange, validationMessage, di
43
43
  }, []);
44
44
  const { isLookingUp } = React.useContext(LookupNotificationContext);
45
45
  const isDisplayingValidationMessage = (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp;
46
- return (_jsx("div", { className: "cypress-number-element", children: _jsxs(FormElementLabelContainer, { className: "ob-number", id: id, element: element, required: element.required, children: [!element.isSlider ? (_jsxs("div", { className: "field has-addons", children: [_jsxs("div", { className: "control is-expanded has-icons-right", children: [_jsx("input", { type: "number", placeholder: element.placeholderValue, id: id, value: typeof value === 'number' ? value : '', name: element.name, className: "input ob-input cypress-number-control", onChange: handleChange, required: element.required, disabled: element.readOnly, onBlur: setIsDirty, ref: htmlInputElementRef, onWheel: handleWheel, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required }), _jsx("span", { className: "ob-input-icon icon is-small is-right", children: _jsx(MaterialIcon, { className: "is-size-5", children: element.displayAsCurrency ? 'attach_money' : 'tag' }) })] }), !!element.readOnly && !!text && (_jsx("div", { className: "control", children: _jsx(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }) })), _jsx(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage, lookupButtonConfig: element.lookupButton, overrideRequiredMessage: undefined })] })) : isPageVisible ? (_jsx(SliderControl, { id: id, text: text, value: value, element: element, onChange: handleChange, onBlur: setIsDirty, ariaDescribedby: ariaDescribedby })) : undefined, isDisplayingValidationMessage && (_jsx(FormElementValidationMessage, { message: validationMessage }))] }) }));
46
+ return (_jsx("div", { className: "cypress-number-element", children: _jsxs(FormElementLabelContainer, { className: "ob-number", id: id, element: element, required: element.required, children: [!element.isSlider ? (_jsxs("div", { className: "field has-addons", children: [_jsxs("div", { className: "control is-expanded has-icons-right", children: [_jsx("input", { type: "number", placeholder: element.placeholderValue, id: id, value: typeof value === 'number' ? value : '', name: element.name, className: "input ob-input cypress-number-control", onChange: handleChange, required: element.required, disabled: readOnly, onBlur: setIsDirty, ref: htmlInputElementRef, onWheel: handleWheel, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required }), _jsx("span", { className: "ob-input-icon icon is-small is-right", children: _jsx(MaterialIcon, { className: "is-size-5", children: element.displayAsCurrency ? 'attach_money' : 'tag' }) })] }), !!readOnly && !!text && (_jsx("div", { className: "control", children: _jsx(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }) })), _jsx(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage, lookupButtonConfig: element.lookupButton, overrideRequiredMessage: undefined })] })) : isPageVisible ? (_jsx(SliderControl, { id: id, text: text, value: value, element: element, readOnly: readOnly, onChange: handleChange, onBlur: setIsDirty, ariaDescribedby: ariaDescribedby })) : undefined, isDisplayingValidationMessage && (_jsx(FormElementValidationMessage, { message: validationMessage }))] }) }));
47
47
  }
48
48
  const sliderBubbleWidthInPixels = 24;
49
- const SliderControl = React.memo(function SliderControl({ id, text, value, element, onChange, onBlur, ariaDescribedby, }) {
49
+ const SliderControl = React.memo(function SliderControl({ id, text, value, element, readOnly, onChange, onBlur, ariaDescribedby, }) {
50
50
  const sliderOutputRef = React.useRef(null);
51
51
  const sliderInputRef = React.useRef(null);
52
52
  const number = React.useMemo(() => (typeof value === 'number' ? value : parseFloat(value)), [value]);
@@ -77,7 +77,7 @@ const SliderControl = React.memo(function SliderControl({ id, text, value, eleme
77
77
  removeIsDraggingClass(outputElement);
78
78
  }
79
79
  }, [element.maxNumber, element.minNumber, number, removeIsDraggingClass]);
80
- return (_jsxs("div", { className: "control", children: [_jsx("output", { ref: sliderOutputRef, className: "ob-number__output cypress-number-output", htmlFor: id, children: text }), _jsx("input", { ref: sliderInputRef, id: id, name: element.name, className: "slider ob-input is-fullwidth cypress-slider-number-control is-large is-circle cypress-number-control", step: element.sliderIncrement ? element.sliderIncrement : 1, min: element.minNumber, max: element.maxNumber, value: number, type: "range", onChange: onChange, required: element.required, "aria-describedby": ariaDescribedby, "aria-required": element.required, disabled: element.readOnly, onBlur: onBlur })] }));
80
+ return (_jsxs("div", { className: "control", children: [_jsx("output", { ref: sliderOutputRef, className: "ob-number__output cypress-number-output", htmlFor: id, children: text }), _jsx("input", { ref: sliderInputRef, id: id, name: element.name, className: "slider ob-input is-fullwidth cypress-slider-number-control is-large is-circle cypress-number-control", step: element.sliderIncrement ? element.sliderIncrement : 1, min: element.minNumber, max: element.maxNumber, value: number, type: "range", onChange: onChange, required: element.required, "aria-describedby": ariaDescribedby, "aria-required": element.required, disabled: readOnly, onBlur: onBlur })] }));
81
81
  });
82
82
  export default React.memo(FormElementNumber);
83
83
  //# sourceMappingURL=FormElementNumber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementNumber.js","sourceRoot":"","sources":["../../src/form-elements/FormElementNumber.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport _debounce from 'lodash.debounce'\nimport LookupButton from '../components/renderer/LookupButton'\nimport { FormTypes } from '@oneblink/types'\nimport { localisationService } from '../apps'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useIsPageVisible from '../hooks/useIsPageVisible'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport MaterialIcon from '../components/MaterialIcon'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\ntype Props = {\n id: string\n element: FormTypes.NumberElement\n value: unknown\n onChange: FormElementValueChangeHandler<number>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nfunction FormElementNumber({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isPageVisible = useIsPageVisible()\n\n const text = React.useMemo(() => {\n if (typeof value !== 'number') {\n return ''\n }\n if (element.displayAsCurrency) {\n return localisationService.formatCurrency(value)\n }\n return value.toString()\n }, [value, element.displayAsCurrency])\n const handleChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(event.target.value)\n onChange(element, {\n value: isNaN(newValue) ? undefined : newValue,\n })\n },\n [element, onChange],\n )\n const htmlInputElementRef = React.useRef<HTMLInputElement>(null)\n\n //this onWheel callback prevents numbers changing while scrolling\n const handleWheel = React.useCallback(() => {\n if (htmlInputElementRef.current !== document.activeElement) {\n return\n }\n htmlInputElementRef.current?.blur()\n setTimeout(() => {\n htmlInputElementRef.current?.focus()\n })\n }, [])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-number-element\">\n <FormElementLabelContainer\n className=\"ob-number\"\n id={id}\n element={element}\n required={element.required}\n >\n {!element.isSlider ? (\n <div className=\"field has-addons\">\n <div className=\"control is-expanded has-icons-right\">\n <input\n type=\"number\"\n placeholder={element.placeholderValue}\n id={id}\n value={typeof value === 'number' ? value : ''}\n name={element.name}\n className=\"input ob-input cypress-number-control\"\n onChange={handleChange}\n required={element.required}\n disabled={element.readOnly}\n onBlur={setIsDirty}\n ref={htmlInputElementRef}\n onWheel={handleWheel}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n <span className=\"ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5\">\n {element.displayAsCurrency ? 'attach_money' : 'tag'}\n </MaterialIcon>\n </span>\n </div>\n {!!element.readOnly && !!text && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={text}\n />\n </div>\n )}\n <LookupButton\n isInputButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n overrideRequiredMessage={undefined}\n />\n </div>\n ) : isPageVisible ? (\n <SliderControl\n id={id}\n text={text}\n value={value}\n element={element}\n onChange={handleChange}\n onBlur={setIsDirty}\n ariaDescribedby={ariaDescribedby}\n />\n ) : undefined}\n\n {isDisplayingValidationMessage && (\n <FormElementValidationMessage message={validationMessage} />\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nconst sliderBubbleWidthInPixels = 24\n\nconst SliderControl = React.memo(function SliderControl({\n id,\n text,\n value,\n element,\n onChange,\n onBlur,\n ariaDescribedby,\n}: {\n id: string\n text: string\n value: unknown\n element: FormTypes.NumberElement\n ariaDescribedby: string | undefined\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => unknown\n onBlur: () => void\n}) {\n const sliderOutputRef = React.useRef<HTMLOutputElement>(null)\n const sliderInputRef = React.useRef<HTMLInputElement>(null)\n\n const number = React.useMemo(\n () => (typeof value === 'number' ? value : parseFloat(value as string)),\n [value],\n )\n\n const removeIsDraggingClass = React.useMemo(\n () =>\n _debounce((outputElement: HTMLOutputElement) => {\n if (outputElement.classList.contains('is-dragging')) {\n outputElement.classList.remove('is-dragging')\n }\n }, 500),\n [],\n )\n\n React.useEffect(() => {\n if (\n Number.isNaN(number) ||\n typeof element.maxNumber !== 'number' ||\n typeof element.minNumber !== 'number'\n ) {\n return\n }\n\n const outputElement = sliderOutputRef.current\n const inputElement = sliderInputRef.current\n if (outputElement && inputElement) {\n const range = element.maxNumber - element.minNumber\n const percentage = (number - element.minNumber) / range\n const inputWidth = inputElement.getBoundingClientRect().width\n const outputWidth = outputElement.getBoundingClientRect().width\n const sliderBubbleOffSetPixels =\n (percentage - 0.5) * -sliderBubbleWidthInPixels\n\n outputElement.style.left = `${percentage * inputWidth}px`\n outputElement.style.marginLeft = `-${\n outputWidth / 2 - sliderBubbleOffSetPixels\n }px`\n\n if (!outputElement.classList.contains('is-dragging')) {\n outputElement.classList.add('is-dragging')\n }\n removeIsDraggingClass(outputElement)\n }\n }, [element.maxNumber, element.minNumber, number, removeIsDraggingClass])\n\n return (\n <div className=\"control\">\n <output\n ref={sliderOutputRef}\n className=\"ob-number__output cypress-number-output\"\n htmlFor={id}\n >\n {text}\n </output>\n <input\n ref={sliderInputRef}\n id={id}\n name={element.name}\n className=\"slider ob-input is-fullwidth cypress-slider-number-control is-large is-circle cypress-number-control\"\n step={element.sliderIncrement ? element.sliderIncrement : 1}\n min={element.minNumber}\n max={element.maxNumber}\n value={number}\n type=\"range\"\n onChange={onChange}\n required={element.required}\n aria-describedby={ariaDescribedby}\n aria-required={element.required}\n disabled={element.readOnly}\n onBlur={onBlur}\n />\n </div>\n )\n})\n\nexport default React.memo(FormElementNumber)\n"]}
1
+ {"version":3,"file":"FormElementNumber.js","sourceRoot":"","sources":["../../src/form-elements/FormElementNumber.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport _debounce from 'lodash.debounce'\nimport LookupButton from '../components/renderer/LookupButton'\nimport { FormTypes } from '@oneblink/types'\nimport { localisationService } from '../apps'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useIsPageVisible from '../hooks/useIsPageVisible'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport MaterialIcon from '../components/MaterialIcon'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\ntype Props = {\n id: string\n element: FormTypes.NumberElement\n readOnly: boolean\n value: unknown\n onChange: FormElementValueChangeHandler<number>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nfunction FormElementNumber({\n id,\n element,\n readOnly,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isPageVisible = useIsPageVisible()\n\n const text = React.useMemo(() => {\n if (typeof value !== 'number') {\n return ''\n }\n if (element.displayAsCurrency) {\n return localisationService.formatCurrency(value)\n }\n return value.toString()\n }, [value, element.displayAsCurrency])\n const handleChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(event.target.value)\n onChange(element, {\n value: isNaN(newValue) ? undefined : newValue,\n })\n },\n [element, onChange],\n )\n const htmlInputElementRef = React.useRef<HTMLInputElement>(null)\n\n //this onWheel callback prevents numbers changing while scrolling\n const handleWheel = React.useCallback(() => {\n if (htmlInputElementRef.current !== document.activeElement) {\n return\n }\n htmlInputElementRef.current?.blur()\n setTimeout(() => {\n htmlInputElementRef.current?.focus()\n })\n }, [])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-number-element\">\n <FormElementLabelContainer\n className=\"ob-number\"\n id={id}\n element={element}\n required={element.required}\n >\n {!element.isSlider ? (\n <div className=\"field has-addons\">\n <div className=\"control is-expanded has-icons-right\">\n <input\n type=\"number\"\n placeholder={element.placeholderValue}\n id={id}\n value={typeof value === 'number' ? value : ''}\n name={element.name}\n className=\"input ob-input cypress-number-control\"\n onChange={handleChange}\n required={element.required}\n disabled={readOnly}\n onBlur={setIsDirty}\n ref={htmlInputElementRef}\n onWheel={handleWheel}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n <span className=\"ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5\">\n {element.displayAsCurrency ? 'attach_money' : 'tag'}\n </MaterialIcon>\n </span>\n </div>\n {!!readOnly && !!text && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={text}\n />\n </div>\n )}\n <LookupButton\n isInputButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n overrideRequiredMessage={undefined}\n />\n </div>\n ) : isPageVisible ? (\n <SliderControl\n id={id}\n text={text}\n value={value}\n element={element}\n readOnly={readOnly}\n onChange={handleChange}\n onBlur={setIsDirty}\n ariaDescribedby={ariaDescribedby}\n />\n ) : undefined}\n\n {isDisplayingValidationMessage && (\n <FormElementValidationMessage message={validationMessage} />\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nconst sliderBubbleWidthInPixels = 24\n\nconst SliderControl = React.memo(function SliderControl({\n id,\n text,\n value,\n element,\n readOnly,\n onChange,\n onBlur,\n ariaDescribedby,\n}: {\n id: string\n text: string\n value: unknown\n element: FormTypes.NumberElement\n readOnly: boolean\n ariaDescribedby: string | undefined\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => unknown\n onBlur: () => void\n}) {\n const sliderOutputRef = React.useRef<HTMLOutputElement>(null)\n const sliderInputRef = React.useRef<HTMLInputElement>(null)\n\n const number = React.useMemo(\n () => (typeof value === 'number' ? value : parseFloat(value as string)),\n [value],\n )\n\n const removeIsDraggingClass = React.useMemo(\n () =>\n _debounce((outputElement: HTMLOutputElement) => {\n if (outputElement.classList.contains('is-dragging')) {\n outputElement.classList.remove('is-dragging')\n }\n }, 500),\n [],\n )\n\n React.useEffect(() => {\n if (\n Number.isNaN(number) ||\n typeof element.maxNumber !== 'number' ||\n typeof element.minNumber !== 'number'\n ) {\n return\n }\n\n const outputElement = sliderOutputRef.current\n const inputElement = sliderInputRef.current\n if (outputElement && inputElement) {\n const range = element.maxNumber - element.minNumber\n const percentage = (number - element.minNumber) / range\n const inputWidth = inputElement.getBoundingClientRect().width\n const outputWidth = outputElement.getBoundingClientRect().width\n const sliderBubbleOffSetPixels =\n (percentage - 0.5) * -sliderBubbleWidthInPixels\n\n outputElement.style.left = `${percentage * inputWidth}px`\n outputElement.style.marginLeft = `-${\n outputWidth / 2 - sliderBubbleOffSetPixels\n }px`\n\n if (!outputElement.classList.contains('is-dragging')) {\n outputElement.classList.add('is-dragging')\n }\n removeIsDraggingClass(outputElement)\n }\n }, [element.maxNumber, element.minNumber, number, removeIsDraggingClass])\n\n return (\n <div className=\"control\">\n <output\n ref={sliderOutputRef}\n className=\"ob-number__output cypress-number-output\"\n htmlFor={id}\n >\n {text}\n </output>\n <input\n ref={sliderInputRef}\n id={id}\n name={element.name}\n className=\"slider ob-input is-fullwidth cypress-slider-number-control is-large is-circle cypress-number-control\"\n step={element.sliderIncrement ? element.sliderIncrement : 1}\n min={element.minNumber}\n max={element.maxNumber}\n value={number}\n type=\"range\"\n onChange={onChange}\n required={element.required}\n aria-describedby={ariaDescribedby}\n aria-required={element.required}\n disabled={readOnly}\n onBlur={onBlur}\n />\n </div>\n )\n})\n\nexport default React.memo(FormElementNumber)\n"]}
@@ -5,13 +5,14 @@ type Props = {
5
5
  formId: number;
6
6
  id: string;
7
7
  element: FormTypes.PointAddressElement;
8
+ readOnly: boolean;
8
9
  value: PointTypes.PointAddress | undefined;
9
10
  displayValidationMessage: boolean;
10
11
  validationMessage: string | undefined;
11
12
  onChange: FormElementValueChangeHandler<PointTypes.PointAddress>;
12
13
  autocompleteAttributes?: string;
13
14
  } & IsDirtyProps;
14
- declare function FormElementPointAddress({ formId, id, element, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ declare function FormElementPointAddress({ formId, id, element, readOnly, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }: Props): import("react/jsx-runtime").JSX.Element;
15
16
  export declare function PointAddressGridItem({ label, classNameSuffix, value, }: {
16
17
  label: string;
17
18
  classNameSuffix: string;
@@ -9,7 +9,7 @@ import { Collapse } from '@mui/material';
9
9
  import { NotificationGrid, NotificationGridItem, } from '../components/NotificationGrid';
10
10
  import FormElementValidationMessage from '../components/renderer/FormElementValidationMessage';
11
11
  const pointAddressClass = 'ob-point-address';
12
- function FormElementPointAddress({ formId, id, element, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }) {
12
+ function FormElementPointAddress({ formId, id, element, readOnly, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }) {
13
13
  var _a, _b, _c;
14
14
  const ariaDescribedby = useElementAriaDescribedby(id, element);
15
15
  const isMounted = useIsMounted();
@@ -69,7 +69,7 @@ function FormElementPointAddress({ formId, id, element, value, displayValidation
69
69
  // we don't need this to run again when the label changes
70
70
  // eslint-disable-next-line react-hooks/exhaustive-deps
71
71
  }, [value]);
72
- return (_jsxs("div", { className: "cypress-point-address-element", children: [_jsx(FormElementLabelContainer, { className: `${pointAddressClass} ob-autocomplete`, element: element, id: id, required: element.required, children: _jsx(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly || isLoadingAddressDetails, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, isLoading: isLoadingAddressDetails, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes }) }), error && (_jsx(FormElementValidationMessage, { message: error.toString(), className: "cypress-point-address-details-error-message" })), _jsx(Collapse, { in: !!value && !!element.isDisplayingAddressInformation, children: _jsxs(NotificationGrid, { className: `${pointAddressClass}__record-display has-margin-top-6`, gridClassName: `${pointAddressClass}__container`, children: [_jsx(PointAddressGridItem, { label: "Local Government Area", value: (_a = value === null || value === void 0 ? void 0 : value.localGovernmentArea) === null || _a === void 0 ? void 0 : _a.lgaName, classNameSuffix: "local-government-area-name" }), _jsx(PointAddressGridItem, { label: "Lot / Section / Plan No.", value: (_b = value === null || value === void 0 ? void 0 : value.addressDetails) === null || _b === void 0 ? void 0 : _b.cadastralIdentifier, classNameSuffix: "cadastral-identifier" }), (_c = value === null || value === void 0 ? void 0 : value.cadastralParcels) === null || _c === void 0 ? void 0 : _c.map((cadastralParcel, index) => {
72
+ return (_jsxs("div", { className: "cypress-point-address-element", children: [_jsx(FormElementLabelContainer, { className: `${pointAddressClass} ob-autocomplete`, element: element, id: id, required: element.required, children: _jsx(AutocompleteDropdown, { id: id, label: label, disabled: readOnly || isLoadingAddressDetails, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, isLoading: isLoadingAddressDetails, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes }) }), error && (_jsx(FormElementValidationMessage, { message: error.toString(), className: "cypress-point-address-details-error-message" })), _jsx(Collapse, { in: !!value && !!element.isDisplayingAddressInformation, children: _jsxs(NotificationGrid, { className: `${pointAddressClass}__record-display has-margin-top-6`, gridClassName: `${pointAddressClass}__container`, children: [_jsx(PointAddressGridItem, { label: "Local Government Area", value: (_a = value === null || value === void 0 ? void 0 : value.localGovernmentArea) === null || _a === void 0 ? void 0 : _a.lgaName, classNameSuffix: "local-government-area-name" }), _jsx(PointAddressGridItem, { label: "Lot / Section / Plan No.", value: (_b = value === null || value === void 0 ? void 0 : value.addressDetails) === null || _b === void 0 ? void 0 : _b.cadastralIdentifier, classNameSuffix: "cadastral-identifier" }), (_c = value === null || value === void 0 ? void 0 : value.cadastralParcels) === null || _c === void 0 ? void 0 : _c.map((cadastralParcel, index) => {
73
73
  var _a;
74
74
  return (_jsx(PointAddressGridItem, { label: "Lot / DP Numbers", value: (_a = cadastralParcel === null || cadastralParcel === void 0 ? void 0 : cadastralParcel.parcelId) === null || _a === void 0 ? void 0 : _a.join(', '), classNameSuffix: "cadastral-parcel" }, cadastralParcel.propId || index));
75
75
  })] }) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementPointAddress.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointAddress.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formService } from '../apps'\n\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport useIsMounted from '../hooks/useIsMounted'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { Collapse } from '@mui/material'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.PointAddressElement\n value: PointTypes.PointAddress | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointAddress>\n autocompleteAttributes?: string\n} & IsDirtyProps\n\ntype AddressType = 'all' | 'physical' | 'mailing'\nconst pointAddressClass = 'ob-point-address'\n\nfunction FormElementPointAddress({\n formId,\n id,\n element,\n value,\n displayValidationMessage,\n validationMessage,\n onChange,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isMounted = useIsMounted()\n const [label, setLabel] = React.useState('')\n const [error, setError] = React.useState<Error | undefined>()\n const [isLoadingAddressDetails, setIsLoadingAddressDetails] =\n React.useState(false)\n\n const handleSearch = React.useCallback(\n async (address: string, abortSignal: AbortSignal) => {\n setError(undefined)\n\n const params: {\n address: string\n maxNumberOfResults?: number\n stateTerritory?: string\n addressType?: AddressType\n } = {\n address,\n maxNumberOfResults: 10,\n }\n\n if (element.stateTerritoryFilter) {\n params.stateTerritory = element.stateTerritoryFilter.join(',')\n }\n if (element.addressTypeFilter) {\n let addressType: AddressType = 'all'\n if (element.addressTypeFilter.length === 1) {\n addressType = element.addressTypeFilter[0] as AddressType\n }\n params.addressType = addressType\n }\n\n const result = await formService.searchPointAddresses(\n formId,\n params,\n abortSignal,\n )\n\n return result.map((suggestion, index) => ({\n value: suggestion.id || index.toString(),\n label: suggestion.address || index.toString(),\n }))\n },\n [element.addressTypeFilter, element.stateTerritoryFilter, formId],\n )\n\n const handleChange = React.useCallback(\n async (addressId: string | undefined) => {\n if (!addressId) {\n onChange(element, { value: undefined })\n return\n }\n\n setIsLoadingAddressDetails(true)\n try {\n const result = await formService.getPointAddress(formId, addressId)\n onChange(element, { value: result })\n } catch (newError) {\n if (isMounted.current) {\n setError(newError as Error)\n }\n }\n if (isMounted.current) {\n setIsLoadingAddressDetails(false)\n }\n },\n [isMounted, onChange, element, formId],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel = value.addressDetails?.formattedAddress || value.addressId\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // we don't need this to run again when the label changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-point-address-element\">\n <FormElementLabelContainer\n className={`${pointAddressClass} ob-autocomplete`}\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly || isLoadingAddressDetails}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={handleChange}\n isLoading={isLoadingAddressDetails}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={4}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <FormElementValidationMessage\n message={error.toString()}\n className=\"cypress-point-address-details-error-message\"\n />\n )}\n\n <Collapse in={!!value && !!element.isDisplayingAddressInformation}>\n <NotificationGrid\n className={`${pointAddressClass}__record-display has-margin-top-6`}\n gridClassName={`${pointAddressClass}__container`}\n >\n <PointAddressGridItem\n label=\"Local Government Area\"\n value={value?.localGovernmentArea?.lgaName}\n classNameSuffix=\"local-government-area-name\"\n />\n <PointAddressGridItem\n label=\"Lot / Section / Plan No.\"\n value={value?.addressDetails?.cadastralIdentifier}\n classNameSuffix=\"cadastral-identifier\"\n />\n {value?.cadastralParcels?.map((cadastralParcel, index) => (\n <PointAddressGridItem\n key={cadastralParcel.propId || index}\n label=\"Lot / DP Numbers\"\n value={cadastralParcel?.parcelId?.join(', ')}\n classNameSuffix=\"cadastral-parcel\"\n />\n ))}\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport function PointAddressGridItem({\n label,\n classNameSuffix,\n value,\n}: {\n label: string\n classNameSuffix: string\n value: string | undefined\n}) {\n return (\n <NotificationGridItem\n className={`${pointAddressClass}__container-${classNameSuffix}`}\n value={value}\n label={label}\n labelClassName={`${pointAddressClass}__detail-label`}\n valueClassName={`${pointAddressClass}__detail-value`}\n />\n )\n}\n\nexport default React.memo(FormElementPointAddress)\n"]}
1
+ {"version":3,"file":"FormElementPointAddress.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointAddress.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formService } from '../apps'\n\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport useIsMounted from '../hooks/useIsMounted'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { Collapse } from '@mui/material'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.PointAddressElement\n readOnly: boolean\n value: PointTypes.PointAddress | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointAddress>\n autocompleteAttributes?: string\n} & IsDirtyProps\n\ntype AddressType = 'all' | 'physical' | 'mailing'\nconst pointAddressClass = 'ob-point-address'\n\nfunction FormElementPointAddress({\n formId,\n id,\n element,\n readOnly,\n value,\n displayValidationMessage,\n validationMessage,\n onChange,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isMounted = useIsMounted()\n const [label, setLabel] = React.useState('')\n const [error, setError] = React.useState<Error | undefined>()\n const [isLoadingAddressDetails, setIsLoadingAddressDetails] =\n React.useState(false)\n\n const handleSearch = React.useCallback(\n async (address: string, abortSignal: AbortSignal) => {\n setError(undefined)\n\n const params: {\n address: string\n maxNumberOfResults?: number\n stateTerritory?: string\n addressType?: AddressType\n } = {\n address,\n maxNumberOfResults: 10,\n }\n\n if (element.stateTerritoryFilter) {\n params.stateTerritory = element.stateTerritoryFilter.join(',')\n }\n if (element.addressTypeFilter) {\n let addressType: AddressType = 'all'\n if (element.addressTypeFilter.length === 1) {\n addressType = element.addressTypeFilter[0] as AddressType\n }\n params.addressType = addressType\n }\n\n const result = await formService.searchPointAddresses(\n formId,\n params,\n abortSignal,\n )\n\n return result.map((suggestion, index) => ({\n value: suggestion.id || index.toString(),\n label: suggestion.address || index.toString(),\n }))\n },\n [element.addressTypeFilter, element.stateTerritoryFilter, formId],\n )\n\n const handleChange = React.useCallback(\n async (addressId: string | undefined) => {\n if (!addressId) {\n onChange(element, { value: undefined })\n return\n }\n\n setIsLoadingAddressDetails(true)\n try {\n const result = await formService.getPointAddress(formId, addressId)\n onChange(element, { value: result })\n } catch (newError) {\n if (isMounted.current) {\n setError(newError as Error)\n }\n }\n if (isMounted.current) {\n setIsLoadingAddressDetails(false)\n }\n },\n [isMounted, onChange, element, formId],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel = value.addressDetails?.formattedAddress || value.addressId\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // we don't need this to run again when the label changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-point-address-element\">\n <FormElementLabelContainer\n className={`${pointAddressClass} ob-autocomplete`}\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={readOnly || isLoadingAddressDetails}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={handleChange}\n isLoading={isLoadingAddressDetails}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={4}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <FormElementValidationMessage\n message={error.toString()}\n className=\"cypress-point-address-details-error-message\"\n />\n )}\n\n <Collapse in={!!value && !!element.isDisplayingAddressInformation}>\n <NotificationGrid\n className={`${pointAddressClass}__record-display has-margin-top-6`}\n gridClassName={`${pointAddressClass}__container`}\n >\n <PointAddressGridItem\n label=\"Local Government Area\"\n value={value?.localGovernmentArea?.lgaName}\n classNameSuffix=\"local-government-area-name\"\n />\n <PointAddressGridItem\n label=\"Lot / Section / Plan No.\"\n value={value?.addressDetails?.cadastralIdentifier}\n classNameSuffix=\"cadastral-identifier\"\n />\n {value?.cadastralParcels?.map((cadastralParcel, index) => (\n <PointAddressGridItem\n key={cadastralParcel.propId || index}\n label=\"Lot / DP Numbers\"\n value={cadastralParcel?.parcelId?.join(', ')}\n classNameSuffix=\"cadastral-parcel\"\n />\n ))}\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport function PointAddressGridItem({\n label,\n classNameSuffix,\n value,\n}: {\n label: string\n classNameSuffix: string\n value: string | undefined\n}) {\n return (\n <NotificationGridItem\n className={`${pointAddressClass}__container-${classNameSuffix}`}\n value={value}\n label={label}\n labelClassName={`${pointAddressClass}__detail-label`}\n valueClassName={`${pointAddressClass}__detail-value`}\n />\n )\n}\n\nexport default React.memo(FormElementPointAddress)\n"]}
@@ -5,12 +5,13 @@ type Props = {
5
5
  formId: number;
6
6
  id: string;
7
7
  element: FormTypes.PointAddressV3Element;
8
+ readOnly: boolean;
8
9
  value: PointTypes.PointAddressV3GetAddressDetailsResponse | undefined;
9
10
  displayValidationMessage: boolean;
10
11
  validationMessage: string | undefined;
11
12
  onChange: FormElementValueChangeHandler<PointTypes.PointAddressV3GetAddressDetailsResponse>;
12
13
  autocompleteAttributes?: string;
13
14
  } & IsDirtyProps;
14
- declare function FormElementPointAddressV3({ formId, id, element, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ declare function FormElementPointAddressV3({ formId, id, element, readOnly, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }: Props): import("react/jsx-runtime").JSX.Element;
15
16
  declare const _default: React.MemoExoticComponent<typeof FormElementPointAddressV3>;
16
17
  export default _default;
@@ -10,7 +10,7 @@ import { NotificationGrid } from '../components/NotificationGrid';
10
10
  import FormElementValidationMessage from '../components/renderer/FormElementValidationMessage';
11
11
  import { PointAddressGridItem } from './FormElementPointAddress';
12
12
  const pointAddressClass = 'ob-point-address-v3';
13
- function FormElementPointAddressV3({ formId, id, element, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }) {
13
+ function FormElementPointAddressV3({ formId, id, element, readOnly, value, displayValidationMessage, validationMessage, onChange, isDirty, setIsDirty, autocompleteAttributes, }) {
14
14
  var _a, _b, _c, _d, _e;
15
15
  const ariaDescribedby = useElementAriaDescribedby(id, element);
16
16
  const isMounted = useIsMounted();
@@ -85,7 +85,7 @@ function FormElementPointAddressV3({ formId, id, element, value, displayValidati
85
85
  // we don't need this to run again when the label changes
86
86
  // eslint-disable-next-line react-hooks/exhaustive-deps
87
87
  }, [value]);
88
- return (_jsxs("div", { className: "cypress-point-address-v3-element", children: [_jsx(FormElementLabelContainer, { className: `${pointAddressClass} ob-autocomplete`, element: element, id: id, required: element.required, children: _jsx(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly || isLoadingAddressDetails, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, isLoading: isLoadingAddressDetails, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes }) }), error && (_jsx(FormElementValidationMessage, { message: error.toString(), className: "cypress-point-address-v3-details-error-message" })), _jsx(Collapse, { in: !!value && !!element.isDisplayingAddressInformation, children: _jsxs(NotificationGrid, { className: `${pointAddressClass}__record-display has-margin-top-6`, gridClassName: `${pointAddressClass}__container`, children: [_jsx(PointAddressGridItem, { label: "Local Government Area", value: (_b = (_a = value === null || value === void 0 ? void 0 : value.properties) === null || _a === void 0 ? void 0 : _a.localGovernmentArea) === null || _b === void 0 ? void 0 : _b.lgaName, classNameSuffix: "local-government-area-name" }), _jsx(PointAddressGridItem, { label: "Lot / Section / Plan No.", value: (_c = value === null || value === void 0 ? void 0 : value.properties) === null || _c === void 0 ? void 0 : _c.cadastralIdentifier, classNameSuffix: "cadastral-identifier" }), (_e = (_d = value === null || value === void 0 ? void 0 : value.properties) === null || _d === void 0 ? void 0 : _d.propertyBundle) === null || _e === void 0 ? void 0 : _e.map((property) => {
88
+ return (_jsxs("div", { className: "cypress-point-address-v3-element", children: [_jsx(FormElementLabelContainer, { className: `${pointAddressClass} ob-autocomplete`, element: element, id: id, required: element.required, children: _jsx(AutocompleteDropdown, { id: id, label: label, disabled: readOnly || isLoadingAddressDetails, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, isLoading: isLoadingAddressDetails, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes }) }), error && (_jsx(FormElementValidationMessage, { message: error.toString(), className: "cypress-point-address-v3-details-error-message" })), _jsx(Collapse, { in: !!value && !!element.isDisplayingAddressInformation, children: _jsxs(NotificationGrid, { className: `${pointAddressClass}__record-display has-margin-top-6`, gridClassName: `${pointAddressClass}__container`, children: [_jsx(PointAddressGridItem, { label: "Local Government Area", value: (_b = (_a = value === null || value === void 0 ? void 0 : value.properties) === null || _a === void 0 ? void 0 : _a.localGovernmentArea) === null || _b === void 0 ? void 0 : _b.lgaName, classNameSuffix: "local-government-area-name" }), _jsx(PointAddressGridItem, { label: "Lot / Section / Plan No.", value: (_c = value === null || value === void 0 ? void 0 : value.properties) === null || _c === void 0 ? void 0 : _c.cadastralIdentifier, classNameSuffix: "cadastral-identifier" }), (_e = (_d = value === null || value === void 0 ? void 0 : value.properties) === null || _d === void 0 ? void 0 : _d.propertyBundle) === null || _e === void 0 ? void 0 : _e.map((property) => {
89
89
  var _a;
90
90
  return (_jsx(PointAddressGridItem, { label: "Lot / DP Numbers", value: (_a = property.parcelIds) === null || _a === void 0 ? void 0 : _a.join(', '), classNameSuffix: "cadastral-parcel" }, property.propertyPid));
91
91
  })] }) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementPointAddressV3.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointAddressV3.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formService } from '../apps'\n\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport useIsMounted from '../hooks/useIsMounted'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { Collapse } from '@mui/material'\nimport { NotificationGrid } from '../components/NotificationGrid'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\nimport { PointAddressGridItem } from './FormElementPointAddress'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.PointAddressV3Element\n value: PointTypes.PointAddressV3GetAddressDetailsResponse | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointAddressV3GetAddressDetailsResponse>\n autocompleteAttributes?: string\n} & IsDirtyProps\n\ntype AddressType = 'all' | 'physical' | 'mailing'\nconst pointAddressClass = 'ob-point-address-v3'\n\nfunction FormElementPointAddressV3({\n formId,\n id,\n element,\n value,\n displayValidationMessage,\n validationMessage,\n onChange,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isMounted = useIsMounted()\n const [label, setLabel] = React.useState('')\n const [error, setError] = React.useState<Error | undefined>()\n const [isLoadingAddressDetails, setIsLoadingAddressDetails] =\n React.useState(false)\n\n const handleSearch = React.useCallback(\n async (address: string, abortSignal: AbortSignal) => {\n setError(undefined)\n\n const params: {\n address: string\n maxNumberOfResults?: number\n stateFilter?: string\n excludeAliases?: boolean\n addressType?: AddressType\n dataset?: string\n } = {\n address,\n maxNumberOfResults: 10,\n }\n\n if (element.stateTerritoryFilter) {\n params.stateFilter = element.stateTerritoryFilter.join(',')\n }\n if (element.addressTypeFilter) {\n let addressType: AddressType = 'all'\n if (element.addressTypeFilter.length === 1) {\n addressType = element.addressTypeFilter[0] as AddressType\n }\n params.addressType = addressType\n }\n if (element.datasetFilter?.length) {\n params.dataset = element.datasetFilter.join(',')\n }\n if (element.excludeAliases) {\n params.excludeAliases = true\n }\n\n const { suggest } = await formService.searchPointV3Addresses(\n formId,\n params,\n abortSignal,\n )\n\n return (suggest || []).map((suggestion, index) => ({\n value: suggestion.id || index.toString(),\n label: suggestion.address || index.toString(),\n }))\n },\n [\n element.addressTypeFilter,\n element.datasetFilter,\n element.excludeAliases,\n element.stateTerritoryFilter,\n formId,\n ],\n )\n\n const handleChange = React.useCallback(\n async (addressId: string | undefined) => {\n if (!addressId) {\n onChange(element, { value: undefined })\n return\n }\n\n setIsLoadingAddressDetails(true)\n try {\n const result = await formService.getPointV3Address(formId, {\n addressId,\n })\n onChange(element, { value: result })\n } catch (newError) {\n if (isMounted.current) {\n setError(newError as Error)\n }\n }\n if (isMounted.current) {\n setIsLoadingAddressDetails(false)\n }\n },\n [isMounted, onChange, element, formId],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel =\n value.properties?.formattedAddress || value.properties?.addressId\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // we don't need this to run again when the label changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-point-address-v3-element\">\n <FormElementLabelContainer\n className={`${pointAddressClass} ob-autocomplete`}\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly || isLoadingAddressDetails}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={handleChange}\n isLoading={isLoadingAddressDetails}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={4}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <FormElementValidationMessage\n message={error.toString()}\n className=\"cypress-point-address-v3-details-error-message\"\n />\n )}\n\n <Collapse in={!!value && !!element.isDisplayingAddressInformation}>\n <NotificationGrid\n className={`${pointAddressClass}__record-display has-margin-top-6`}\n gridClassName={`${pointAddressClass}__container`}\n >\n <PointAddressGridItem\n label=\"Local Government Area\"\n value={value?.properties?.localGovernmentArea?.lgaName}\n classNameSuffix=\"local-government-area-name\"\n />\n <PointAddressGridItem\n label=\"Lot / Section / Plan No.\"\n value={value?.properties?.cadastralIdentifier}\n classNameSuffix=\"cadastral-identifier\"\n />\n {value?.properties?.propertyBundle?.map((property) => (\n <PointAddressGridItem\n key={property.propertyPid}\n label=\"Lot / DP Numbers\"\n value={property.parcelIds?.join(', ')}\n classNameSuffix=\"cadastral-parcel\"\n />\n ))}\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementPointAddressV3)\n"]}
1
+ {"version":3,"file":"FormElementPointAddressV3.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointAddressV3.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formService } from '../apps'\n\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport useIsMounted from '../hooks/useIsMounted'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { Collapse } from '@mui/material'\nimport { NotificationGrid } from '../components/NotificationGrid'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\nimport { PointAddressGridItem } from './FormElementPointAddress'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.PointAddressV3Element\n readOnly: boolean\n value: PointTypes.PointAddressV3GetAddressDetailsResponse | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointAddressV3GetAddressDetailsResponse>\n autocompleteAttributes?: string\n} & IsDirtyProps\n\ntype AddressType = 'all' | 'physical' | 'mailing'\nconst pointAddressClass = 'ob-point-address-v3'\n\nfunction FormElementPointAddressV3({\n formId,\n id,\n element,\n readOnly,\n value,\n displayValidationMessage,\n validationMessage,\n onChange,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isMounted = useIsMounted()\n const [label, setLabel] = React.useState('')\n const [error, setError] = React.useState<Error | undefined>()\n const [isLoadingAddressDetails, setIsLoadingAddressDetails] =\n React.useState(false)\n\n const handleSearch = React.useCallback(\n async (address: string, abortSignal: AbortSignal) => {\n setError(undefined)\n\n const params: {\n address: string\n maxNumberOfResults?: number\n stateFilter?: string\n excludeAliases?: boolean\n addressType?: AddressType\n dataset?: string\n } = {\n address,\n maxNumberOfResults: 10,\n }\n\n if (element.stateTerritoryFilter) {\n params.stateFilter = element.stateTerritoryFilter.join(',')\n }\n if (element.addressTypeFilter) {\n let addressType: AddressType = 'all'\n if (element.addressTypeFilter.length === 1) {\n addressType = element.addressTypeFilter[0] as AddressType\n }\n params.addressType = addressType\n }\n if (element.datasetFilter?.length) {\n params.dataset = element.datasetFilter.join(',')\n }\n if (element.excludeAliases) {\n params.excludeAliases = true\n }\n\n const { suggest } = await formService.searchPointV3Addresses(\n formId,\n params,\n abortSignal,\n )\n\n return (suggest || []).map((suggestion, index) => ({\n value: suggestion.id || index.toString(),\n label: suggestion.address || index.toString(),\n }))\n },\n [\n element.addressTypeFilter,\n element.datasetFilter,\n element.excludeAliases,\n element.stateTerritoryFilter,\n formId,\n ],\n )\n\n const handleChange = React.useCallback(\n async (addressId: string | undefined) => {\n if (!addressId) {\n onChange(element, { value: undefined })\n return\n }\n\n setIsLoadingAddressDetails(true)\n try {\n const result = await formService.getPointV3Address(formId, {\n addressId,\n })\n onChange(element, { value: result })\n } catch (newError) {\n if (isMounted.current) {\n setError(newError as Error)\n }\n }\n if (isMounted.current) {\n setIsLoadingAddressDetails(false)\n }\n },\n [isMounted, onChange, element, formId],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel =\n value.properties?.formattedAddress || value.properties?.addressId\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // we don't need this to run again when the label changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-point-address-v3-element\">\n <FormElementLabelContainer\n className={`${pointAddressClass} ob-autocomplete`}\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={readOnly || isLoadingAddressDetails}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={handleChange}\n isLoading={isLoadingAddressDetails}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={4}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <FormElementValidationMessage\n message={error.toString()}\n className=\"cypress-point-address-v3-details-error-message\"\n />\n )}\n\n <Collapse in={!!value && !!element.isDisplayingAddressInformation}>\n <NotificationGrid\n className={`${pointAddressClass}__record-display has-margin-top-6`}\n gridClassName={`${pointAddressClass}__container`}\n >\n <PointAddressGridItem\n label=\"Local Government Area\"\n value={value?.properties?.localGovernmentArea?.lgaName}\n classNameSuffix=\"local-government-area-name\"\n />\n <PointAddressGridItem\n label=\"Lot / Section / Plan No.\"\n value={value?.properties?.cadastralIdentifier}\n classNameSuffix=\"cadastral-identifier\"\n />\n {value?.properties?.propertyBundle?.map((property) => (\n <PointAddressGridItem\n key={property.propertyPid}\n label=\"Lot / DP Numbers\"\n value={property.parcelIds?.join(', ')}\n classNameSuffix=\"cadastral-parcel\"\n />\n ))}\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementPointAddressV3)\n"]}
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { FormTypes, PointTypes } from '@oneblink/types';
3
3
  import { FormElementValueChangeHandler, IsDirtyProps } from '../types/form';
4
- declare function FormElementPointCadastralParcel({ id, formId, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }: {
4
+ declare function FormElementPointCadastralParcel({ id, formId, element, readOnly, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }: {
5
5
  id: string;
6
6
  formId: number;
7
7
  element: FormTypes.PointCadastralParcelElement;
8
+ readOnly: boolean;
8
9
  value: PointTypes.PointCadastralParcelResponse | undefined;
9
10
  onChange: FormElementValueChangeHandler<PointTypes.PointCadastralParcelResponse>;
10
11
  displayValidationMessage: boolean;
@@ -11,7 +11,7 @@ import { NotificationGrid, NotificationGridItem, } from '../components/Notificat
11
11
  import MaterialIcon from '../components/MaterialIcon';
12
12
  import FormElementValidationMessage from '../components/renderer/FormElementValidationMessage';
13
13
  const pointCadastralParcelClass = 'ob-point-cadastral-parcel';
14
- function FormElementPointCadastralParcel({ id, formId, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }) {
14
+ function FormElementPointCadastralParcel({ id, formId, element, readOnly, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }) {
15
15
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
16
16
  const ariaDescribedby = useElementAriaDescribedby(id, element);
17
17
  const parcelId = (_b = (_a = value === null || value === void 0 ? void 0 : value.parcelBundle) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.parcelId;
@@ -76,7 +76,7 @@ function FormElementPointCadastralParcel({ id, formId, element, value, onChange,
76
76
  !isLoading) ||
77
77
  error) &&
78
78
  !isLookingUp;
79
- const hasCopyButton = !!value && !!element.readOnly;
79
+ const hasCopyButton = !!value && !!readOnly;
80
80
  return (_jsxs("div", { className: "cypress-point-cadastral-parcel-element", children: [_jsxs(FormElementLabelContainer, { className: pointCadastralParcelClass, id: id, element: element, required: element.required, children: [_jsxs("div", { className: clsx('field has-addons', {
81
81
  'no-addons-mobile': !hasCopyButton,
82
82
  }), children: [_jsxs("div", { className: clsx('control is-expanded has-icons-right', {
@@ -89,7 +89,7 @@ function FormElementPointCadastralParcel({ id, formId, element, value, onChange,
89
89
  value: undefined,
90
90
  });
91
91
  }
92
- }, required: element.required, disabled: element.readOnly, onBlur: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required }), !isLoading && (_jsx("span", { className: " ob-input-icon icon is-small is-right", children: value ? (_jsx(MaterialIcon, { className: "is-size-5 has-text-success", children: "check" })) : (error === null || error === void 0 ? void 0 : error.message) ? (_jsx(MaterialIcon, { className: "is-size-5 has-text-danger", children: "error" })) : (_jsx(MaterialIcon, { className: "is-size-5", children: "map" })) }))] }), hasCopyButton && (_jsx("div", { className: "control", children: _jsx(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: label }) }))] }), isDisplayingValidationMessage && (_jsx(FormElementValidationMessage, { message: (error === null || error === void 0 ? void 0 : error.message) || validationMessage }))] }), _jsx(Collapse, { in: !!(value === null || value === void 0 ? void 0 : value.features), children: _jsxs(NotificationGrid, { className: `${pointCadastralParcelClass}__record-display has-margin-top-6`, gridClassName: `${pointCadastralParcelClass}__container`, children: [_jsx(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-address`, value: (_e = (_d = (_c = value === null || value === void 0 ? void 0 : value.features) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.properties) === null || _e === void 0 ? void 0 : _e.formattedAddress, label: "Address", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` }), _jsx(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-lots`, value: (_l = (_k = (_j = (_h = (_g = (_f = value === null || value === void 0 ? void 0 : value.features) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.properties) === null || _h === void 0 ? void 0 : _h.propertyBundle) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.parcelIds) === null || _l === void 0 ? void 0 : _l.join(', '), label: "Lots", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` }), _jsx(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-local-government-area-name`, value: (_q = (_p = (_o = (_m = value === null || value === void 0 ? void 0 : value.features) === null || _m === void 0 ? void 0 : _m[0]) === null || _o === void 0 ? void 0 : _o.properties) === null || _p === void 0 ? void 0 : _p.localGovernmentArea) === null || _q === void 0 ? void 0 : _q.lgaName, label: "Local Government Area", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` })] }) })] }));
92
+ }, required: element.required, disabled: readOnly, onBlur: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required }), !isLoading && (_jsx("span", { className: " ob-input-icon icon is-small is-right", children: value ? (_jsx(MaterialIcon, { className: "is-size-5 has-text-success", children: "check" })) : (error === null || error === void 0 ? void 0 : error.message) ? (_jsx(MaterialIcon, { className: "is-size-5 has-text-danger", children: "error" })) : (_jsx(MaterialIcon, { className: "is-size-5", children: "map" })) }))] }), hasCopyButton && (_jsx("div", { className: "control", children: _jsx(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: label }) }))] }), isDisplayingValidationMessage && (_jsx(FormElementValidationMessage, { message: (error === null || error === void 0 ? void 0 : error.message) || validationMessage }))] }), _jsx(Collapse, { in: !!(value === null || value === void 0 ? void 0 : value.features), children: _jsxs(NotificationGrid, { className: `${pointCadastralParcelClass}__record-display has-margin-top-6`, gridClassName: `${pointCadastralParcelClass}__container`, children: [_jsx(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-address`, value: (_e = (_d = (_c = value === null || value === void 0 ? void 0 : value.features) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.properties) === null || _e === void 0 ? void 0 : _e.formattedAddress, label: "Address", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` }), _jsx(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-lots`, value: (_l = (_k = (_j = (_h = (_g = (_f = value === null || value === void 0 ? void 0 : value.features) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.properties) === null || _h === void 0 ? void 0 : _h.propertyBundle) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.parcelIds) === null || _l === void 0 ? void 0 : _l.join(', '), label: "Lots", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` }), _jsx(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-local-government-area-name`, value: (_q = (_p = (_o = (_m = value === null || value === void 0 ? void 0 : value.features) === null || _m === void 0 ? void 0 : _m[0]) === null || _o === void 0 ? void 0 : _o.properties) === null || _p === void 0 ? void 0 : _p.localGovernmentArea) === null || _q === void 0 ? void 0 : _q.lgaName, label: "Local Government Area", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` })] }) })] }));
93
93
  }
94
94
  export default React.memo(FormElementPointCadastralParcel);
95
95
  //# sourceMappingURL=FormElementPointCadastralParcel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementPointCadastralParcel.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointCadastralParcel.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { formService } from '../apps'\nimport { Collapse } from '@mui/material'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\nimport MaterialIcon from '../components/MaterialIcon'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\nconst pointCadastralParcelClass = 'ob-point-cadastral-parcel'\n\nfunction FormElementPointCadastralParcel({\n id,\n formId,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: {\n id: string\n formId: number\n element: FormTypes.PointCadastralParcelElement\n value: PointTypes.PointCadastralParcelResponse | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointCadastralParcelResponse>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const parcelId = value?.parcelBundle?.[0]?.parcelId\n const [label, setLabel] = React.useState(parcelId || '')\n const [{ isLoading, error }, setState] = React.useState<{\n isLoading: boolean\n error: Error | null\n }>({\n isLoading: false,\n error: null,\n })\n\n const loadCadastralParcel = React.useCallback(\n async (abortSignal: AbortSignal) => {\n if (!label || label === parcelId) {\n return\n }\n\n setState({\n isLoading: true,\n error: null,\n })\n\n try {\n console.log('Attempting to load NSW point cadastral parcel', {\n formId,\n parcelId: label,\n })\n const result = await formService.getPointCadastralParcel(\n formId,\n label,\n abortSignal,\n )\n if (!abortSignal.aborted) {\n onChange(element, {\n value: result,\n })\n setState({\n error: null,\n isLoading: false,\n })\n }\n } catch (err) {\n if (!abortSignal.aborted) {\n setState({\n isLoading: false,\n error: err as Error,\n })\n }\n }\n },\n [element, formId, label, onChange, parcelId],\n )\n\n React.useEffect(() => {\n const abortController = new AbortController()\n const timeoutId = setTimeout(() => {\n loadCadastralParcel(abortController.signal)\n }, 750)\n return () => {\n abortController.abort()\n clearTimeout(timeoutId)\n }\n }, [loadCadastralParcel])\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (parcelId && label !== parcelId) {\n setLabel(parcelId)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (((isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isLoading) ||\n error) &&\n !isLookingUp\n\n const hasCopyButton = !!value && !!element.readOnly\n return (\n <div className=\"cypress-point-cadastral-parcel-element\">\n <FormElementLabelContainer\n className={pointCadastralParcelClass}\n id={id}\n element={element}\n required={element.required}\n >\n <div\n className={clsx('field has-addons', {\n 'no-addons-mobile': !hasCopyButton,\n })}\n >\n <div\n className={clsx('control is-expanded has-icons-right', {\n 'is-loading': isLoading,\n 'has-icons-right': !isLoading,\n })}\n >\n <input\n type=\"text\"\n id={id}\n name={element.name}\n className=\"input ob-input cypress-point-cadastral-parcel-control\"\n placeholder={element.placeholderValue}\n value={label}\n onChange={(e) => {\n setLabel(e.target.value)\n if (value) {\n onChange(element, {\n value: undefined,\n })\n }\n }}\n required={element.required}\n disabled={element.readOnly}\n onBlur={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n {!isLoading && (\n <span className=\" ob-input-icon icon is-small is-right\">\n {value ? (\n <MaterialIcon className=\"is-size-5 has-text-success\">\n check\n </MaterialIcon>\n ) : error?.message ? (\n <MaterialIcon className=\"is-size-5 has-text-danger\">\n error\n </MaterialIcon>\n ) : (\n <MaterialIcon className=\"is-size-5\">map</MaterialIcon>\n )}\n </span>\n )}\n </div>\n {hasCopyButton && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={label}\n />\n </div>\n )}\n </div>\n {isDisplayingValidationMessage && (\n <FormElementValidationMessage\n message={error?.message || validationMessage}\n />\n )}\n </FormElementLabelContainer>\n\n <Collapse in={!!value?.features}>\n <NotificationGrid\n className={`${pointCadastralParcelClass}__record-display has-margin-top-6`}\n gridClassName={`${pointCadastralParcelClass}__container`}\n >\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-address`}\n value={value?.features?.[0]?.properties?.formattedAddress}\n label=\"Address\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-lots`}\n value={value?.features?.[0]?.properties?.propertyBundle?.[0]?.parcelIds?.join(\n ', ',\n )}\n label=\"Lots\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-local-government-area-name`}\n value={\n value?.features?.[0]?.properties?.localGovernmentArea?.lgaName\n }\n label=\"Local Government Area\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementPointCadastralParcel)\n"]}
1
+ {"version":3,"file":"FormElementPointCadastralParcel.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointCadastralParcel.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { formService } from '../apps'\nimport { Collapse } from '@mui/material'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\nimport MaterialIcon from '../components/MaterialIcon'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\nconst pointCadastralParcelClass = 'ob-point-cadastral-parcel'\n\nfunction FormElementPointCadastralParcel({\n id,\n formId,\n element,\n readOnly,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: {\n id: string\n formId: number\n element: FormTypes.PointCadastralParcelElement\n readOnly: boolean\n value: PointTypes.PointCadastralParcelResponse | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointCadastralParcelResponse>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const parcelId = value?.parcelBundle?.[0]?.parcelId\n const [label, setLabel] = React.useState(parcelId || '')\n const [{ isLoading, error }, setState] = React.useState<{\n isLoading: boolean\n error: Error | null\n }>({\n isLoading: false,\n error: null,\n })\n\n const loadCadastralParcel = React.useCallback(\n async (abortSignal: AbortSignal) => {\n if (!label || label === parcelId) {\n return\n }\n\n setState({\n isLoading: true,\n error: null,\n })\n\n try {\n console.log('Attempting to load NSW point cadastral parcel', {\n formId,\n parcelId: label,\n })\n const result = await formService.getPointCadastralParcel(\n formId,\n label,\n abortSignal,\n )\n if (!abortSignal.aborted) {\n onChange(element, {\n value: result,\n })\n setState({\n error: null,\n isLoading: false,\n })\n }\n } catch (err) {\n if (!abortSignal.aborted) {\n setState({\n isLoading: false,\n error: err as Error,\n })\n }\n }\n },\n [element, formId, label, onChange, parcelId],\n )\n\n React.useEffect(() => {\n const abortController = new AbortController()\n const timeoutId = setTimeout(() => {\n loadCadastralParcel(abortController.signal)\n }, 750)\n return () => {\n abortController.abort()\n clearTimeout(timeoutId)\n }\n }, [loadCadastralParcel])\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (parcelId && label !== parcelId) {\n setLabel(parcelId)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (((isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isLoading) ||\n error) &&\n !isLookingUp\n\n const hasCopyButton = !!value && !!readOnly\n return (\n <div className=\"cypress-point-cadastral-parcel-element\">\n <FormElementLabelContainer\n className={pointCadastralParcelClass}\n id={id}\n element={element}\n required={element.required}\n >\n <div\n className={clsx('field has-addons', {\n 'no-addons-mobile': !hasCopyButton,\n })}\n >\n <div\n className={clsx('control is-expanded has-icons-right', {\n 'is-loading': isLoading,\n 'has-icons-right': !isLoading,\n })}\n >\n <input\n type=\"text\"\n id={id}\n name={element.name}\n className=\"input ob-input cypress-point-cadastral-parcel-control\"\n placeholder={element.placeholderValue}\n value={label}\n onChange={(e) => {\n setLabel(e.target.value)\n if (value) {\n onChange(element, {\n value: undefined,\n })\n }\n }}\n required={element.required}\n disabled={readOnly}\n onBlur={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n {!isLoading && (\n <span className=\" ob-input-icon icon is-small is-right\">\n {value ? (\n <MaterialIcon className=\"is-size-5 has-text-success\">\n check\n </MaterialIcon>\n ) : error?.message ? (\n <MaterialIcon className=\"is-size-5 has-text-danger\">\n error\n </MaterialIcon>\n ) : (\n <MaterialIcon className=\"is-size-5\">map</MaterialIcon>\n )}\n </span>\n )}\n </div>\n {hasCopyButton && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={label}\n />\n </div>\n )}\n </div>\n {isDisplayingValidationMessage && (\n <FormElementValidationMessage\n message={error?.message || validationMessage}\n />\n )}\n </FormElementLabelContainer>\n\n <Collapse in={!!value?.features}>\n <NotificationGrid\n className={`${pointCadastralParcelClass}__record-display has-margin-top-6`}\n gridClassName={`${pointCadastralParcelClass}__container`}\n >\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-address`}\n value={value?.features?.[0]?.properties?.formattedAddress}\n label=\"Address\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-lots`}\n value={value?.features?.[0]?.properties?.propertyBundle?.[0]?.parcelIds?.join(\n ', ',\n )}\n label=\"Lots\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-local-government-area-name`}\n value={\n value?.features?.[0]?.properties?.localGovernmentArea?.lgaName\n }\n label=\"Local Government Area\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementPointCadastralParcel)\n"]}
@@ -4,6 +4,7 @@ import { FormElementValueChangeHandler, FormElementConditionallyShownElement, Is
4
4
  type Props = {
5
5
  id: string;
6
6
  element: FormTypes.RadioButtonElement;
7
+ readOnly: boolean;
7
8
  value: unknown;
8
9
  onChange: FormElementValueChangeHandler<string>;
9
10
  displayValidationMessage: boolean;
@@ -11,6 +12,6 @@ type Props = {
11
12
  conditionallyShownOptionsElement: FormElementConditionallyShownElement | undefined;
12
13
  onUpdateFormElements: UpdateFormElementsHandler;
13
14
  } & IsDirtyProps;
14
- declare function FormElementRadio({ id, element, value, onChange, conditionallyShownOptionsElement, validationMessage, displayValidationMessage, onUpdateFormElements, isDirty, setIsDirty, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ declare function FormElementRadio({ id, element, readOnly, value, onChange, conditionallyShownOptionsElement, validationMessage, displayValidationMessage, onUpdateFormElements, isDirty, setIsDirty, }: Props): import("react/jsx-runtime").JSX.Element;
15
16
  declare const _default: React.MemoExoticComponent<typeof FormElementRadio>;
16
17
  export default _default;