@oneblink/apps-react 9.0.0-beta.3 → 9.0.0-beta.4

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 (177) hide show
  1. package/dist/OneBlinkForm.d.ts +0 -4
  2. package/dist/OneBlinkForm.js +0 -4
  3. package/dist/OneBlinkForm.js.map +1 -1
  4. package/dist/OneBlinkFormBase.d.ts +1 -1
  5. package/dist/OneBlinkFormBase.js +1 -1
  6. package/dist/OneBlinkFormBase.js.map +1 -1
  7. package/dist/OneBlinkReadOnlyForm.d.ts +1 -1
  8. package/dist/OneBlinkReadOnlyForm.js +1 -1
  9. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  10. package/dist/PaymentReceipt.d.ts +1 -1
  11. package/dist/PaymentReceipt.js +1 -1
  12. package/dist/PaymentReceipt.js.map +1 -1
  13. package/dist/apps/index.d.ts +18 -18
  14. package/dist/apps/index.js +18 -18
  15. package/dist/apps/index.js.map +1 -1
  16. package/dist/components/ArcGISWebMap.js +1 -1
  17. package/dist/components/ArcGISWebMap.js.map +1 -1
  18. package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js +1 -1
  19. package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js.map +1 -1
  20. package/dist/components/calendar-bookings/CalendarBookingsForm.d.ts +1 -1
  21. package/dist/components/calendar-bookings/CalendarBookingsForm.js +1 -1
  22. package/dist/components/calendar-bookings/CalendarBookingsForm.js.map +1 -1
  23. package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js +1 -1
  24. package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js.map +1 -1
  25. package/dist/components/calendar-bookings/ErrorModal.d.ts +1 -1
  26. package/dist/components/calendar-bookings/ErrorModal.js +1 -1
  27. package/dist/components/calendar-bookings/ErrorModal.js.map +1 -1
  28. package/dist/components/downloadable-files/index.d.ts +1 -1
  29. package/dist/components/downloadable-files/index.js +1 -1
  30. package/dist/components/downloadable-files/index.js.map +1 -1
  31. package/dist/components/downloadable-files/resource-components.d.ts +1 -1
  32. package/dist/components/downloadable-files/resource-components.js +1 -1
  33. package/dist/components/downloadable-files/resource-components.js.map +1 -1
  34. package/dist/components/formStore/FormStoreTableProvider.js +1 -1
  35. package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
  36. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js.map +1 -1
  37. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +1 -1
  38. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
  39. package/dist/components/formStore/OneBlinkFormStoreProvider.js +1 -1
  40. package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
  41. package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
  42. package/dist/components/formStore/display/ElementDisplay.js +2 -2
  43. package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
  44. package/dist/components/formStore/table/ColumnFilters.js +1 -1
  45. package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
  46. package/dist/components/formStore/table/FormElementTableCell.js +1 -1
  47. package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
  48. package/dist/components/formStore/table/Pickers.js +1 -1
  49. package/dist/components/formStore/table/Pickers.js.map +1 -1
  50. package/dist/components/formStore/table/generateColumns.d.ts +1 -1
  51. package/dist/components/formStore/table/generateColumns.js.map +1 -1
  52. package/dist/components/formStore/table/useFormStoreTable.d.ts +1 -1
  53. package/dist/components/formStore/table/useFormStoreTable.js +1 -1
  54. package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
  55. package/dist/components/mfa/MfaDialog.d.ts +1 -1
  56. package/dist/components/mfa/MfaDialog.js +1 -1
  57. package/dist/components/mfa/MfaDialog.js.map +1 -1
  58. package/dist/components/payments/PaymentForm.js +1 -1
  59. package/dist/components/payments/PaymentForm.js.map +1 -1
  60. package/dist/components/payments/WestpacQuickStreamPaymentForm.d.ts +1 -1
  61. package/dist/components/payments/WestpacQuickStreamPaymentForm.js +1 -1
  62. package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
  63. package/dist/components/renderer/AutocompleteDropdown.js +1 -1
  64. package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
  65. package/dist/components/renderer/LookupNotification.js +2 -2
  66. package/dist/components/renderer/LookupNotification.js.map +1 -1
  67. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +1 -1
  68. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
  69. package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
  70. package/dist/components/renderer/ReverseGeocode.js +1 -1
  71. package/dist/components/renderer/ReverseGeocode.js.map +1 -1
  72. package/dist/form-elements/FormElementAPINSWLiquorLicence.js +1 -1
  73. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  74. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  75. package/dist/form-elements/FormElementAutocomplete.js +1 -1
  76. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  77. package/dist/form-elements/FormElementBSB.js +1 -1
  78. package/dist/form-elements/FormElementBSB.js.map +1 -1
  79. package/dist/form-elements/FormElementCalculation.js +2 -2
  80. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  81. package/dist/form-elements/FormElementCivicaNameRecord.js +1 -1
  82. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  83. package/dist/form-elements/FormElementCivicaStreetName.js +1 -1
  84. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  85. package/dist/form-elements/FormElementCompliance.d.ts +1 -1
  86. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  87. package/dist/form-elements/FormElementDate.js +1 -1
  88. package/dist/form-elements/FormElementDate.js.map +1 -1
  89. package/dist/form-elements/FormElementDateTime.js +1 -1
  90. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  91. package/dist/form-elements/FormElementFile.d.ts +1 -1
  92. package/dist/form-elements/FormElementFile.js.map +1 -1
  93. package/dist/form-elements/FormElementFiles.d.ts +1 -1
  94. package/dist/form-elements/FormElementFiles.js.map +1 -1
  95. package/dist/form-elements/FormElementGeoscapeAddress.js +1 -1
  96. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  97. package/dist/form-elements/FormElementGoogleAddress.js +1 -1
  98. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  99. package/dist/form-elements/FormElementLocation.js +1 -1
  100. package/dist/form-elements/FormElementLocation.js.map +1 -1
  101. package/dist/form-elements/FormElementNumber.js +1 -1
  102. package/dist/form-elements/FormElementNumber.js.map +1 -1
  103. package/dist/form-elements/FormElementPointAddress.js +1 -1
  104. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  105. package/dist/form-elements/FormElementPointAddressV3.js +1 -1
  106. package/dist/form-elements/FormElementPointAddressV3.js.map +1 -1
  107. package/dist/form-elements/FormElementPointCadastralParcel.js +1 -1
  108. package/dist/form-elements/FormElementPointCadastralParcel.js.map +1 -1
  109. package/dist/form-elements/FormElementSummary.js +1 -1
  110. package/dist/form-elements/FormElementSummary.js.map +1 -1
  111. package/dist/form-elements/FormElementTime.js +1 -1
  112. package/dist/form-elements/FormElementTime.js.map +1 -1
  113. package/dist/hooks/attachments/useAttachment.d.ts +1 -1
  114. package/dist/hooks/attachments/useAttachment.js +1 -1
  115. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  116. package/dist/hooks/attachments/useAttachments.d.ts +1 -1
  117. package/dist/hooks/attachments/useAttachments.js.map +1 -1
  118. package/dist/hooks/useAuth.js +1 -1
  119. package/dist/hooks/useAuth.js.map +1 -1
  120. package/dist/hooks/useConditionalLogic.js +1 -1
  121. package/dist/hooks/useConditionalLogic.js.map +1 -1
  122. package/dist/hooks/useDrafts.d.ts +1 -1
  123. package/dist/hooks/useDrafts.js +1 -1
  124. package/dist/hooks/useDrafts.js.map +1 -1
  125. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +1 -1
  126. package/dist/hooks/useDynamicOptionsLoaderState.js +1 -1
  127. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  128. package/dist/hooks/useFormElementLookups.d.ts +1 -1
  129. package/dist/hooks/useFormElementLookups.js +1 -1
  130. package/dist/hooks/useFormElementLookups.js.map +1 -1
  131. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -1
  132. package/dist/hooks/useFormSubmissionAutoSaveState.js +1 -1
  133. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  134. package/dist/hooks/useIsOffline.js +1 -1
  135. package/dist/hooks/useIsOffline.js.map +1 -1
  136. package/dist/hooks/useLogin.js +1 -1
  137. package/dist/hooks/useLogin.js.map +1 -1
  138. package/dist/hooks/useMfa.d.ts +1 -1
  139. package/dist/hooks/useMfa.js +1 -1
  140. package/dist/hooks/useMfa.js.map +1 -1
  141. package/dist/hooks/useOnUploadAttachment.d.ts +1 -1
  142. package/dist/hooks/useOnUploadAttachment.js +1 -1
  143. package/dist/hooks/useOnUploadAttachment.js.map +1 -1
  144. package/dist/hooks/usePendingSubmissions.d.ts +1 -1
  145. package/dist/hooks/usePendingSubmissions.js +1 -1
  146. package/dist/hooks/usePendingSubmissions.js.map +1 -1
  147. package/dist/hooks/useReplaceableText.js +1 -1
  148. package/dist/hooks/useReplaceableText.js.map +1 -1
  149. package/dist/hooks/useSignUp.js +1 -1
  150. package/dist/hooks/useSignUp.js.map +1 -1
  151. package/dist/services/attachments.d.ts +1 -1
  152. package/dist/services/attachments.js +1 -1
  153. package/dist/services/attachments.js.map +1 -1
  154. package/dist/services/blob-utils.js +1 -1
  155. package/dist/services/blob-utils.js.map +1 -1
  156. package/dist/services/checkIfAttachmentsExist.d.ts +1 -1
  157. package/dist/services/checkIfAttachmentsExist.js.map +1 -1
  158. package/dist/services/defaultCoordinates.js +1 -1
  159. package/dist/services/defaultCoordinates.js.map +1 -1
  160. package/dist/services/download-file.d.ts +1 -1
  161. package/dist/services/download-file.js +2 -2
  162. package/dist/services/download-file.js.map +1 -1
  163. package/dist/services/drawTimestampOnCanvas.js +1 -1
  164. package/dist/services/drawTimestampOnCanvas.js.map +1 -1
  165. package/dist/services/form-validation/validateSubmission.js +1 -1
  166. package/dist/services/form-validation/validateSubmission.js.map +1 -1
  167. package/dist/services/form-validation/validators.d.ts +1 -1
  168. package/dist/services/form-validation/validators.js.map +1 -1
  169. package/dist/services/generate-default-data.js +1 -1
  170. package/dist/services/generate-default-data.js.map +1 -1
  171. package/dist/services/injectableOptions.js +1 -1
  172. package/dist/services/injectableOptions.js.map +1 -1
  173. package/dist/types/attachments.d.ts +1 -1
  174. package/dist/types/attachments.js.map +1 -1
  175. package/dist/utils/sendGoogleAnalyticsEvent.js +1 -1
  176. package/dist/utils/sendGoogleAnalyticsEvent.js.map +1 -1
  177. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validateSubmission.js","sourceRoot":"","sources":["../../../src/services/form-validation/validateSubmission.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\n\nimport { isEmpty, validators } from './validate-dot-js'\nimport validationExtensions from './extensions'\nimport {\n checkFileNameExtensionIsValid,\n checkFileNameIsValid,\n getCleanRepeatableSetConfiguration,\n getCleanDateRangeConfiguration,\n validateAttachments,\n} from './validators'\nimport generateCivicaNameRecordElements from '../generateCivicaNameRecordElements'\nimport generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements'\nimport { parseDateValue } from '../generate-default-data'\nimport { localisationService } from '@oneblink/apps'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { generateConfirmationFormElementName } from '../dynamic-elements'\nimport { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired'\nimport { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'\nimport {\n defaultAutoSnapshotButtonLabel,\n generateArcGISAutomatedSnapshotFileName,\n} from '../../form-elements/FormElementArcGISWebMap'\nimport { fileUploadService } from '@oneblink/sdk-core'\n\nexport const RECAPTCHA_OFFLINE_MESSAGE =\n 'We could not verify you are human while you are offline.'\n\nexport default function validateSubmission({\n elements,\n submission,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n}: {\n elements: FormTypes.FormElementWithName[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n executedLookups: ExecutedLookups\n captchaType: CaptchaType\n isOffline: boolean\n}): FormElementsValidation | undefined {\n const formElementsValidation = elements.reduce<FormElementsValidation>(\n (partialFormElementsValidation, formElement) => {\n switch (formElement.type) {\n // Elements that do not need to be validated\n case 'summary':\n case 'calculation':\n case 'image':\n case 'html':\n case 'heading': {\n return partialFormElementsValidation\n }\n }\n\n // If the element is current hidden, we do not need to apply validation\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[formElement.name]\n if (formElementConditionallyShown?.isHidden) {\n return partialFormElementsValidation\n }\n\n const value = submission?.[formElement.name]\n\n switch (formElement.type) {\n case 'draw': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A saved signature is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'camera': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A photo is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'captcha': {\n switch (captchaType) {\n case 'INVISIBLE':\n break\n case 'CHECKBOX':\n default: {\n const errorMessages = [\n ...validationExtensions.offline(\n isOffline,\n RECAPTCHA_OFFLINE_MESSAGE,\n ),\n ...validationExtensions.presence(\n value,\n { ...formElement, required: true },\n 'Please complete the CAPTCHA successfully',\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] =\n errorMessages[0]\n }\n }\n }\n break\n }\n case 'location': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a location',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'compliance': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ...validateAttachments(\n (value as FormElementComplianceValue | undefined)?.files,\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'checkboxes': {\n const optionsLength =\n formElementConditionallyShown?.type === 'formElement' &&\n formElementConditionallyShown?.options\n ? formElementConditionallyShown?.options?.length\n : formElement.options?.length\n const requiredAllDefaultMessage = 'All options are required'\n const errorMessages = validationExtensions.presence(\n value,\n {\n ...formElement,\n required:\n !!optionsLength &&\n (formElement.required || !!formElement.requiredAll),\n },\n formElement.requiredAll ? requiredAllDefaultMessage : 'Required',\n )\n if (formElement.requiredAll) {\n errorMessages.push(\n ...validators.length(value, {\n is: optionsLength,\n message:\n formElement.requiredMessage || requiredAllDefaultMessage,\n }),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'abn':\n case 'geoscapeAddress':\n case 'pointCadastralParcel':\n case 'pointAddress':\n case 'pointAddressV3':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'autocomplete':\n case 'radio':\n case 'select':\n case 'apiNSWLiquorLicence': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'boolean': {\n const errorMessages = []\n if (value !== true && formElement.required) {\n errorMessages.push(formElement.requiredMessage || 'Required')\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'bsb': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a BSB number',\n ),\n ...validators.regexValidation(value, {\n pattern: /\\d{3}-\\d{3}/,\n message: 'Please enter a valid BSB number',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'barcodeScanner': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please scan a barcode or enter a value',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'text':\n case 'textarea': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a value',\n ),\n ...validators.length(value, {\n minimum: formElement.minLength,\n tooShort:\n 'Please enter a value with at least %{count} character(s)',\n maximum: formElement.maxLength,\n tooLong:\n 'Please enter a value with %{count} character(s) or less',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'telephone': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a phone number',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'email': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter an email address',\n ),\n ...validators.email(value, {\n message: 'Please enter a valid email for this field',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n\n if (formElement.requiresConfirmation && !!value) {\n const confirmationFormElementName =\n generateConfirmationFormElementName(formElement)\n if (value !== submission?.[confirmationFormElementName]) {\n partialFormElementsValidation[confirmationFormElementName] =\n 'Email addresses do not match'\n }\n }\n break\n }\n case 'time': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a time',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'date': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date',\n ),\n ...validators.datetime(value, {\n dateOnly: true,\n format: (date: Date) => localisationService.formatDate(date),\n earliest: parseDateValue({\n dateOnly: true,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: true,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date',\n tooEarly: 'Date cannot be before %{date}',\n tooLate: 'Date cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'datetime': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date and time',\n ),\n ...validators.datetime(value, {\n format: (v: Date) => localisationService.formatDatetime(v),\n earliest: parseDateValue({\n dateOnly: false,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: false,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date and time',\n tooEarly: 'Date and time cannot be before %{date}',\n tooLate: 'Date and time cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'number': {\n let minErrorMessage =\n 'Please enter a number greater than or equal to %{count}'\n let maxErrorMessage =\n 'Please enter a number less than or equal to %{count}'\n if (\n typeof formElement.minNumber === 'number' &&\n typeof formElement.maxNumber === 'number'\n ) {\n minErrorMessage =\n maxErrorMessage = `Please enter a number between ${formElement.minNumber} and ${formElement.maxNumber}`\n }\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a number',\n ),\n ...validators.numericality(value, {\n greaterThanOrEqualTo: formElement.minNumber,\n notGreaterThanOrEqualTo: minErrorMessage,\n lessThanOrEqualTo: formElement.maxNumber,\n notLessThanOrEqualTo: maxErrorMessage,\n onlyInteger: formElement.isInteger,\n notInteger: 'Please enter a whole number',\n notValid: 'Enter enter a valid number',\n }),\n ]\n if (\n formElement.regexPattern &&\n typeof value === 'number' &&\n !Number.isNaN(value)\n ) {\n errorMessages.push(\n ...validationExtensions.regex(value.toString(), formElement),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'files': {\n const errorMessages = []\n if (formElement.minEntries) {\n errorMessages.push(\n ...validators.presence(value, {\n message: `Please upload at least ${\n formElement.minEntries\n } file${formElement.minEntries === 1 ? '' : 's'}`,\n }),\n )\n }\n errorMessages.push(\n ...validators.length(value, {\n minimum: formElement.minEntries,\n maximum: formElement.maxEntries,\n tooLong: 'Cannot upload more than %{count} file(s)',\n tooShort: 'Please upload at least %{count} file(s)',\n }),\n )\n\n if (\n Array.isArray(value) &&\n value.some((file) => {\n return !checkFileNameIsValid(formElement, file.fileName)\n })\n ) {\n errorMessages.push(\n `Only the following file types are accepted: ${(\n formElement.restrictedFileTypes ||\n fileUploadService.restrictedFileTypes\n ).join(', ')}`,\n )\n }\n\n errorMessages.push(...validateAttachments(value as undefined))\n\n const isValid =\n !Array.isArray(value) ||\n value.every((file) => {\n return checkFileNameExtensionIsValid(formElement, file.fileName)\n })\n if (!isValid) errorMessages.push('All files must have extensions')\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'repeatableSet': {\n const minSetEntries = getCleanRepeatableSetConfiguration(\n formElement.minSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const maxSetEntries = getCleanRepeatableSetConfiguration(\n formElement.maxSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const setErrorMessages = validators.length(value, {\n minimum: minSetEntries,\n maximum: maxSetEntries,\n tooLong: 'Cannot have more than %{count} entry/entries',\n tooShort: 'Must have at least %{count} entry/entries',\n })\n if (minSetEntries) {\n setErrorMessages.push(\n ...validators.presence(value, {\n message: `Must have at least ${minSetEntries} ${\n minSetEntries === 1 ? 'entry' : 'entries'\n }`,\n }),\n )\n }\n\n const entries = Array.isArray(value) ? value : []\n\n const repeatableSetExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups) &&\n Array.isArray(executedLookups[formElement.name])\n ? executedLookups[formElement.name]\n : []\n\n const entryErrors = entries.reduce((errorsByIndex, entry, index) => {\n const entryValidation = validateSubmission({\n submission: entry,\n elements: formElement.elements as FormTypes.FormElementWithName[],\n executedLookups: Array.isArray(repeatableSetExecutedLookups)\n ? repeatableSetExecutedLookups[index]\n : {},\n formElementsConditionallyShown:\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries[index.toString()]\n : undefined,\n captchaType,\n isOffline,\n })\n\n if (entryValidation) {\n errorsByIndex[index] = entryValidation\n }\n return errorsByIndex\n }, {})\n\n if (setErrorMessages.length || !isEmpty(entryErrors)) {\n partialFormElementsValidation[formElement.name] = {\n type: 'repeatableSet',\n set: setErrorMessages[0],\n entries: entryErrors,\n }\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(\n formElement,\n [],\n )\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'infoPage':\n case 'form': {\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements:\n formElement.elements as FormTypes.FormElementWithName[],\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'freshdeskDependentField': {\n const nestedElements =\n generateFreshdeskDependentFieldElements(formElement)\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'arcGISWebMap': {\n const arcGISWebMapElementValue = value as\n | ArcGISWebMapElementValue\n | undefined\n const errorMessages = validationExtensions.presence(\n arcGISWebMapElementValue?.userInput,\n formElement,\n 'Required',\n )\n const automatedSnapshotFileName =\n generateArcGISAutomatedSnapshotFileName(formElement)\n\n if (formElement.manualSnapshotsEnabled) {\n errorMessages.push(\n ...validators.length(\n (arcGISWebMapElementValue?.snapshotImages || []).filter(\n (snapshotImage) =>\n snapshotImage.fileName !== automatedSnapshotFileName,\n ),\n {\n minimum: formElement.minManualSnapshots,\n maximum: formElement.maxManualSnapshots,\n tooLong: 'Cannot capture more than %{count} image(s)',\n tooShort: 'Must capture at least %{count} image(s)',\n },\n ),\n )\n }\n\n errorMessages.push(\n ...validateAttachments(arcGISWebMapElementValue?.snapshotImages),\n )\n\n if (\n formElement.autoSnapshotViews?.length &&\n arcGISWebMapElementValue?.snapshotImages?.filter(\n (snapshotImage) =>\n snapshotImage.fileName == automatedSnapshotFileName,\n ).length !== formElement.autoSnapshotViews.length\n ) {\n errorMessages.push(\n `Please press the \"${formElement.autoSnapshotButton?.label || defaultAutoSnapshotButtonLabel}\" button`,\n )\n }\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'lookupButton': {\n const errorMessages = validationExtensions.lookups({\n formElement: {\n ...formElement,\n required: determineLookupButtonIsRequired(\n formElement.elementDependencies,\n elements,\n submission ? [submission] : [],\n ),\n },\n executedLookups,\n })\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n default: {\n const never: never = formElement\n console.info('Unsupported form element with validation', never)\n }\n }\n\n return partialFormElementsValidation\n },\n {},\n )\n\n if (isEmpty(formElementsValidation)) {\n return\n }\n\n return formElementsValidation\n}\n"]}
1
+ {"version":3,"file":"validateSubmission.js","sourceRoot":"","sources":["../../../src/services/form-validation/validateSubmission.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\n\nimport { isEmpty, validators } from './validate-dot-js'\nimport validationExtensions from './extensions'\nimport {\n checkFileNameExtensionIsValid,\n checkFileNameIsValid,\n getCleanRepeatableSetConfiguration,\n getCleanDateRangeConfiguration,\n validateAttachments,\n} from './validators'\nimport generateCivicaNameRecordElements from '../generateCivicaNameRecordElements'\nimport generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements'\nimport { parseDateValue } from '../generate-default-data'\nimport { localisationService } from '../../apps'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { generateConfirmationFormElementName } from '../dynamic-elements'\nimport { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired'\nimport { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'\nimport {\n defaultAutoSnapshotButtonLabel,\n generateArcGISAutomatedSnapshotFileName,\n} from '../../form-elements/FormElementArcGISWebMap'\nimport { fileUploadService } from '@oneblink/sdk-core'\n\nexport const RECAPTCHA_OFFLINE_MESSAGE =\n 'We could not verify you are human while you are offline.'\n\nexport default function validateSubmission({\n elements,\n submission,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n}: {\n elements: FormTypes.FormElementWithName[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n executedLookups: ExecutedLookups\n captchaType: CaptchaType\n isOffline: boolean\n}): FormElementsValidation | undefined {\n const formElementsValidation = elements.reduce<FormElementsValidation>(\n (partialFormElementsValidation, formElement) => {\n switch (formElement.type) {\n // Elements that do not need to be validated\n case 'summary':\n case 'calculation':\n case 'image':\n case 'html':\n case 'heading': {\n return partialFormElementsValidation\n }\n }\n\n // If the element is current hidden, we do not need to apply validation\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[formElement.name]\n if (formElementConditionallyShown?.isHidden) {\n return partialFormElementsValidation\n }\n\n const value = submission?.[formElement.name]\n\n switch (formElement.type) {\n case 'draw': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A saved signature is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'camera': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A photo is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'captcha': {\n switch (captchaType) {\n case 'INVISIBLE':\n break\n case 'CHECKBOX':\n default: {\n const errorMessages = [\n ...validationExtensions.offline(\n isOffline,\n RECAPTCHA_OFFLINE_MESSAGE,\n ),\n ...validationExtensions.presence(\n value,\n { ...formElement, required: true },\n 'Please complete the CAPTCHA successfully',\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] =\n errorMessages[0]\n }\n }\n }\n break\n }\n case 'location': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a location',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'compliance': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ...validateAttachments(\n (value as FormElementComplianceValue | undefined)?.files,\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'checkboxes': {\n const optionsLength =\n formElementConditionallyShown?.type === 'formElement' &&\n formElementConditionallyShown?.options\n ? formElementConditionallyShown?.options?.length\n : formElement.options?.length\n const requiredAllDefaultMessage = 'All options are required'\n const errorMessages = validationExtensions.presence(\n value,\n {\n ...formElement,\n required:\n !!optionsLength &&\n (formElement.required || !!formElement.requiredAll),\n },\n formElement.requiredAll ? requiredAllDefaultMessage : 'Required',\n )\n if (formElement.requiredAll) {\n errorMessages.push(\n ...validators.length(value, {\n is: optionsLength,\n message:\n formElement.requiredMessage || requiredAllDefaultMessage,\n }),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'abn':\n case 'geoscapeAddress':\n case 'pointCadastralParcel':\n case 'pointAddress':\n case 'pointAddressV3':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'autocomplete':\n case 'radio':\n case 'select':\n case 'apiNSWLiquorLicence': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'boolean': {\n const errorMessages = []\n if (value !== true && formElement.required) {\n errorMessages.push(formElement.requiredMessage || 'Required')\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'bsb': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a BSB number',\n ),\n ...validators.regexValidation(value, {\n pattern: /\\d{3}-\\d{3}/,\n message: 'Please enter a valid BSB number',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'barcodeScanner': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please scan a barcode or enter a value',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'text':\n case 'textarea': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a value',\n ),\n ...validators.length(value, {\n minimum: formElement.minLength,\n tooShort:\n 'Please enter a value with at least %{count} character(s)',\n maximum: formElement.maxLength,\n tooLong:\n 'Please enter a value with %{count} character(s) or less',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'telephone': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a phone number',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'email': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter an email address',\n ),\n ...validators.email(value, {\n message: 'Please enter a valid email for this field',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n\n if (formElement.requiresConfirmation && !!value) {\n const confirmationFormElementName =\n generateConfirmationFormElementName(formElement)\n if (value !== submission?.[confirmationFormElementName]) {\n partialFormElementsValidation[confirmationFormElementName] =\n 'Email addresses do not match'\n }\n }\n break\n }\n case 'time': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a time',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'date': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date',\n ),\n ...validators.datetime(value, {\n dateOnly: true,\n format: (date: Date) => localisationService.formatDate(date),\n earliest: parseDateValue({\n dateOnly: true,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: true,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date',\n tooEarly: 'Date cannot be before %{date}',\n tooLate: 'Date cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'datetime': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date and time',\n ),\n ...validators.datetime(value, {\n format: (v: Date) => localisationService.formatDatetime(v),\n earliest: parseDateValue({\n dateOnly: false,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: false,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date and time',\n tooEarly: 'Date and time cannot be before %{date}',\n tooLate: 'Date and time cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'number': {\n let minErrorMessage =\n 'Please enter a number greater than or equal to %{count}'\n let maxErrorMessage =\n 'Please enter a number less than or equal to %{count}'\n if (\n typeof formElement.minNumber === 'number' &&\n typeof formElement.maxNumber === 'number'\n ) {\n minErrorMessage =\n maxErrorMessage = `Please enter a number between ${formElement.minNumber} and ${formElement.maxNumber}`\n }\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a number',\n ),\n ...validators.numericality(value, {\n greaterThanOrEqualTo: formElement.minNumber,\n notGreaterThanOrEqualTo: minErrorMessage,\n lessThanOrEqualTo: formElement.maxNumber,\n notLessThanOrEqualTo: maxErrorMessage,\n onlyInteger: formElement.isInteger,\n notInteger: 'Please enter a whole number',\n notValid: 'Enter enter a valid number',\n }),\n ]\n if (\n formElement.regexPattern &&\n typeof value === 'number' &&\n !Number.isNaN(value)\n ) {\n errorMessages.push(\n ...validationExtensions.regex(value.toString(), formElement),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'files': {\n const errorMessages = []\n if (formElement.minEntries) {\n errorMessages.push(\n ...validators.presence(value, {\n message: `Please upload at least ${\n formElement.minEntries\n } file${formElement.minEntries === 1 ? '' : 's'}`,\n }),\n )\n }\n errorMessages.push(\n ...validators.length(value, {\n minimum: formElement.minEntries,\n maximum: formElement.maxEntries,\n tooLong: 'Cannot upload more than %{count} file(s)',\n tooShort: 'Please upload at least %{count} file(s)',\n }),\n )\n\n if (\n Array.isArray(value) &&\n value.some((file) => {\n return !checkFileNameIsValid(formElement, file.fileName)\n })\n ) {\n errorMessages.push(\n `Only the following file types are accepted: ${(\n formElement.restrictedFileTypes ||\n fileUploadService.restrictedFileTypes\n ).join(', ')}`,\n )\n }\n\n errorMessages.push(...validateAttachments(value as undefined))\n\n const isValid =\n !Array.isArray(value) ||\n value.every((file) => {\n return checkFileNameExtensionIsValid(formElement, file.fileName)\n })\n if (!isValid) errorMessages.push('All files must have extensions')\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'repeatableSet': {\n const minSetEntries = getCleanRepeatableSetConfiguration(\n formElement.minSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const maxSetEntries = getCleanRepeatableSetConfiguration(\n formElement.maxSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const setErrorMessages = validators.length(value, {\n minimum: minSetEntries,\n maximum: maxSetEntries,\n tooLong: 'Cannot have more than %{count} entry/entries',\n tooShort: 'Must have at least %{count} entry/entries',\n })\n if (minSetEntries) {\n setErrorMessages.push(\n ...validators.presence(value, {\n message: `Must have at least ${minSetEntries} ${\n minSetEntries === 1 ? 'entry' : 'entries'\n }`,\n }),\n )\n }\n\n const entries = Array.isArray(value) ? value : []\n\n const repeatableSetExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups) &&\n Array.isArray(executedLookups[formElement.name])\n ? executedLookups[formElement.name]\n : []\n\n const entryErrors = entries.reduce((errorsByIndex, entry, index) => {\n const entryValidation = validateSubmission({\n submission: entry,\n elements: formElement.elements as FormTypes.FormElementWithName[],\n executedLookups: Array.isArray(repeatableSetExecutedLookups)\n ? repeatableSetExecutedLookups[index]\n : {},\n formElementsConditionallyShown:\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries[index.toString()]\n : undefined,\n captchaType,\n isOffline,\n })\n\n if (entryValidation) {\n errorsByIndex[index] = entryValidation\n }\n return errorsByIndex\n }, {})\n\n if (setErrorMessages.length || !isEmpty(entryErrors)) {\n partialFormElementsValidation[formElement.name] = {\n type: 'repeatableSet',\n set: setErrorMessages[0],\n entries: entryErrors,\n }\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(\n formElement,\n [],\n )\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'infoPage':\n case 'form': {\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements:\n formElement.elements as FormTypes.FormElementWithName[],\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'freshdeskDependentField': {\n const nestedElements =\n generateFreshdeskDependentFieldElements(formElement)\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'arcGISWebMap': {\n const arcGISWebMapElementValue = value as\n | ArcGISWebMapElementValue\n | undefined\n const errorMessages = validationExtensions.presence(\n arcGISWebMapElementValue?.userInput,\n formElement,\n 'Required',\n )\n const automatedSnapshotFileName =\n generateArcGISAutomatedSnapshotFileName(formElement)\n\n if (formElement.manualSnapshotsEnabled) {\n errorMessages.push(\n ...validators.length(\n (arcGISWebMapElementValue?.snapshotImages || []).filter(\n (snapshotImage) =>\n snapshotImage.fileName !== automatedSnapshotFileName,\n ),\n {\n minimum: formElement.minManualSnapshots,\n maximum: formElement.maxManualSnapshots,\n tooLong: 'Cannot capture more than %{count} image(s)',\n tooShort: 'Must capture at least %{count} image(s)',\n },\n ),\n )\n }\n\n errorMessages.push(\n ...validateAttachments(arcGISWebMapElementValue?.snapshotImages),\n )\n\n if (\n formElement.autoSnapshotViews?.length &&\n arcGISWebMapElementValue?.snapshotImages?.filter(\n (snapshotImage) =>\n snapshotImage.fileName == automatedSnapshotFileName,\n ).length !== formElement.autoSnapshotViews.length\n ) {\n errorMessages.push(\n `Please press the \"${formElement.autoSnapshotButton?.label || defaultAutoSnapshotButtonLabel}\" button`,\n )\n }\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'lookupButton': {\n const errorMessages = validationExtensions.lookups({\n formElement: {\n ...formElement,\n required: determineLookupButtonIsRequired(\n formElement.elementDependencies,\n elements,\n submission ? [submission] : [],\n ),\n },\n executedLookups,\n })\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n default: {\n const never: never = formElement\n console.info('Unsupported form element with validation', never)\n }\n }\n\n return partialFormElementsValidation\n },\n {},\n )\n\n if (isEmpty(formElementsValidation)) {\n return\n }\n\n return formElementsValidation\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { EnvironmentTypes, FormTypes, SubmissionTypes } from '@oneblink/types';
2
2
  import getDateRangeConfiguration, { DateRangeConfigurationOptions } from '../getDateRangeConfiguration';
3
3
  import { FormElementsConditionallyShown, FormElementsValidation } from '../../types/form';
4
- import { attachmentsService } from '@oneblink/apps';
4
+ import { attachmentsService } from '../../apps';
5
5
  import { FormElementBinaryStorageValue } from '../../types/attachments';
6
6
  export declare function getCleanDateRangeConfiguration(options: DateRangeConfigurationOptions, elements: FormTypes.FormElement[], submission: SubmissionTypes.S3SubmissionData['submission'] | undefined, formElementsConditionallyShown: FormElementsConditionallyShown | undefined): ReturnType<typeof getDateRangeConfiguration>;
7
7
  export declare function getCleanRepeatableSetConfiguration(setEntries: FormTypes.RepeatableSetElement['minSetEntries'], elements: FormTypes.FormElement[], submission: SubmissionTypes.S3SubmissionData['submission'] | undefined, formElementsConditionallyShown: FormElementsConditionallyShown | undefined): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/services/form-validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { EnvironmentTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { fileUploadService } from '@oneblink/sdk-core'\nimport getDateRangeConfiguration, {\n DateRangeConfigurationOptions,\n} from '../getDateRangeConfiguration'\nimport {\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\nimport cleanFormSubmissionModel from '../cleanFormSubmissionModel'\nimport getRepeatableSetEntriesConfiguration from '../getRepeatableSetEntriesConfiguration'\nimport { attachmentsService } from '@oneblink/apps'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\n\nexport function getCleanDateRangeConfiguration(\n options: DateRangeConfigurationOptions,\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n): ReturnType<typeof getDateRangeConfiguration> {\n if (options.referenceFormElementId && submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getDateRangeConfiguration(options, elements, model)\n }\n return [options.date, options.daysOffset]\n}\n\nexport function getCleanRepeatableSetConfiguration(\n setEntries: FormTypes.RepeatableSetElement['minSetEntries'],\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n) {\n if (submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getRepeatableSetEntriesConfiguration(setEntries, elements, model)\n }\n}\n\nexport function checkFileNameIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n const extension = fileName.split('.').pop()\n return (\n formElement.restrictedFileTypes || fileUploadService.restrictedFileTypes\n ).some((fileType) => fileType.toLowerCase() === extension?.toLowerCase())\n}\n\nexport function checkFileNameExtensionIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n return (\n formElement.allowExtensionlessAttachments || fileName.split('.').length >= 2\n )\n}\n\nexport function checkSectionValidity(\n element: FormTypes.PageElement | FormTypes.SectionElement,\n formElementsValidation: FormElementsValidation | undefined,\n): boolean {\n // If everything is valid, no need to check elements\n if (!formElementsValidation) {\n return false\n }\n\n // If there is no elements on the page that are invalid, we will treat as valid\n return element.elements.some((formElement) => {\n switch (formElement.type) {\n case 'page':\n case 'section': {\n return checkSectionValidity(formElement, formElementsValidation)\n }\n default: {\n return formElementsValidation[formElement.name]\n }\n }\n })\n}\n\nexport function getInvalidAttachment(\n value: unknown,\n): attachmentsService.AttachmentError | undefined {\n if (\n value &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === 'ERROR'\n ) {\n return value as attachmentsService.AttachmentError\n }\n}\n\nexport function validateAttachments(\n value: FormElementBinaryStorageValue[] | undefined,\n): string[] {\n const exceedsMaximumSize = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EXCEEDS_MAX_SIZE'\n ) {\n return true\n }\n })\n const emptyFiles = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EMPTY_FILE'\n ) {\n return true\n }\n })\n if (!exceedsMaximumSize && !emptyFiles) {\n const invalidAttachmentNames = value?.reduce(\n (invalidAttachmentNames: string[], att) => {\n const attachmentName = getInvalidAttachment(att)?.fileName\n if (attachmentName) {\n invalidAttachmentNames.push(attachmentName)\n }\n return invalidAttachmentNames\n },\n [],\n )\n if (invalidAttachmentNames?.length) {\n return [`${invalidAttachmentNames.join(', ')} could not be uploaded.`]\n }\n return []\n }\n let errorMessage\n if (exceedsMaximumSize) {\n errorMessage = 'One or more of the files exceed the maximum size allowed.'\n }\n if (emptyFiles) {\n const emptyMessage = 'One or more of the files are empty.'\n errorMessage = errorMessage\n ? `${errorMessage} ${emptyMessage}`\n : emptyMessage\n }\n if (errorMessage) {\n return [errorMessage]\n }\n\n return []\n}\n\nexport const generateLookupValidationMessage = (\n lookupButtonConfig?: EnvironmentTypes.ButtonConfiguration,\n) => {\n return lookupButtonConfig && lookupButtonConfig.label\n ? `${lookupButtonConfig.label} is required`\n : 'Lookup is required'\n}\n"]}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/services/form-validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { EnvironmentTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { fileUploadService } from '@oneblink/sdk-core'\nimport getDateRangeConfiguration, {\n DateRangeConfigurationOptions,\n} from '../getDateRangeConfiguration'\nimport {\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\nimport cleanFormSubmissionModel from '../cleanFormSubmissionModel'\nimport getRepeatableSetEntriesConfiguration from '../getRepeatableSetEntriesConfiguration'\nimport { attachmentsService } from '../../apps'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\n\nexport function getCleanDateRangeConfiguration(\n options: DateRangeConfigurationOptions,\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n): ReturnType<typeof getDateRangeConfiguration> {\n if (options.referenceFormElementId && submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getDateRangeConfiguration(options, elements, model)\n }\n return [options.date, options.daysOffset]\n}\n\nexport function getCleanRepeatableSetConfiguration(\n setEntries: FormTypes.RepeatableSetElement['minSetEntries'],\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n) {\n if (submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getRepeatableSetEntriesConfiguration(setEntries, elements, model)\n }\n}\n\nexport function checkFileNameIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n const extension = fileName.split('.').pop()\n return (\n formElement.restrictedFileTypes || fileUploadService.restrictedFileTypes\n ).some((fileType) => fileType.toLowerCase() === extension?.toLowerCase())\n}\n\nexport function checkFileNameExtensionIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n return (\n formElement.allowExtensionlessAttachments || fileName.split('.').length >= 2\n )\n}\n\nexport function checkSectionValidity(\n element: FormTypes.PageElement | FormTypes.SectionElement,\n formElementsValidation: FormElementsValidation | undefined,\n): boolean {\n // If everything is valid, no need to check elements\n if (!formElementsValidation) {\n return false\n }\n\n // If there is no elements on the page that are invalid, we will treat as valid\n return element.elements.some((formElement) => {\n switch (formElement.type) {\n case 'page':\n case 'section': {\n return checkSectionValidity(formElement, formElementsValidation)\n }\n default: {\n return formElementsValidation[formElement.name]\n }\n }\n })\n}\n\nexport function getInvalidAttachment(\n value: unknown,\n): attachmentsService.AttachmentError | undefined {\n if (\n value &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === 'ERROR'\n ) {\n return value as attachmentsService.AttachmentError\n }\n}\n\nexport function validateAttachments(\n value: FormElementBinaryStorageValue[] | undefined,\n): string[] {\n const exceedsMaximumSize = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EXCEEDS_MAX_SIZE'\n ) {\n return true\n }\n })\n const emptyFiles = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EMPTY_FILE'\n ) {\n return true\n }\n })\n if (!exceedsMaximumSize && !emptyFiles) {\n const invalidAttachmentNames = value?.reduce(\n (invalidAttachmentNames: string[], att) => {\n const attachmentName = getInvalidAttachment(att)?.fileName\n if (attachmentName) {\n invalidAttachmentNames.push(attachmentName)\n }\n return invalidAttachmentNames\n },\n [],\n )\n if (invalidAttachmentNames?.length) {\n return [`${invalidAttachmentNames.join(', ')} could not be uploaded.`]\n }\n return []\n }\n let errorMessage\n if (exceedsMaximumSize) {\n errorMessage = 'One or more of the files exceed the maximum size allowed.'\n }\n if (emptyFiles) {\n const emptyMessage = 'One or more of the files are empty.'\n errorMessage = errorMessage\n ? `${errorMessage} ${emptyMessage}`\n : emptyMessage\n }\n if (errorMessage) {\n return [errorMessage]\n }\n\n return []\n}\n\nexport const generateLookupValidationMessage = (\n lookupButtonConfig?: EnvironmentTypes.ButtonConfiguration,\n) => {\n return lookupButtonConfig && lookupButtonConfig.label\n ? `${lookupButtonConfig.label} is required`\n : 'Lookup is required'\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { v4 as uuidv4 } from 'uuid';
2
- import { localisationService } from '@oneblink/apps';
2
+ import { localisationService } from '../apps';
3
3
  import { prepareNewAttachment } from './attachments';
4
4
  import { dataUriToBlobSync } from './blob-utils';
5
5
  import generateCivicaNameRecordElements from './generateCivicaNameRecordElements';
@@ -1 +1 @@
1
- {"version":3,"file":"generate-default-data.js","sourceRoot":"","sources":["../../src/services/generate-default-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { attachmentsService, localisationService } from '@oneblink/apps'\nimport { prepareNewAttachment } from './attachments'\nimport { dataUriToBlobSync } from './blob-utils'\nimport generateCivicaNameRecordElements from './generateCivicaNameRecordElements'\n\nexport const ENTRY_ID_PROPERTY_NAME = '$__id'\nexport const generateNewRepeatableSetEntry = () => ({\n [ENTRY_ID_PROPERTY_NAME]: uuidv4(),\n})\n\nfunction parseAttachment(\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n // Check for attachments that have not been uploaded yet\n if (\n typeof record.type === 'string' &&\n typeof record._id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.isPrivate === 'boolean'\n ) {\n return record as attachmentsService.Attachment\n }\n\n // Check for attachments that have been uploaded already\n if (\n typeof record.id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.url === 'string' &&\n typeof record.contentType === 'string' &&\n typeof record.isPrivate === 'boolean' &&\n parseUnknownAsRecord(\n record.s3,\n (s3) =>\n typeof s3.bucket === 'string' &&\n typeof s3.key === 'string' &&\n typeof s3.region === 'string',\n )\n ) {\n return record as SubmissionTypes.FormSubmissionAttachment\n }\n })\n}\n\nfunction parseFile(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n if (\n record.type === undefined &&\n typeof record.fileName === 'string' &&\n typeof record.data === 'string'\n ) {\n const blob = dataUriToBlobSync(record.data)\n return prepareNewAttachment(blob, record.fileName, element)\n }\n\n return parseAttachment(record)\n })\n}\n\nfunction parseFiles(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): Array<attachmentsService.Attachment> | undefined {\n if (Array.isArray(value)) {\n const files = value.reduce<Array<attachmentsService.Attachment>>(\n (files, v) => {\n const file = parseFile(element, v)\n if (file) {\n files.push(file)\n }\n return files\n },\n [],\n )\n if (files.length) {\n return files\n }\n }\n}\n\nexport function parseDateValue({\n dateOnly,\n daysOffset,\n value,\n}: {\n dateOnly: boolean\n daysOffset: number | undefined\n value: unknown\n}): string | undefined {\n if (typeof value !== 'string') {\n return\n }\n\n const date = localisationService.generateDate({ daysOffset, value })\n if (!date) {\n return\n }\n\n if (dateOnly) {\n const { year, month, day } = new Intl.DateTimeFormat(\n localisationService.getLocale(),\n {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n },\n )\n .formatToParts(date)\n .reduce(\n (memo, { type, value }) => ({\n ...memo,\n [type]: value,\n }),\n {\n year: '',\n month: '',\n day: '',\n },\n )\n // This is a workaround for an iOS 15 bug where the year was being returned as 2 digits: https://bugs.webkit.org/show_bug.cgi?id=230827\n const fixedYear = year.length === 2 ? date.getFullYear() : year\n return `${fixedYear}-${month}-${day}`\n } else {\n return date.toISOString()\n }\n}\n\nfunction parseStringValue(value: unknown) {\n if (typeof value === 'string' && !!value) {\n return value\n }\n return\n}\n\nfunction parseNumberValue(value: unknown) {\n if (typeof value === 'number' && !isNaN(value)) {\n return value\n }\n return\n}\n\nfunction parseStringArrayValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.filter((val) => typeof val === 'string')\n }\n return\n}\n\nfunction parseUnknownAsRecord<T>(\n value: unknown,\n validate: (value: Record<string, unknown>) => T | undefined,\n): T | undefined {\n if (typeof value === 'object' && value !== null) {\n return validate(value as Record<string, unknown>)\n }\n}\n\nfunction parseUnknownAsArray<T>(\n value: unknown,\n validate: (value: unknown[]) => T[] | undefined,\n): T[] | undefined {\n if (Array.isArray(value)) {\n return validate(value)\n }\n}\n\nfunction parseFormSubmissionModel(\n elements: FormTypes.FormElement[],\n value: unknown,\n): SubmissionTypes.S3SubmissionData['submission'] | undefined {\n return parseUnknownAsRecord(value, (record) => {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (model, element) => {\n switch (element.type) {\n case 'section':\n case 'page': {\n const partialModel = parseFormSubmissionModel(\n element.elements,\n model,\n )\n Object.assign(model, partialModel)\n break\n }\n default: {\n model[element.name] = parsePreFillData(\n element,\n record[element.name],\n )\n }\n }\n\n return model\n },\n record,\n )\n })\n}\n\nfunction parsePreFillData(\n element: FormTypes.FormElement,\n value: unknown,\n): unknown {\n switch (element.type) {\n // If a form element is pre-filled with the \"legacy\" storage type\n // format (base64), the data should be uploaded to S3 and set in the\n // submission data. This is to cater for instances of pre-fill data\n // being created before the \"legacy\" storage type was removed.\n case 'camera':\n case 'draw': {\n if (!value) {\n break\n } else if (typeof value === 'string') {\n const blob = dataUriToBlobSync(value)\n return prepareNewAttachment(blob, 'file', element)\n } else {\n return parseAttachment(value)\n }\n }\n case 'files': {\n return parseFiles(element, value)\n }\n case 'compliance': {\n return parseUnknownAsRecord(value, (record) => {\n const selectedValue = parseStringValue(record.value)\n const notes = parseStringValue(record.notes)\n if (selectedValue) {\n return {\n value: selectedValue,\n notes,\n files: parseFiles(element, record.files),\n }\n }\n })\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return parseDateValue({\n dateOnly: element.type === 'date',\n daysOffset: undefined,\n value,\n })\n }\n case 'bsb': {\n const text = parseStringValue(value)\n if (text?.match(/\\d{3}-\\d{3}/)) {\n return text\n }\n return\n }\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'radio':\n case 'autocomplete': {\n return parseStringValue(value)\n }\n case 'select': {\n if (element.multi) {\n return parseStringArrayValue(value)\n } else {\n return parseStringValue(value)\n }\n }\n case 'checkboxes': {\n return parseStringArrayValue(value)\n }\n case 'calculation':\n case 'number': {\n return parseNumberValue(value)\n }\n case 'boolean': {\n return typeof value === 'boolean' ? value : false\n }\n case 'abn': {\n return parseUnknownAsRecord(value, (record) => {\n const hasABN = parseUnknownAsRecord(record.ABN, (ABN) => {\n if (Array.isArray(ABN)) {\n return ABN.some((abn) => !!parseStringValue(abn.identifierValue))\n }\n if (parseStringValue(ABN.identifierValue)) {\n return true\n }\n })\n if (!hasABN) {\n return\n }\n return record\n })\n }\n case 'pointCadastralParcel': {\n return parseUnknownAsRecord(value, (record) => {\n const hasParcelId = parseUnknownAsRecord(\n record.parcelBundle,\n (parcelBundles) => {\n return parseUnknownAsRecord(parcelBundles?.[0], (parcelBundle) => {\n return parseStringValue(parcelBundle?.parcelId)\n })\n },\n )\n if (hasParcelId) {\n return record\n }\n })\n }\n case 'pointAddress':\n case 'geoscapeAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.addressId)) {\n return record\n }\n })\n }\n case 'pointAddressV3': {\n return parseUnknownAsRecord(value, (record) => {\n return parseUnknownAsRecord(record.properties, (properties) => {\n if (parseStringValue(properties.addressId)) {\n return record\n }\n })\n })\n }\n case 'googleAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.place_id)) {\n return record\n }\n })\n }\n case 'freshdeskDependentField': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.category) &&\n parseStringValue(record.subCategory) &&\n parseStringValue(record.item)\n ) {\n return record\n }\n })\n }\n case 'civicaNameRecord': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.title) &&\n parseStringValue(record.familyName) &&\n Array.isArray(record.streetAddress)\n ) {\n return record\n }\n })\n }\n case 'civicaStreetName': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.formattedAccount) &&\n parseStringValue(record.formattedStreet)\n ) {\n return record\n }\n })\n }\n case 'form': {\n return parseFormSubmissionModel(element.elements || [], value)\n }\n case 'repeatableSet': {\n if (Array.isArray(element.elements) && Array.isArray(value)) {\n return value.reduce((entries, v) => {\n const entry = parseFormSubmissionModel(\n element.elements,\n v\n ? {\n ...generateNewRepeatableSetEntry(),\n ...v,\n }\n : undefined,\n )\n if (entry) {\n entries.push(entry)\n }\n return entries\n }, [])\n }\n break\n }\n case 'location': {\n return parseUnknownAsRecord(value, (record) => {\n const latitude = parseNumberValue(record.latitude)\n const longitude = parseNumberValue(record.longitude)\n if (latitude !== undefined && longitude !== undefined) {\n return {\n latitude,\n longitude,\n zoom: parseNumberValue(record.zoom),\n }\n }\n })\n }\n case 'apiNSWLiquorLicence': {\n return parseUnknownAsRecord(value, (record) => {\n return parseUnknownAsRecord(record.licenceDetail, (licenceDetail) => {\n if (parseStringValue(licenceDetail.licenceNumber)) {\n return record\n }\n })\n })\n }\n case 'arcGISWebMap': {\n return parseUnknownAsRecord(value, (record) => {\n return {\n drawingLayer: parseUnknownAsArray(\n record.drawingLayer,\n (drawingLayer) => drawingLayer,\n ),\n userInput: parseUnknownAsArray(\n record.userInput,\n (userInput) => userInput,\n ),\n layers: parseUnknownAsArray(record.layers, (layers) => {\n if (\n layers.every((layer) =>\n parseUnknownAsRecord(\n layer,\n (layerRecord) =>\n parseStringValue(layerRecord.title) &&\n Array.isArray(layerRecord.graphics),\n ),\n )\n ) {\n return layers\n }\n }),\n view: parseUnknownAsRecord(record.view, (view) => {\n if (\n parseNumberValue(view.latitude) &&\n parseNumberValue(view.longitude) &&\n parseNumberValue(view.zoom)\n ) {\n return view\n }\n }),\n snapshotImages: parseFiles(element, record.snapshotImages),\n }\n })\n }\n case 'lookupButton':\n case 'image':\n case 'html':\n case 'summary':\n case 'captcha':\n case 'heading':\n case 'infoPage':\n case 'page':\n case 'section': {\n return\n }\n default: {\n const never: never = element\n console.warn('Invalid element type used in prefill data', never)\n }\n }\n}\n\nexport default function generateDefaultData(\n elements: FormTypes.FormElement[],\n preFillData: SubmissionTypes.S3SubmissionData['submission'],\n): SubmissionTypes.S3SubmissionData['submission'] {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (m, el) => {\n if (el.type !== 'page' && el.type !== 'section' && el.name in m) {\n m[el.name] = parsePreFillData(el, m[el.name])\n return m\n }\n\n switch (el.type) {\n case 'checkboxes':\n case 'select':\n case 'autocomplete':\n case 'radio':\n case 'compliance': {\n const dv = getOptionsDefaultValue(el)\n if (dv) {\n if (el.type === 'compliance' && typeof dv === 'string') {\n m[el.name] = {\n value: dv,\n }\n } else {\n m[el.name] = dv\n }\n }\n break\n }\n case 'number': {\n if (typeof el.defaultValue === 'number') {\n m[el.name] = el.defaultValue\n } else if (el.isSlider) {\n m[el.name] = el.minNumber\n } else {\n m[el.name] = undefined\n }\n break\n }\n case 'section':\n case 'page': {\n if (Array.isArray(el.elements)) {\n Object.assign(m, generateDefaultData(el.elements, m))\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(el, [])\n m[el.name] = generateDefaultData(nestedElements, {\n ...el.defaultValue,\n })\n break\n }\n case 'form': {\n if (Array.isArray(el.elements)) {\n m[el.name] = generateDefaultData(el.elements, {})\n }\n break\n }\n case 'repeatableSet': {\n if (\n Array.isArray(el.elements) &&\n typeof el.minSetEntries === 'number'\n ) {\n const minSetEntries = el.minSetEntries\n // add min number of entries by default\n const entries = []\n for (let index = 0; index < minSetEntries; index++) {\n const entry = generateDefaultData(\n el.elements,\n generateNewRepeatableSetEntry(),\n )\n entries.push(entry)\n }\n m[el.name] = entries\n }\n break\n }\n case 'date':\n case 'datetime':\n case 'time': {\n if (el.defaultValue) {\n m[el.name] = parseDateValue({\n dateOnly: el.type === 'date',\n daysOffset: el.defaultValueDaysOffset,\n value: el.defaultValue,\n })\n }\n break\n }\n case 'camera':\n case 'draw':\n case 'files': {\n m[el.name] = parsePreFillData(el, el.defaultValue)\n break\n }\n case 'freshdeskDependentField':\n case 'geoscapeAddress':\n case 'pointCadastralParcel':\n case 'pointAddress':\n case 'pointAddressV3':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'abn':\n case 'bsb':\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'location':\n case 'apiNSWLiquorLicence':\n case 'arcGISWebMap': {\n if (el.defaultValue) {\n m[el.name] = el.defaultValue\n }\n break\n }\n case 'boolean': {\n m[el.name] = el.defaultValue || false\n break\n }\n case 'lookupButton':\n case 'captcha':\n case 'heading':\n case 'html':\n case 'image':\n case 'infoPage':\n case 'calculation':\n case 'summary':\n break\n default: {\n const never: never = el\n console.warn('Default value is not supported for element type', never)\n }\n }\n\n return m\n },\n Object.assign({}, preFillData),\n )\n}\n\nconst getOptionsDefaultValue = (el: FormTypes.FormElementWithOptions) => {\n if (!el.defaultValue) {\n return\n }\n // Cater for dynamic options\n if (el.optionsType === 'DYNAMIC' || el.optionsType === 'FRESHDESK_FIELD') {\n return el.defaultValue\n }\n // Cater for multi-select and checkboxes\n else if ((el.type === 'select' && el.multi) || el.type === 'checkboxes') {\n if (Array.isArray(el.defaultValue) && el.defaultValue.length) {\n return el.defaultValue.reduce((optionValues: string[], optionId) => {\n const option = (el.options || []).find(\n (option) => option.id === optionId,\n )\n if (option) {\n optionValues.push(option.value)\n }\n return optionValues\n }, [])\n }\n } else {\n const option = (el.options || []).find(\n (option) => option.id === el.defaultValue,\n )\n if (option) {\n return option.value\n }\n }\n return\n}\n"]}
1
+ {"version":3,"file":"generate-default-data.js","sourceRoot":"","sources":["../../src/services/generate-default-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { attachmentsService, localisationService } from '../apps'\nimport { prepareNewAttachment } from './attachments'\nimport { dataUriToBlobSync } from './blob-utils'\nimport generateCivicaNameRecordElements from './generateCivicaNameRecordElements'\n\nexport const ENTRY_ID_PROPERTY_NAME = '$__id'\nexport const generateNewRepeatableSetEntry = () => ({\n [ENTRY_ID_PROPERTY_NAME]: uuidv4(),\n})\n\nfunction parseAttachment(\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n // Check for attachments that have not been uploaded yet\n if (\n typeof record.type === 'string' &&\n typeof record._id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.isPrivate === 'boolean'\n ) {\n return record as attachmentsService.Attachment\n }\n\n // Check for attachments that have been uploaded already\n if (\n typeof record.id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.url === 'string' &&\n typeof record.contentType === 'string' &&\n typeof record.isPrivate === 'boolean' &&\n parseUnknownAsRecord(\n record.s3,\n (s3) =>\n typeof s3.bucket === 'string' &&\n typeof s3.key === 'string' &&\n typeof s3.region === 'string',\n )\n ) {\n return record as SubmissionTypes.FormSubmissionAttachment\n }\n })\n}\n\nfunction parseFile(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n if (\n record.type === undefined &&\n typeof record.fileName === 'string' &&\n typeof record.data === 'string'\n ) {\n const blob = dataUriToBlobSync(record.data)\n return prepareNewAttachment(blob, record.fileName, element)\n }\n\n return parseAttachment(record)\n })\n}\n\nfunction parseFiles(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): Array<attachmentsService.Attachment> | undefined {\n if (Array.isArray(value)) {\n const files = value.reduce<Array<attachmentsService.Attachment>>(\n (files, v) => {\n const file = parseFile(element, v)\n if (file) {\n files.push(file)\n }\n return files\n },\n [],\n )\n if (files.length) {\n return files\n }\n }\n}\n\nexport function parseDateValue({\n dateOnly,\n daysOffset,\n value,\n}: {\n dateOnly: boolean\n daysOffset: number | undefined\n value: unknown\n}): string | undefined {\n if (typeof value !== 'string') {\n return\n }\n\n const date = localisationService.generateDate({ daysOffset, value })\n if (!date) {\n return\n }\n\n if (dateOnly) {\n const { year, month, day } = new Intl.DateTimeFormat(\n localisationService.getLocale(),\n {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n },\n )\n .formatToParts(date)\n .reduce(\n (memo, { type, value }) => ({\n ...memo,\n [type]: value,\n }),\n {\n year: '',\n month: '',\n day: '',\n },\n )\n // This is a workaround for an iOS 15 bug where the year was being returned as 2 digits: https://bugs.webkit.org/show_bug.cgi?id=230827\n const fixedYear = year.length === 2 ? date.getFullYear() : year\n return `${fixedYear}-${month}-${day}`\n } else {\n return date.toISOString()\n }\n}\n\nfunction parseStringValue(value: unknown) {\n if (typeof value === 'string' && !!value) {\n return value\n }\n return\n}\n\nfunction parseNumberValue(value: unknown) {\n if (typeof value === 'number' && !isNaN(value)) {\n return value\n }\n return\n}\n\nfunction parseStringArrayValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.filter((val) => typeof val === 'string')\n }\n return\n}\n\nfunction parseUnknownAsRecord<T>(\n value: unknown,\n validate: (value: Record<string, unknown>) => T | undefined,\n): T | undefined {\n if (typeof value === 'object' && value !== null) {\n return validate(value as Record<string, unknown>)\n }\n}\n\nfunction parseUnknownAsArray<T>(\n value: unknown,\n validate: (value: unknown[]) => T[] | undefined,\n): T[] | undefined {\n if (Array.isArray(value)) {\n return validate(value)\n }\n}\n\nfunction parseFormSubmissionModel(\n elements: FormTypes.FormElement[],\n value: unknown,\n): SubmissionTypes.S3SubmissionData['submission'] | undefined {\n return parseUnknownAsRecord(value, (record) => {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (model, element) => {\n switch (element.type) {\n case 'section':\n case 'page': {\n const partialModel = parseFormSubmissionModel(\n element.elements,\n model,\n )\n Object.assign(model, partialModel)\n break\n }\n default: {\n model[element.name] = parsePreFillData(\n element,\n record[element.name],\n )\n }\n }\n\n return model\n },\n record,\n )\n })\n}\n\nfunction parsePreFillData(\n element: FormTypes.FormElement,\n value: unknown,\n): unknown {\n switch (element.type) {\n // If a form element is pre-filled with the \"legacy\" storage type\n // format (base64), the data should be uploaded to S3 and set in the\n // submission data. This is to cater for instances of pre-fill data\n // being created before the \"legacy\" storage type was removed.\n case 'camera':\n case 'draw': {\n if (!value) {\n break\n } else if (typeof value === 'string') {\n const blob = dataUriToBlobSync(value)\n return prepareNewAttachment(blob, 'file', element)\n } else {\n return parseAttachment(value)\n }\n }\n case 'files': {\n return parseFiles(element, value)\n }\n case 'compliance': {\n return parseUnknownAsRecord(value, (record) => {\n const selectedValue = parseStringValue(record.value)\n const notes = parseStringValue(record.notes)\n if (selectedValue) {\n return {\n value: selectedValue,\n notes,\n files: parseFiles(element, record.files),\n }\n }\n })\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return parseDateValue({\n dateOnly: element.type === 'date',\n daysOffset: undefined,\n value,\n })\n }\n case 'bsb': {\n const text = parseStringValue(value)\n if (text?.match(/\\d{3}-\\d{3}/)) {\n return text\n }\n return\n }\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'radio':\n case 'autocomplete': {\n return parseStringValue(value)\n }\n case 'select': {\n if (element.multi) {\n return parseStringArrayValue(value)\n } else {\n return parseStringValue(value)\n }\n }\n case 'checkboxes': {\n return parseStringArrayValue(value)\n }\n case 'calculation':\n case 'number': {\n return parseNumberValue(value)\n }\n case 'boolean': {\n return typeof value === 'boolean' ? value : false\n }\n case 'abn': {\n return parseUnknownAsRecord(value, (record) => {\n const hasABN = parseUnknownAsRecord(record.ABN, (ABN) => {\n if (Array.isArray(ABN)) {\n return ABN.some((abn) => !!parseStringValue(abn.identifierValue))\n }\n if (parseStringValue(ABN.identifierValue)) {\n return true\n }\n })\n if (!hasABN) {\n return\n }\n return record\n })\n }\n case 'pointCadastralParcel': {\n return parseUnknownAsRecord(value, (record) => {\n const hasParcelId = parseUnknownAsRecord(\n record.parcelBundle,\n (parcelBundles) => {\n return parseUnknownAsRecord(parcelBundles?.[0], (parcelBundle) => {\n return parseStringValue(parcelBundle?.parcelId)\n })\n },\n )\n if (hasParcelId) {\n return record\n }\n })\n }\n case 'pointAddress':\n case 'geoscapeAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.addressId)) {\n return record\n }\n })\n }\n case 'pointAddressV3': {\n return parseUnknownAsRecord(value, (record) => {\n return parseUnknownAsRecord(record.properties, (properties) => {\n if (parseStringValue(properties.addressId)) {\n return record\n }\n })\n })\n }\n case 'googleAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.place_id)) {\n return record\n }\n })\n }\n case 'freshdeskDependentField': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.category) &&\n parseStringValue(record.subCategory) &&\n parseStringValue(record.item)\n ) {\n return record\n }\n })\n }\n case 'civicaNameRecord': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.title) &&\n parseStringValue(record.familyName) &&\n Array.isArray(record.streetAddress)\n ) {\n return record\n }\n })\n }\n case 'civicaStreetName': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.formattedAccount) &&\n parseStringValue(record.formattedStreet)\n ) {\n return record\n }\n })\n }\n case 'form': {\n return parseFormSubmissionModel(element.elements || [], value)\n }\n case 'repeatableSet': {\n if (Array.isArray(element.elements) && Array.isArray(value)) {\n return value.reduce((entries, v) => {\n const entry = parseFormSubmissionModel(\n element.elements,\n v\n ? {\n ...generateNewRepeatableSetEntry(),\n ...v,\n }\n : undefined,\n )\n if (entry) {\n entries.push(entry)\n }\n return entries\n }, [])\n }\n break\n }\n case 'location': {\n return parseUnknownAsRecord(value, (record) => {\n const latitude = parseNumberValue(record.latitude)\n const longitude = parseNumberValue(record.longitude)\n if (latitude !== undefined && longitude !== undefined) {\n return {\n latitude,\n longitude,\n zoom: parseNumberValue(record.zoom),\n }\n }\n })\n }\n case 'apiNSWLiquorLicence': {\n return parseUnknownAsRecord(value, (record) => {\n return parseUnknownAsRecord(record.licenceDetail, (licenceDetail) => {\n if (parseStringValue(licenceDetail.licenceNumber)) {\n return record\n }\n })\n })\n }\n case 'arcGISWebMap': {\n return parseUnknownAsRecord(value, (record) => {\n return {\n drawingLayer: parseUnknownAsArray(\n record.drawingLayer,\n (drawingLayer) => drawingLayer,\n ),\n userInput: parseUnknownAsArray(\n record.userInput,\n (userInput) => userInput,\n ),\n layers: parseUnknownAsArray(record.layers, (layers) => {\n if (\n layers.every((layer) =>\n parseUnknownAsRecord(\n layer,\n (layerRecord) =>\n parseStringValue(layerRecord.title) &&\n Array.isArray(layerRecord.graphics),\n ),\n )\n ) {\n return layers\n }\n }),\n view: parseUnknownAsRecord(record.view, (view) => {\n if (\n parseNumberValue(view.latitude) &&\n parseNumberValue(view.longitude) &&\n parseNumberValue(view.zoom)\n ) {\n return view\n }\n }),\n snapshotImages: parseFiles(element, record.snapshotImages),\n }\n })\n }\n case 'lookupButton':\n case 'image':\n case 'html':\n case 'summary':\n case 'captcha':\n case 'heading':\n case 'infoPage':\n case 'page':\n case 'section': {\n return\n }\n default: {\n const never: never = element\n console.warn('Invalid element type used in prefill data', never)\n }\n }\n}\n\nexport default function generateDefaultData(\n elements: FormTypes.FormElement[],\n preFillData: SubmissionTypes.S3SubmissionData['submission'],\n): SubmissionTypes.S3SubmissionData['submission'] {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (m, el) => {\n if (el.type !== 'page' && el.type !== 'section' && el.name in m) {\n m[el.name] = parsePreFillData(el, m[el.name])\n return m\n }\n\n switch (el.type) {\n case 'checkboxes':\n case 'select':\n case 'autocomplete':\n case 'radio':\n case 'compliance': {\n const dv = getOptionsDefaultValue(el)\n if (dv) {\n if (el.type === 'compliance' && typeof dv === 'string') {\n m[el.name] = {\n value: dv,\n }\n } else {\n m[el.name] = dv\n }\n }\n break\n }\n case 'number': {\n if (typeof el.defaultValue === 'number') {\n m[el.name] = el.defaultValue\n } else if (el.isSlider) {\n m[el.name] = el.minNumber\n } else {\n m[el.name] = undefined\n }\n break\n }\n case 'section':\n case 'page': {\n if (Array.isArray(el.elements)) {\n Object.assign(m, generateDefaultData(el.elements, m))\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(el, [])\n m[el.name] = generateDefaultData(nestedElements, {\n ...el.defaultValue,\n })\n break\n }\n case 'form': {\n if (Array.isArray(el.elements)) {\n m[el.name] = generateDefaultData(el.elements, {})\n }\n break\n }\n case 'repeatableSet': {\n if (\n Array.isArray(el.elements) &&\n typeof el.minSetEntries === 'number'\n ) {\n const minSetEntries = el.minSetEntries\n // add min number of entries by default\n const entries = []\n for (let index = 0; index < minSetEntries; index++) {\n const entry = generateDefaultData(\n el.elements,\n generateNewRepeatableSetEntry(),\n )\n entries.push(entry)\n }\n m[el.name] = entries\n }\n break\n }\n case 'date':\n case 'datetime':\n case 'time': {\n if (el.defaultValue) {\n m[el.name] = parseDateValue({\n dateOnly: el.type === 'date',\n daysOffset: el.defaultValueDaysOffset,\n value: el.defaultValue,\n })\n }\n break\n }\n case 'camera':\n case 'draw':\n case 'files': {\n m[el.name] = parsePreFillData(el, el.defaultValue)\n break\n }\n case 'freshdeskDependentField':\n case 'geoscapeAddress':\n case 'pointCadastralParcel':\n case 'pointAddress':\n case 'pointAddressV3':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'abn':\n case 'bsb':\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'location':\n case 'apiNSWLiquorLicence':\n case 'arcGISWebMap': {\n if (el.defaultValue) {\n m[el.name] = el.defaultValue\n }\n break\n }\n case 'boolean': {\n m[el.name] = el.defaultValue || false\n break\n }\n case 'lookupButton':\n case 'captcha':\n case 'heading':\n case 'html':\n case 'image':\n case 'infoPage':\n case 'calculation':\n case 'summary':\n break\n default: {\n const never: never = el\n console.warn('Default value is not supported for element type', never)\n }\n }\n\n return m\n },\n Object.assign({}, preFillData),\n )\n}\n\nconst getOptionsDefaultValue = (el: FormTypes.FormElementWithOptions) => {\n if (!el.defaultValue) {\n return\n }\n // Cater for dynamic options\n if (el.optionsType === 'DYNAMIC' || el.optionsType === 'FRESHDESK_FIELD') {\n return el.defaultValue\n }\n // Cater for multi-select and checkboxes\n else if ((el.type === 'select' && el.multi) || el.type === 'checkboxes') {\n if (Array.isArray(el.defaultValue) && el.defaultValue.length) {\n return el.defaultValue.reduce((optionValues: string[], optionId) => {\n const option = (el.options || []).find(\n (option) => option.id === optionId,\n )\n if (option) {\n optionValues.push(option.value)\n }\n return optionValues\n }, [])\n }\n } else {\n const option = (el.options || []).find(\n (option) => option.id === el.defaultValue,\n )\n if (option) {\n return option.value\n }\n }\n return\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { submissionService, typeCastService } from '@oneblink/sdk-core';
2
- import { localisationService } from '@oneblink/apps';
2
+ import { localisationService } from '../apps';
3
3
  import { v4 as uuidv4 } from 'uuid';
4
4
  function processInjectableDynamicOption({ option: resource, submission: rootSubmission, formElements: rootFormElements, contextElements, contextSubmission, ...params }) {
5
5
  return submissionService.processInjectablesInCustomResource({
@@ -1 +1 @@
1
- {"version":3,"file":"injectableOptions.js","sourceRoot":"","sources":["../../src/services/injectableOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { submissionService, typeCastService } from '@oneblink/sdk-core'\nimport { localisationService } from '@oneblink/apps'\nimport { v4 as uuidv4 } from 'uuid'\nimport { MiscTypes } from '@oneblink/types'\nimport { TaskContext } from '../hooks/useTaskContext'\ntype Option = Pick<FormTypes.ChoiceElementOption, 'value' | 'label'>\n\nfunction processInjectableDynamicOption({\n option: resource,\n submission: rootSubmission,\n formElements: rootFormElements,\n contextElements,\n contextSubmission,\n ...params\n}: {\n option: Option\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n contextSubmission?: SubmissionTypes.S3SubmissionData['submission']\n}): Map<string, Option> {\n return submissionService.processInjectablesInCustomResource<Option>({\n resource,\n submission: { ...rootSubmission, ...contextSubmission },\n formElements: [...rootFormElements, ...contextElements],\n replaceRootInjectables(option, submission, formElements) {\n // Replace root level form element values\n const replaceableParams: Parameters<\n typeof localisationService.replaceInjectablesWithElementValues\n >[1] = {\n ...params,\n submission,\n formElements,\n task: params.taskContext.task,\n taskGroup: params.taskContext.taskGroup,\n taskGroupInstance: params.taskContext.taskGroupInstance,\n excludeNestedElements: true,\n }\n const {\n text: label,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInLabel,\n } = localisationService.replaceInjectablesWithElementValues(\n option.label,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInLabel) {\n return\n }\n\n const {\n text: value,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInValue,\n } = localisationService.replaceInjectablesWithElementValues(\n option.value,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInValue) {\n return\n }\n\n return [\n label + ' ' + value,\n value,\n {\n value,\n label,\n },\n ]\n },\n prepareNestedInjectables(option, prepare) {\n return {\n value: prepare(option.value),\n label: prepare(option.label),\n }\n },\n })\n}\n\nexport default function processInjectableOption({\n option,\n submission,\n formElements,\n contextElements,\n contextSubmission,\n taskContext,\n userProfile,\n}: {\n option: FormTypes.ChoiceElementOption\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n contextSubmission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.ChoiceElementOption[] {\n const options = processInjectableDynamicOption({\n option,\n submission,\n formElements,\n taskContext,\n userProfile,\n contextSubmission,\n contextElements,\n })\n\n const generatedOptions: FormTypes.ChoiceElementOption[] = []\n\n options.forEach(({ label, value }) => {\n generatedOptions.push({\n ...option,\n id: options.size === 1 ? option.id : uuidv4(),\n label,\n value,\n })\n })\n return generatedOptions\n}\n\nfunction injectOptionsAcrossEntriesElements({\n contextElements,\n contextSubmission,\n elements,\n entries,\n taskContext,\n userProfile,\n}: {\n contextElements: FormTypes.FormElement[]\n contextSubmission: SubmissionTypes.S3SubmissionData['submission']\n elements: FormTypes.FormElement[]\n entries: SubmissionTypes.S3SubmissionData['submission'][]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n return elements.map<FormTypes.FormElement>((e) => {\n switch (e.type) {\n case 'page':\n case 'section': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // info elements on other pages/sections will need the parent definition\n contextElements,\n contextSubmission,\n elements: e.elements,\n entries,\n taskContext,\n userProfile,\n }),\n }\n }\n case 'form': {\n if (Array.isArray(e.elements)) {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // sub-forms do not have context of parent elements\n contextElements: e.elements,\n contextSubmission,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n if (entry[e.name]) {\n memo.push(\n entry[\n e.name\n ] as SubmissionTypes.S3SubmissionData['submission'],\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n } else {\n return e\n }\n }\n case 'repeatableSet': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // repeatable set entries may only know about elements within entry\n contextElements,\n contextSubmission,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n const nestedEntries = entry[e.name]\n if (Array.isArray(nestedEntries)) {\n memo.push(\n ...(nestedEntries as SubmissionTypes.S3SubmissionData['submission'][]),\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n }\n default: {\n const optionsElement = typeCastService.formElements.toOptionsElement(e)\n if (optionsElement) {\n return {\n ...optionsElement,\n options: entries.reduce<FormTypes.ChoiceElementOption[]>(\n (newOptions, submission) => {\n optionsElement.options?.forEach((o) => {\n const injected = processInjectableOption({\n option: o,\n submission,\n contextSubmission,\n formElements: elements,\n contextElements,\n taskContext,\n userProfile,\n })\n\n newOptions.push(\n ...injected.filter((generatedOption) => {\n return !newOptions.some(\n (addedOption) =>\n addedOption.value === generatedOption.value,\n )\n }),\n )\n })\n return newOptions\n },\n [],\n ),\n }\n }\n return e\n }\n }\n })\n}\n\nexport function injectOptionsAcrossAllElements({\n submission,\n ...params\n}: {\n elements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n // We iterate over entries as an array of submission objects because\n // child elements of a repeatable set that have injected options\n // need to include all of the injected options from the same elements\n // in sibling entries within the set. Otherwise we will not have the\n // labels for each available option to display the submission.\n return injectOptionsAcrossEntriesElements({\n ...params,\n contextSubmission: submission,\n entries: [submission],\n })\n}\n"]}
1
+ {"version":3,"file":"injectableOptions.js","sourceRoot":"","sources":["../../src/services/injectableOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { submissionService, typeCastService } from '@oneblink/sdk-core'\nimport { localisationService } from '../apps'\nimport { v4 as uuidv4 } from 'uuid'\nimport { MiscTypes } from '@oneblink/types'\nimport { TaskContext } from '../hooks/useTaskContext'\ntype Option = Pick<FormTypes.ChoiceElementOption, 'value' | 'label'>\n\nfunction processInjectableDynamicOption({\n option: resource,\n submission: rootSubmission,\n formElements: rootFormElements,\n contextElements,\n contextSubmission,\n ...params\n}: {\n option: Option\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n contextSubmission?: SubmissionTypes.S3SubmissionData['submission']\n}): Map<string, Option> {\n return submissionService.processInjectablesInCustomResource<Option>({\n resource,\n submission: { ...rootSubmission, ...contextSubmission },\n formElements: [...rootFormElements, ...contextElements],\n replaceRootInjectables(option, submission, formElements) {\n // Replace root level form element values\n const replaceableParams: Parameters<\n typeof localisationService.replaceInjectablesWithElementValues\n >[1] = {\n ...params,\n submission,\n formElements,\n task: params.taskContext.task,\n taskGroup: params.taskContext.taskGroup,\n taskGroupInstance: params.taskContext.taskGroupInstance,\n excludeNestedElements: true,\n }\n const {\n text: label,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInLabel,\n } = localisationService.replaceInjectablesWithElementValues(\n option.label,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInLabel) {\n return\n }\n\n const {\n text: value,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInValue,\n } = localisationService.replaceInjectablesWithElementValues(\n option.value,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInValue) {\n return\n }\n\n return [\n label + ' ' + value,\n value,\n {\n value,\n label,\n },\n ]\n },\n prepareNestedInjectables(option, prepare) {\n return {\n value: prepare(option.value),\n label: prepare(option.label),\n }\n },\n })\n}\n\nexport default function processInjectableOption({\n option,\n submission,\n formElements,\n contextElements,\n contextSubmission,\n taskContext,\n userProfile,\n}: {\n option: FormTypes.ChoiceElementOption\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n contextSubmission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.ChoiceElementOption[] {\n const options = processInjectableDynamicOption({\n option,\n submission,\n formElements,\n taskContext,\n userProfile,\n contextSubmission,\n contextElements,\n })\n\n const generatedOptions: FormTypes.ChoiceElementOption[] = []\n\n options.forEach(({ label, value }) => {\n generatedOptions.push({\n ...option,\n id: options.size === 1 ? option.id : uuidv4(),\n label,\n value,\n })\n })\n return generatedOptions\n}\n\nfunction injectOptionsAcrossEntriesElements({\n contextElements,\n contextSubmission,\n elements,\n entries,\n taskContext,\n userProfile,\n}: {\n contextElements: FormTypes.FormElement[]\n contextSubmission: SubmissionTypes.S3SubmissionData['submission']\n elements: FormTypes.FormElement[]\n entries: SubmissionTypes.S3SubmissionData['submission'][]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n return elements.map<FormTypes.FormElement>((e) => {\n switch (e.type) {\n case 'page':\n case 'section': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // info elements on other pages/sections will need the parent definition\n contextElements,\n contextSubmission,\n elements: e.elements,\n entries,\n taskContext,\n userProfile,\n }),\n }\n }\n case 'form': {\n if (Array.isArray(e.elements)) {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // sub-forms do not have context of parent elements\n contextElements: e.elements,\n contextSubmission,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n if (entry[e.name]) {\n memo.push(\n entry[\n e.name\n ] as SubmissionTypes.S3SubmissionData['submission'],\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n } else {\n return e\n }\n }\n case 'repeatableSet': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // repeatable set entries may only know about elements within entry\n contextElements,\n contextSubmission,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n const nestedEntries = entry[e.name]\n if (Array.isArray(nestedEntries)) {\n memo.push(\n ...(nestedEntries as SubmissionTypes.S3SubmissionData['submission'][]),\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n }\n default: {\n const optionsElement = typeCastService.formElements.toOptionsElement(e)\n if (optionsElement) {\n return {\n ...optionsElement,\n options: entries.reduce<FormTypes.ChoiceElementOption[]>(\n (newOptions, submission) => {\n optionsElement.options?.forEach((o) => {\n const injected = processInjectableOption({\n option: o,\n submission,\n contextSubmission,\n formElements: elements,\n contextElements,\n taskContext,\n userProfile,\n })\n\n newOptions.push(\n ...injected.filter((generatedOption) => {\n return !newOptions.some(\n (addedOption) =>\n addedOption.value === generatedOption.value,\n )\n }),\n )\n })\n return newOptions\n },\n [],\n ),\n }\n }\n return e\n }\n }\n })\n}\n\nexport function injectOptionsAcrossAllElements({\n submission,\n ...params\n}: {\n elements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n // We iterate over entries as an array of submission objects because\n // child elements of a repeatable set that have injected options\n // need to include all of the injected options from the same elements\n // in sibling entries within the set. Otherwise we will not have the\n // labels for each available option to display the submission.\n return injectOptionsAcrossEntriesElements({\n ...params,\n contextSubmission: submission,\n entries: [submission],\n })\n}\n"]}
@@ -1,2 +1,2 @@
1
- import { attachmentsService } from '@oneblink/apps';
1
+ import { attachmentsService } from '../apps';
2
2
  export type FormElementBinaryStorageValue = attachmentsService.Attachment | string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/types/attachments.ts"],"names":[],"mappings":"","sourcesContent":["import { attachmentsService } from '@oneblink/apps'\n\nexport type FormElementBinaryStorageValue =\n | attachmentsService.Attachment\n | string\n | undefined\n"]}
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/types/attachments.ts"],"names":[],"mappings":"","sourcesContent":["import { attachmentsService } from '../apps'\n\nexport type FormElementBinaryStorageValue =\n | attachmentsService.Attachment\n | string\n | undefined\n"]}
@@ -1,4 +1,4 @@
1
- import { Sentry } from '@oneblink/apps';
1
+ import { Sentry } from '../apps';
2
2
  export const sendGoogleAnalyticsEvent = (eventName, eventParams) => {
3
3
  if (typeof window.gtag === 'function') {
4
4
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"sendGoogleAnalyticsEvent.js","sourceRoot":"","sources":["../../src/utils/sendGoogleAnalyticsEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,SAAiB,EACjB,WAAoC,EACpC,EAAE;IACF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;YAC1E,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,CAAC,CAAC,CAAA;YACvE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,kBAAiD,EACjD,EAAE;IACF,IAAI,CAAC,kBAAkB;QAAE,OAAM;IAC/B,OAAO,kBAAkB,IAAI,OAAO,IAAI,kBAAkB;QACxD,CAAC,CAAC,kBAAkB,CAAC,KAAK;QAC1B,CAAC,CAAC,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,MAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,EAAE,CAAA,CAAA;AACxD,CAAC,CAAA","sourcesContent":["import { Sentry } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\n\nexport const sendGoogleAnalyticsEvent = (\n eventName: string,\n eventParams: Record<string, unknown>,\n) => {\n if (typeof window.gtag === 'function') {\n try {\n console.log('pushing event to google analytics: ', eventName, eventParams)\n window.gtag('event', eventName, eventParams)\n } catch (e) {\n console.warn('An error occured pushing event to google analytics: ', e)\n Sentry.captureException(e)\n }\n }\n}\n\nexport const getElementDisplayNameForAnalyticsEvent = (\n lastElementUpdated?: FormTypes.FormElement | null,\n) => {\n if (!lastElementUpdated) return\n return lastElementUpdated && 'label' in lastElementUpdated\n ? lastElementUpdated.label\n : lastElementUpdated?.name || lastElementUpdated?.id\n}\n"]}
1
+ {"version":3,"file":"sendGoogleAnalyticsEvent.js","sourceRoot":"","sources":["../../src/utils/sendGoogleAnalyticsEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGhC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,SAAiB,EACjB,WAAoC,EACpC,EAAE;IACF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;YAC1E,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,CAAC,CAAC,CAAA;YACvE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,kBAAiD,EACjD,EAAE;IACF,IAAI,CAAC,kBAAkB;QAAE,OAAM;IAC/B,OAAO,kBAAkB,IAAI,OAAO,IAAI,kBAAkB;QACxD,CAAC,CAAC,kBAAkB,CAAC,KAAK;QAC1B,CAAC,CAAC,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,MAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,EAAE,CAAA,CAAA;AACxD,CAAC,CAAA","sourcesContent":["import { Sentry } from '../apps'\nimport { FormTypes } from '@oneblink/types'\n\nexport const sendGoogleAnalyticsEvent = (\n eventName: string,\n eventParams: Record<string, unknown>,\n) => {\n if (typeof window.gtag === 'function') {\n try {\n console.log('pushing event to google analytics: ', eventName, eventParams)\n window.gtag('event', eventName, eventParams)\n } catch (e) {\n console.warn('An error occured pushing event to google analytics: ', e)\n Sentry.captureException(e)\n }\n }\n}\n\nexport const getElementDisplayNameForAnalyticsEvent = (\n lastElementUpdated?: FormTypes.FormElement | null,\n) => {\n if (!lastElementUpdated) return\n return lastElementUpdated && 'label' in lastElementUpdated\n ? lastElementUpdated.label\n : lastElementUpdated?.name || lastElementUpdated?.id\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneblink/apps-react",
3
3
  "description": "Helper functions for OneBlink apps in ReactJS.",
4
- "version": "9.0.0-beta.3",
4
+ "version": "9.0.0-beta.4",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"