@oneblink/apps-react 6.9.0-beta.1 → 6.9.0-beta.11

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 (156) hide show
  1. package/dist/OneBlinkAutoSaveForm.js.map +1 -1
  2. package/dist/OneBlinkForm.d.ts +25 -35
  3. package/dist/OneBlinkFormBase.d.ts +6 -1
  4. package/dist/OneBlinkFormBase.js +8 -12
  5. package/dist/OneBlinkFormBase.js.map +1 -1
  6. package/dist/OneBlinkReadOnlyForm.js +0 -1
  7. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  8. package/dist/PaymentReceipt.js.map +1 -1
  9. package/dist/components/ArcGISWebMap.js.map +1 -1
  10. package/dist/components/CustomAccordion.d.ts +12 -13
  11. package/dist/components/ErrorSnackbar.js.map +1 -1
  12. package/dist/components/MaterialIcon.d.ts +4 -2
  13. package/dist/components/MaterialIcon.js +3 -3
  14. package/dist/components/MaterialIcon.js.map +1 -1
  15. package/dist/components/ValidationErrorsCard.d.ts +11 -0
  16. package/dist/components/ValidationErrorsCard.js +185 -0
  17. package/dist/components/ValidationErrorsCard.js.map +1 -0
  18. package/dist/components/ValidationErrorsCard_framer.d.ts +10 -0
  19. package/dist/components/ValidationErrorsCard_framer.js +218 -0
  20. package/dist/components/ValidationErrorsCard_framer.js.map +1 -0
  21. package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
  22. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
  23. package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
  24. package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
  25. package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
  26. package/dist/components/formStore/table/ActionedByTableCell.js.map +1 -1
  27. package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
  28. package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
  29. package/dist/components/formStore/table/TableCellCopyButton.js.map +1 -1
  30. package/dist/components/formStore/table/generateColumns.d.ts +3 -10
  31. package/dist/components/formStore/table/generateColumns.js.map +1 -1
  32. package/dist/components/formStore/table/useFormStoreTable.d.ts +4 -4
  33. package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
  34. package/dist/components/formStore/useFormStoreTableContext.d.ts +4 -4
  35. package/dist/components/formStore/useFormStoreTableContext.js.map +1 -1
  36. package/dist/components/payments/PaymentForm.js.map +1 -1
  37. package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
  38. package/dist/components/renderer/AnnotationModal.js.map +1 -1
  39. package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
  40. package/dist/components/renderer/FormElementOptions.js.map +1 -1
  41. package/dist/components/renderer/LookupButton.js.map +1 -1
  42. package/dist/components/renderer/LookupNotification.js.map +1 -1
  43. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
  44. package/dist/components/renderer/OneBlinkFormElements.js +3 -1
  45. package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
  46. package/dist/components/renderer/PageFormElements.js.map +1 -1
  47. package/dist/components/renderer/ReverseGeocode.js.map +1 -1
  48. package/dist/components/renderer/ToggleAllCheckbox.js.map +1 -1
  49. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +5 -5
  50. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  51. package/dist/components/renderer/attachments/DropdownMenu.js +6 -3
  52. package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
  53. package/dist/components/renderer/attachments/FileCard.js +1 -1
  54. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  55. package/dist/components/renderer/attachments/FileCardContent.d.ts +2 -2
  56. package/dist/components/renderer/attachments/FileCardContent.js.map +1 -1
  57. package/dist/form-elements/FormElementABN.js.map +1 -1
  58. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  59. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  60. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  61. package/dist/form-elements/FormElementBSB.js.map +1 -1
  62. package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
  63. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  64. package/dist/form-elements/FormElementCamera.js.map +1 -1
  65. package/dist/form-elements/FormElementCaptcha.js.map +1 -1
  66. package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
  67. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  68. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  69. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  70. package/dist/form-elements/FormElementDate.js.map +1 -1
  71. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  72. package/dist/form-elements/FormElementFile.js.map +1 -1
  73. package/dist/form-elements/FormElementFiles.js.map +1 -1
  74. package/dist/form-elements/FormElementForm.js +3 -1
  75. package/dist/form-elements/FormElementForm.js.map +1 -1
  76. package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
  77. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  78. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  79. package/dist/form-elements/FormElementHeading.js.map +1 -1
  80. package/dist/form-elements/FormElementLocation.js.map +1 -1
  81. package/dist/form-elements/FormElementNumber.js.map +1 -1
  82. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  83. package/dist/form-elements/FormElementRadio.js.map +1 -1
  84. package/dist/form-elements/FormElementRepeatableSet.js +3 -1
  85. package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
  86. package/dist/form-elements/FormElementSection.js.map +1 -1
  87. package/dist/form-elements/FormElementSelect.js.map +1 -1
  88. package/dist/form-elements/FormElementSignature.js.map +1 -1
  89. package/dist/form-elements/FormElementSummary.js.map +1 -1
  90. package/dist/form-elements/FormElementTime.js.map +1 -1
  91. package/dist/hooks/attachments/useAttachment.d.ts +3 -3
  92. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  93. package/dist/hooks/attachments/useAttachments.d.ts +1 -1
  94. package/dist/hooks/attachments/useAttachments.js.map +1 -1
  95. package/dist/hooks/useCaptcha.d.ts +0 -1
  96. package/dist/hooks/useClickOutsideElement.js.map +1 -1
  97. package/dist/hooks/useConditionalLogic.js.map +1 -1
  98. package/dist/hooks/useDrafts.js.map +1 -1
  99. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  100. package/dist/hooks/useFlatpickr.js.map +1 -1
  101. package/dist/hooks/useFormDefinition.js.map +1 -1
  102. package/dist/hooks/useFormElementLookups.js.map +1 -1
  103. package/dist/hooks/useFormElementOptions.js.map +1 -1
  104. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -3
  105. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  106. package/dist/hooks/useFormSubmissionModelContext.js.map +1 -1
  107. package/dist/hooks/useFormSubmissionState.d.ts +2 -2
  108. package/dist/hooks/useFormValidation.d.ts +1 -1
  109. package/dist/hooks/useFormValidation.js.map +1 -1
  110. package/dist/hooks/useInfiniteScrollDataLoad.js.map +1 -1
  111. package/dist/hooks/useIsOffline.d.ts +1 -1
  112. package/dist/hooks/useLoadDataState.js.map +1 -1
  113. package/dist/hooks/useLogin.js.map +1 -1
  114. package/dist/hooks/useLookupNotification.js.map +1 -1
  115. package/dist/hooks/useLookups.d.ts +1 -1
  116. package/dist/hooks/useLookups.js.map +1 -1
  117. package/dist/hooks/useOneBlinkFormContainer.d.ts +0 -1
  118. package/dist/hooks/usePages.js.map +1 -1
  119. package/dist/hooks/usePendingSubmissions.js.map +1 -1
  120. package/dist/hooks/useReCAPTCHAProps.js.map +1 -1
  121. package/dist/hooks/useSignUp.js.map +1 -1
  122. package/dist/hooks/useSubmissionIdIsValid.js.map +1 -1
  123. package/dist/hooks/useToggleComplianceChildren.js.map +1 -1
  124. package/dist/hooks/useValidationClass.js.map +1 -1
  125. package/dist/services/attachments.js.map +1 -1
  126. package/dist/services/blob-utils.js.map +1 -1
  127. package/dist/services/checkBsbsAreInvalid.js.map +1 -1
  128. package/dist/services/checkIfAttachmentsExist.js.map +1 -1
  129. package/dist/services/checkIfBsbsAreValidating.js.map +1 -1
  130. package/dist/services/cleanFormSubmissionModel.js.map +1 -1
  131. package/dist/services/download-file.js.map +1 -1
  132. package/dist/services/drawTimestampOnCanvas.js.map +1 -1
  133. package/dist/services/form-validation.js.map +1 -1
  134. package/dist/services/generate-default-data.js.map +1 -1
  135. package/dist/services/generateCivicaNameRecordElements.js.map +1 -1
  136. package/dist/services/generateFreshdeskDependentFieldElements.js.map +1 -1
  137. package/dist/services/geolocation.js +1 -1
  138. package/dist/services/geolocation.js.map +1 -1
  139. package/dist/services/getDateRangeConfiguration.js.map +1 -1
  140. package/dist/services/getRepeatableSetEntriesConfiguration.js.map +1 -1
  141. package/dist/services/injectableOptions.js.map +1 -1
  142. package/dist/services/scrolling-service.js.map +1 -1
  143. package/dist/styles/ob-html.scss +3 -0
  144. package/dist/styles/section.scss +4 -0
  145. package/dist/styles/validation-errors-card.scss +180 -0
  146. package/dist/styles.css +179 -0
  147. package/dist/styles.scss +1 -0
  148. package/dist/types/form.d.ts +0 -1
  149. package/dist/utils/elementDOMIds.d.ts +13 -0
  150. package/dist/utils/elementDOMIds.js +24 -0
  151. package/dist/utils/elementDOMIds.js.map +1 -0
  152. package/dist/utils/merge-executed-lookups.js.map +1 -1
  153. package/dist/utils/scrollToElement.d.ts +6 -0
  154. package/dist/utils/scrollToElement.js +65 -0
  155. package/dist/utils/scrollToElement.js.map +1 -0
  156. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"generateFreshdeskDependentFieldElements.js","sourceRoot":"","sources":["../../src/services/generateFreshdeskDependentFieldElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA;AAGjC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;IAC/B,EAAE,EAAE,IAAI,EAAE;IACV,IAAI,EAAE,QAAiB;IACvB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,iBAA0B;IACvC,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,QAAQ,EAAE,KAAK;IACf,sCAAsC,EAAE,KAAK;CAC9C,CAAC,CAAA;AAEF,MAAM,UAAU,gBAAgB,CAC9B,aAA0D,EAC1D,WAA+B;IAE/B,MAAM,oBAAoB,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAC9C,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,KAAK,WAAW,CACrD,CAAA;IACD,IAAI,aAAa,EAAE;QACjB,IAAI,oBAAoB,EAAE;YACxB,OAAO,oBAAoB,CAAC,OAA0C,CAAA;SACvE;aAAM;YACL,OAAO,aAAa,CAAC,MAAM,CACzB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;gBAChB,GAAG,IAAI;gBACP,GAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAqC;aAC/D,EACD,EAAE,CACH,CAAA;SACF;KACF;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,uCAAuC,CAC7D,OAAiD;;IAEjD,MAAM,eAAe,GAA4B;QAC/C,GAAG,iBAAiB,EAAE;QACtB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,QAAQ;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,WAAW,EAAE,iBAAiB;KAC/B,CAAA;IACD,MAAM,YAAY,GAAG,CAAC,eAAe,CAAC,CAAA;IAEtC,MAAM,kBAAkB,GAA4B;QAClD,GAAG,iBAAiB,EAAE;QACtB,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,gBAAgB;QAC/B,IAAI,EAAE,OAAO,CAAC,eAAe;QAC7B,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,WAAW;QAC/C,OAAO,EAAE,EAAE;KACZ,CAAA;IACD,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAErC,MAAM,WAAW,GAA4B;QAC3C,GAAG,iBAAiB,EAAE;QACtB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,SAAS;QACxB,IAAI,EAAE,OAAO,CAAC,QAAQ;QACtB,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,IAAI;QACxC,OAAO,EAAE,EAAE;KACZ,CAAA;IACD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAE9B,OAAO,YAAY,CAAA;AACrB,CAAC","sourcesContent":["import { v4 as uuid } from 'uuid'\nimport { FormTypes } from '@oneblink/types'\n\nconst createFormElement = () => ({\n id: uuid(),\n type: 'select' as const,\n multi: false,\n optionsType: 'FRESHDESK_FIELD' as const,\n conditionallyShow: false,\n isDataLookup: false,\n isElementLookup: false,\n required: false,\n requiresAllConditionallyShowPredicates: false,\n})\n\nexport function getNestedOptions(\n parentOptions: FormTypes.ChoiceElementOption[] | undefined,\n parentValue: string | undefined,\n): FormTypes.ChoiceElementOption[] | undefined {\n const selectedParentOption = parentOptions?.find(\n (parentOption) => parentOption.value === parentValue,\n )\n if (parentOptions) {\n if (selectedParentOption) {\n return selectedParentOption.options as FormTypes.ChoiceElementOption[]\n } else {\n return parentOptions.reduce<FormTypes.ChoiceElementOption[]>(\n (memo, option) => [\n ...memo,\n ...((option.options || []) as FormTypes.ChoiceElementOption[]),\n ],\n [],\n )\n }\n }\n return undefined\n}\n\nexport default function generateFreshdeskDependentFieldElements(\n element: FormTypes.FreshdeskDependentFieldElement,\n): FormTypes.SelectElement[] {\n const categoryElement: FormTypes.SelectElement = {\n ...createFormElement(),\n name: 'category',\n required: element.required,\n readOnly: element.readOnly,\n label: element.label,\n hint: element.hint,\n defaultValue: element.defaultValue?.category,\n options: element.options,\n freshdeskFieldName: element.freshdeskFieldName,\n optionsType: 'FRESHDESK_FIELD',\n }\n const formElements = [categoryElement]\n\n const subCategoryElement: FormTypes.SelectElement = {\n ...createFormElement(),\n name: 'subCategory',\n required: element.required,\n readOnly: element.readOnly,\n label: element.subCategoryLabel,\n hint: element.subCategoryHint,\n defaultValue: element.defaultValue?.subCategory,\n options: [],\n }\n formElements.push(subCategoryElement)\n\n const itemElement: FormTypes.SelectElement = {\n ...createFormElement(),\n name: 'item',\n required: element.required,\n readOnly: element.readOnly,\n label: element.itemLabel,\n hint: element.itemHint,\n defaultValue: element.defaultValue?.item,\n options: [],\n }\n formElements.push(itemElement)\n\n return formElements\n}\n"]}
1
+ {"version":3,"file":"generateFreshdeskDependentFieldElements.js","sourceRoot":"","sources":["../../src/services/generateFreshdeskDependentFieldElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA;AAGjC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;IAC/B,EAAE,EAAE,IAAI,EAAE;IACV,IAAI,EAAE,QAAiB;IACvB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,iBAA0B;IACvC,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,QAAQ,EAAE,KAAK;IACf,sCAAsC,EAAE,KAAK;CAC9C,CAAC,CAAA;AAEF,MAAM,UAAU,gBAAgB,CAC9B,aAA0D,EAC1D,WAA+B;IAE/B,MAAM,oBAAoB,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAC9C,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,KAAK,WAAW,CACrD,CAAA;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,oBAAoB,CAAC,OAA0C,CAAA;QACxE,CAAC;aAAM,CAAC;YACN,OAAO,aAAa,CAAC,MAAM,CACzB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;gBAChB,GAAG,IAAI;gBACP,GAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAqC;aAC/D,EACD,EAAE,CACH,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,uCAAuC,CAC7D,OAAiD;;IAEjD,MAAM,eAAe,GAA4B;QAC/C,GAAG,iBAAiB,EAAE;QACtB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,QAAQ;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,WAAW,EAAE,iBAAiB;KAC/B,CAAA;IACD,MAAM,YAAY,GAAG,CAAC,eAAe,CAAC,CAAA;IAEtC,MAAM,kBAAkB,GAA4B;QAClD,GAAG,iBAAiB,EAAE;QACtB,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,gBAAgB;QAC/B,IAAI,EAAE,OAAO,CAAC,eAAe;QAC7B,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,WAAW;QAC/C,OAAO,EAAE,EAAE;KACZ,CAAA;IACD,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAErC,MAAM,WAAW,GAA4B;QAC3C,GAAG,iBAAiB,EAAE;QACtB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,SAAS;QACxB,IAAI,EAAE,OAAO,CAAC,QAAQ;QACtB,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,IAAI;QACxC,OAAO,EAAE,EAAE;KACZ,CAAA;IACD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAE9B,OAAO,YAAY,CAAA;AACrB,CAAC","sourcesContent":["import { v4 as uuid } from 'uuid'\nimport { FormTypes } from '@oneblink/types'\n\nconst createFormElement = () => ({\n id: uuid(),\n type: 'select' as const,\n multi: false,\n optionsType: 'FRESHDESK_FIELD' as const,\n conditionallyShow: false,\n isDataLookup: false,\n isElementLookup: false,\n required: false,\n requiresAllConditionallyShowPredicates: false,\n})\n\nexport function getNestedOptions(\n parentOptions: FormTypes.ChoiceElementOption[] | undefined,\n parentValue: string | undefined,\n): FormTypes.ChoiceElementOption[] | undefined {\n const selectedParentOption = parentOptions?.find(\n (parentOption) => parentOption.value === parentValue,\n )\n if (parentOptions) {\n if (selectedParentOption) {\n return selectedParentOption.options as FormTypes.ChoiceElementOption[]\n } else {\n return parentOptions.reduce<FormTypes.ChoiceElementOption[]>(\n (memo, option) => [\n ...memo,\n ...((option.options || []) as FormTypes.ChoiceElementOption[]),\n ],\n [],\n )\n }\n }\n return undefined\n}\n\nexport default function generateFreshdeskDependentFieldElements(\n element: FormTypes.FreshdeskDependentFieldElement,\n): FormTypes.SelectElement[] {\n const categoryElement: FormTypes.SelectElement = {\n ...createFormElement(),\n name: 'category',\n required: element.required,\n readOnly: element.readOnly,\n label: element.label,\n hint: element.hint,\n defaultValue: element.defaultValue?.category,\n options: element.options,\n freshdeskFieldName: element.freshdeskFieldName,\n optionsType: 'FRESHDESK_FIELD',\n }\n const formElements = [categoryElement]\n\n const subCategoryElement: FormTypes.SelectElement = {\n ...createFormElement(),\n name: 'subCategory',\n required: element.required,\n readOnly: element.readOnly,\n label: element.subCategoryLabel,\n hint: element.subCategoryHint,\n defaultValue: element.defaultValue?.subCategory,\n options: [],\n }\n formElements.push(subCategoryElement)\n\n const itemElement: FormTypes.SelectElement = {\n ...createFormElement(),\n name: 'item',\n required: element.required,\n readOnly: element.readOnly,\n label: element.itemLabel,\n hint: element.itemHint,\n defaultValue: element.defaultValue?.item,\n options: [],\n }\n formElements.push(itemElement)\n\n return formElements\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  const DEFAULT_POSITION_OPTIONS = {
2
2
  enableHighAccuracy: true,
3
- maximumAge: 0,
3
+ maximumAge: 0, // fresh results each time
4
4
  timeout: 10 * 1000, // take no longer than 10 seconds
5
5
  };
6
6
  function clonePosition(position) {
@@ -1 +1 @@
1
- {"version":3,"file":"geolocation.js","sourceRoot":"","sources":["../../src/services/geolocation.ts"],"names":[],"mappings":"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","sourcesContent":["type PositionLike = Omit<Partial<GeolocationPosition>, 'coords'> & {\n coords: Partial<GeolocationCoordinates>\n}\n\ntype PositionOptionsLike = Partial<PositionOptions>\n\ntype GeolocationDriver = {\n getCurrentPosition: (\n success: (position: PositionLike) => void,\n error: (error: GeolocationPositionError | Error) => void,\n options: PositionOptions,\n ) => void\n isAvailable: () => boolean\n}\n\nconst DEFAULT_POSITION_OPTIONS: PositionOptions = {\n enableHighAccuracy: true,\n maximumAge: 0, // fresh results each time\n timeout: 10 * 1000, // take no longer than 10 seconds\n}\n\nfunction clonePosition(position: PositionLike): PositionLike {\n position = position || {}\n const coords = position.coords || {}\n if (typeof position !== 'object' || typeof coords !== 'object') {\n throw new TypeError('cannot clone non-Position object')\n }\n return {\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n altitude: coords.altitude,\n accuracy: coords.accuracy,\n altitudeAccuracy: coords.altitudeAccuracy,\n heading: coords.heading,\n speed: coords.speed,\n },\n timestamp: position.timestamp || Date.now(),\n }\n}\n\nfunction mergePositionOptions(options?: PositionOptionsLike): PositionOptions {\n options = options || {}\n if (typeof options !== 'object') {\n return DEFAULT_POSITION_OPTIONS\n }\n\n return {\n enableHighAccuracy:\n typeof options.enableHighAccuracy === 'boolean'\n ? options.enableHighAccuracy\n : DEFAULT_POSITION_OPTIONS.enableHighAccuracy,\n\n maximumAge:\n typeof options.maximumAge === 'number' && !isNaN(options.maximumAge)\n ? options.maximumAge\n : DEFAULT_POSITION_OPTIONS.maximumAge,\n\n timeout:\n typeof options.timeout === 'number' && !isNaN(options.timeout)\n ? options.timeout\n : DEFAULT_POSITION_OPTIONS.timeout,\n }\n}\n\nconst DRIVERS_PREFERENCE = ['W3C']\n\nconst DRIVERS: { [id: string]: GeolocationDriver } = {\n W3C: {\n isAvailable: function (): boolean {\n return !!(\n typeof navigator !== 'undefined' &&\n navigator.geolocation &&\n typeof navigator.geolocation.getCurrentPosition === 'function'\n )\n },\n\n getCurrentPosition: function (\n onSuccess: (position: PositionLike) => void,\n onError: (error: GeolocationPositionError) => void,\n options: PositionOptions,\n ): void {\n navigator.geolocation.getCurrentPosition(\n function (position) {\n onSuccess(clonePosition(position))\n },\n onError,\n options,\n )\n },\n },\n}\n\nfunction detectDriver(): GeolocationDriver | false {\n const availableDriver = DRIVERS_PREFERENCE.map(function (name) {\n return DRIVERS[name]\n }).find(function (driver) {\n return driver.isAvailable()\n })\n return availableDriver || false\n}\n\nexport function getCurrentPosition(\n options?: PositionOptionsLike,\n): Promise<PositionLike> {\n return new Promise(function (resolve, reject) {\n const driver = detectDriver()\n if (!driver) {\n return reject(new Error('GeoLocation not supported'))\n }\n driver.getCurrentPosition(\n function (position) {\n resolve(position)\n },\n function (err) {\n reject(err)\n },\n mergePositionOptions(options),\n )\n })\n}\n"]}
1
+ {"version":3,"file":"geolocation.js","sourceRoot":"","sources":["../../src/services/geolocation.ts"],"names":[],"mappings":"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","sourcesContent":["type PositionLike = Omit<Partial<GeolocationPosition>, 'coords'> & {\n coords: Partial<GeolocationCoordinates>\n}\n\ntype PositionOptionsLike = Partial<PositionOptions>\n\ntype GeolocationDriver = {\n getCurrentPosition: (\n success: (position: PositionLike) => void,\n error: (error: GeolocationPositionError | Error) => void,\n options: PositionOptions,\n ) => void\n isAvailable: () => boolean\n}\n\nconst DEFAULT_POSITION_OPTIONS: PositionOptions = {\n enableHighAccuracy: true,\n maximumAge: 0, // fresh results each time\n timeout: 10 * 1000, // take no longer than 10 seconds\n}\n\nfunction clonePosition(position: PositionLike): PositionLike {\n position = position || {}\n const coords = position.coords || {}\n if (typeof position !== 'object' || typeof coords !== 'object') {\n throw new TypeError('cannot clone non-Position object')\n }\n return {\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n altitude: coords.altitude,\n accuracy: coords.accuracy,\n altitudeAccuracy: coords.altitudeAccuracy,\n heading: coords.heading,\n speed: coords.speed,\n },\n timestamp: position.timestamp || Date.now(),\n }\n}\n\nfunction mergePositionOptions(options?: PositionOptionsLike): PositionOptions {\n options = options || {}\n if (typeof options !== 'object') {\n return DEFAULT_POSITION_OPTIONS\n }\n\n return {\n enableHighAccuracy:\n typeof options.enableHighAccuracy === 'boolean'\n ? options.enableHighAccuracy\n : DEFAULT_POSITION_OPTIONS.enableHighAccuracy,\n\n maximumAge:\n typeof options.maximumAge === 'number' && !isNaN(options.maximumAge)\n ? options.maximumAge\n : DEFAULT_POSITION_OPTIONS.maximumAge,\n\n timeout:\n typeof options.timeout === 'number' && !isNaN(options.timeout)\n ? options.timeout\n : DEFAULT_POSITION_OPTIONS.timeout,\n }\n}\n\nconst DRIVERS_PREFERENCE = ['W3C']\n\nconst DRIVERS: { [id: string]: GeolocationDriver } = {\n W3C: {\n isAvailable: function (): boolean {\n return !!(\n typeof navigator !== 'undefined' &&\n navigator.geolocation &&\n typeof navigator.geolocation.getCurrentPosition === 'function'\n )\n },\n\n getCurrentPosition: function (\n onSuccess: (position: PositionLike) => void,\n onError: (error: GeolocationPositionError) => void,\n options: PositionOptions,\n ): void {\n navigator.geolocation.getCurrentPosition(\n function (position) {\n onSuccess(clonePosition(position))\n },\n onError,\n options,\n )\n },\n },\n}\n\nfunction detectDriver(): GeolocationDriver | false {\n const availableDriver = DRIVERS_PREFERENCE.map(function (name) {\n return DRIVERS[name]\n }).find(function (driver) {\n return driver.isAvailable()\n })\n return availableDriver || false\n}\n\nexport function getCurrentPosition(\n options?: PositionOptionsLike,\n): Promise<PositionLike> {\n return new Promise(function (resolve, reject) {\n const driver = detectDriver()\n if (!driver) {\n return reject(new Error('GeoLocation not supported'))\n }\n driver.getCurrentPosition(\n function (position) {\n resolve(position)\n },\n function (err) {\n reject(err)\n },\n mergePositionOptions(options),\n )\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getDateRangeConfiguration.js","sourceRoot":"","sources":["../../src/services/getDateRangeConfiguration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAStD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,EAAE,sBAAsB,EAAE,IAAI,EAAE,UAAU,EAAiC,EAC3E,QAAiC,EACjC,mBAAmE;IAEnE,IAAI,sBAAsB,EAAE;QAC1B,MAAM,aAAa,GAAG,iBAAiB,CAAC,uBAAuB,CAC7D,sBAAsB,EACtB,QAAQ,EACR,mBAAmB,CACpB,CAAA;QACD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YACrC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;SACnC;KACF;IACD,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import { submissionService } from '@oneblink/sdk-core'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\n\nexport type DateRangeConfigurationOptions = {\n referenceFormElementId: string | undefined\n date: string | undefined\n daysOffset: number | undefined\n}\n\nexport default function getDateRangeConfiguration(\n { referenceFormElementId, date, daysOffset }: DateRangeConfigurationOptions,\n elements: FormTypes.FormElement[],\n formSubmissionModel: SubmissionTypes.S3SubmissionData['submission'],\n): [string | undefined, number | undefined] {\n if (referenceFormElementId) {\n const referenceDate = submissionService.getRootElementValueById(\n referenceFormElementId,\n elements,\n formSubmissionModel,\n )\n if (typeof referenceDate === 'string') {\n return [referenceDate, daysOffset]\n }\n }\n return [date, date === 'NOW' ? daysOffset : undefined]\n}\n"]}
1
+ {"version":3,"file":"getDateRangeConfiguration.js","sourceRoot":"","sources":["../../src/services/getDateRangeConfiguration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAStD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,EAAE,sBAAsB,EAAE,IAAI,EAAE,UAAU,EAAiC,EAC3E,QAAiC,EACjC,mBAAmE;IAEnE,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,iBAAiB,CAAC,uBAAuB,CAC7D,sBAAsB,EACtB,QAAQ,EACR,mBAAmB,CACpB,CAAA;QACD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import { submissionService } from '@oneblink/sdk-core'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\n\nexport type DateRangeConfigurationOptions = {\n referenceFormElementId: string | undefined\n date: string | undefined\n daysOffset: number | undefined\n}\n\nexport default function getDateRangeConfiguration(\n { referenceFormElementId, date, daysOffset }: DateRangeConfigurationOptions,\n elements: FormTypes.FormElement[],\n formSubmissionModel: SubmissionTypes.S3SubmissionData['submission'],\n): [string | undefined, number | undefined] {\n if (referenceFormElementId) {\n const referenceDate = submissionService.getRootElementValueById(\n referenceFormElementId,\n elements,\n formSubmissionModel,\n )\n if (typeof referenceDate === 'string') {\n return [referenceDate, daysOffset]\n }\n }\n return [date, date === 'NOW' ? daysOffset : undefined]\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getRepeatableSetEntriesConfiguration.js","sourceRoot":"","sources":["../../src/services/getRepeatableSetEntriesConfiguration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAC1D,UAAiD,EACjD,QAAiC,EACjC,mBAAmE;IAEnE,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,uBAAuB,CACrD,UAAU,CAAC,SAAS,EACpB,QAAQ,EACR,mBAAmB,CACpB,CAAA;QACD,IAAI,KAAK,EAAE;YACT,OAAO,KAAe,CAAA;SACvB;KACF;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAClC,OAAO,UAAU,CAAA;KAClB;IACD,OAAO,SAAS,CAAA;AAClB,CAAC","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { RepeatableSetElement } from '@oneblink/types/typescript/forms'\nimport { submissionService } from '@oneblink/sdk-core'\n\nexport default function getRepeatableSetEntriesConfiguration(\n setEntries: RepeatableSetElement['minSetEntries'],\n elements: FormTypes.FormElement[],\n formSubmissionModel: SubmissionTypes.S3SubmissionData['submission'],\n) {\n if (setEntries && typeof setEntries === 'object') {\n const value = submissionService.getRootElementValueById(\n setEntries.elementId,\n elements,\n formSubmissionModel,\n )\n if (value) {\n return value as number\n }\n }\n if (typeof setEntries === 'number') {\n return setEntries\n }\n return undefined\n}\n"]}
1
+ {"version":3,"file":"getRepeatableSetEntriesConfiguration.js","sourceRoot":"","sources":["../../src/services/getRepeatableSetEntriesConfiguration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAC1D,UAAiD,EACjD,QAAiC,EACjC,mBAAmE;IAEnE,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,uBAAuB,CACrD,UAAU,CAAC,SAAS,EACpB,QAAQ,EACR,mBAAmB,CACpB,CAAA;QACD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAe,CAAA;QACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { RepeatableSetElement } from '@oneblink/types/typescript/forms'\nimport { submissionService } from '@oneblink/sdk-core'\n\nexport default function getRepeatableSetEntriesConfiguration(\n setEntries: RepeatableSetElement['minSetEntries'],\n elements: FormTypes.FormElement[],\n formSubmissionModel: SubmissionTypes.S3SubmissionData['submission'],\n) {\n if (setEntries && typeof setEntries === 'object') {\n const value = submissionService.getRootElementValueById(\n setEntries.elementId,\n elements,\n formSubmissionModel,\n )\n if (value) {\n return value as number\n }\n }\n if (typeof setEntries === 'number') {\n return setEntries\n }\n return undefined\n}\n"]}
@@ -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'\n\ntype Option = Pick<FormTypes.ChoiceElementOption, 'value' | 'label'>\n\nfunction processInjectableDynamicOption({\n option: resource,\n submission: rootSubmission,\n formElements: rootFormElements,\n ...params\n}: {\n option: Option\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): Map<string, Option> {\n return submissionService.processInjectablesInCustomResource<Option>({\n resource,\n submission: rootSubmission,\n formElements: rootFormElements,\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 taskContext,\n userProfile,\n}: {\n option: FormTypes.ChoiceElementOption\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\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 })\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\n return generatedOptions\n}\n\nfunction injectOptionsAcrossEntriesElements({\n contextElements,\n elements,\n entries,\n taskContext,\n userProfile,\n}: {\n contextElements: FormTypes.FormElement[]\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 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 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: e.elements,\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 formElements: 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 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 '@oneblink/apps'\nimport { v4 as uuidv4 } from 'uuid'\nimport { MiscTypes } from '@oneblink/types'\nimport { TaskContext } from '../hooks/useTaskContext'\n\ntype Option = Pick<FormTypes.ChoiceElementOption, 'value' | 'label'>\n\nfunction processInjectableDynamicOption({\n option: resource,\n submission: rootSubmission,\n formElements: rootFormElements,\n ...params\n}: {\n option: Option\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): Map<string, Option> {\n return submissionService.processInjectablesInCustomResource<Option>({\n resource,\n submission: rootSubmission,\n formElements: rootFormElements,\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 taskContext,\n userProfile,\n}: {\n option: FormTypes.ChoiceElementOption\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\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 })\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\n return generatedOptions\n}\n\nfunction injectOptionsAcrossEntriesElements({\n contextElements,\n elements,\n entries,\n taskContext,\n userProfile,\n}: {\n contextElements: FormTypes.FormElement[]\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 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 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: e.elements,\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 formElements: 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 entries: [submission],\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scrolling-service.js","sourceRoot":"","sources":["../../src/services/scrolling-service.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,iBAAiB,CAAA;AACvC,IAAI,UAAU,GAAG,KAAK,CAAA;AAEtB,8DAA8D;AAC9D,SAAS,yBAAyB,CAAC,OAAY,EAAE,SAAiB;IAChE,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE;QACpC,OAAO,KAAK,CAAA;KACb;IAED,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QAC7C,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,CAAa;IACnC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACjD,CAAC,CAAC,cAAc,EAAE,CAAA;KACnB;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,UAAU,EAAE;QACd,OAAM;KACP;IACD,UAAU,GAAG,IAAI,CAAA;IAEjB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACrD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,EAAE;QACf,OAAM;KACP;IACD,UAAU,GAAG,KAAK,CAAA;IAElB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IACxD,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;AACvE,CAAC;AAED,eAAe;IACb,gBAAgB;IAChB,eAAe;CAChB,CAAA","sourcesContent":["const overflowClass = 'overflow-hidden'\nlet isDisabled = false\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction elementOrAncestorHasClass(element: any, className: string): boolean {\n if (!element || element === document) {\n return false\n }\n\n if (element.className.indexOf(className) >= 0) {\n return true\n }\n\n return elementOrAncestorHasClass(element.parentNode, className)\n}\n\nfunction preventDefault(e: TouchEvent) {\n if (!elementOrAncestorHasClass(e.target, 'modal')) {\n e.preventDefault()\n }\n}\n\nfunction disableScrolling(): void {\n if (isDisabled) {\n return\n }\n isDisabled = true\n\n // @ts-expect-error ???\n document.body.parentNode.classList.add(overflowClass)\n document.body.addEventListener('touchmove', preventDefault, false)\n}\n\nfunction enableScrolling(): void {\n if (!isDisabled) {\n return\n }\n isDisabled = false\n\n // @ts-expect-error ???\n document.body.parentNode.classList.remove(overflowClass)\n document.body.removeEventListener('touchmove', preventDefault, false)\n}\n\nexport default {\n disableScrolling,\n enableScrolling,\n}\n"]}
1
+ {"version":3,"file":"scrolling-service.js","sourceRoot":"","sources":["../../src/services/scrolling-service.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,iBAAiB,CAAA;AACvC,IAAI,UAAU,GAAG,KAAK,CAAA;AAEtB,8DAA8D;AAC9D,SAAS,yBAAyB,CAAC,OAAY,EAAE,SAAiB;IAChE,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,CAAa;IACnC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAClD,CAAC,CAAC,cAAc,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,UAAU,EAAE,CAAC;QACf,OAAM;IACR,CAAC;IACD,UAAU,GAAG,IAAI,CAAA;IAEjB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACrD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAM;IACR,CAAC;IACD,UAAU,GAAG,KAAK,CAAA;IAElB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IACxD,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;AACvE,CAAC;AAED,eAAe;IACb,gBAAgB;IAChB,eAAe;CAChB,CAAA","sourcesContent":["const overflowClass = 'overflow-hidden'\nlet isDisabled = false\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction elementOrAncestorHasClass(element: any, className: string): boolean {\n if (!element || element === document) {\n return false\n }\n\n if (element.className.indexOf(className) >= 0) {\n return true\n }\n\n return elementOrAncestorHasClass(element.parentNode, className)\n}\n\nfunction preventDefault(e: TouchEvent) {\n if (!elementOrAncestorHasClass(e.target, 'modal')) {\n e.preventDefault()\n }\n}\n\nfunction disableScrolling(): void {\n if (isDisabled) {\n return\n }\n isDisabled = true\n\n // @ts-expect-error ???\n document.body.parentNode.classList.add(overflowClass)\n document.body.addEventListener('touchmove', preventDefault, false)\n}\n\nfunction enableScrolling(): void {\n if (!isDisabled) {\n return\n }\n isDisabled = false\n\n // @ts-expect-error ???\n document.body.parentNode.classList.remove(overflowClass)\n document.body.removeEventListener('touchmove', preventDefault, false)\n}\n\nexport default {\n disableScrolling,\n enableScrolling,\n}\n"]}
@@ -358,3 +358,6 @@
358
358
  position: absolute;
359
359
  right: 15px;
360
360
  }
361
+ .ql-editor strong {
362
+ color: inherit;
363
+ }
@@ -71,3 +71,7 @@
71
71
  bottom: 0px;
72
72
  transform: translate(-50%, 50%);
73
73
  }
74
+
75
+ .ob-section__collapsed {
76
+ display: none;
77
+ }
@@ -0,0 +1,180 @@
1
+ $validation-errors-border-radius: 8px;
2
+
3
+ .ob-validation-notification-wrapper {
4
+ position: fixed;
5
+ bottom: $size-6;
6
+ right: $size-6;
7
+ z-index: 30;
8
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
9
+ transition-duration: 300ms;
10
+ }
11
+
12
+ .ob-validation-color-transition {
13
+ transition-property: color;
14
+ transition-duration: inherit;
15
+ transition-timing-function: inherit;
16
+ }
17
+
18
+ .ob-validation-notification-card {
19
+ transition-property: transform, background-color;
20
+ transition-duration: inherit;
21
+ transition-timing-function: inherit;
22
+ border-radius: $validation-errors-border-radius;
23
+ max-height: 350px;
24
+ overflow-y: auto;
25
+ border-color: $danger;
26
+ border-width: 2px;
27
+ border-style: solid;
28
+ animation: pulse-animation 1.5s infinite;
29
+ @keyframes pulse-animation {
30
+ 0% {
31
+ box-shadow: 0 0 0 0px rgba(255, 0, 0, 0.4);
32
+ }
33
+ 100% {
34
+ box-shadow: 0 0 0 $size-6 rgba(255, 0, 0, 0);
35
+ }
36
+ }
37
+ }
38
+
39
+ // Card
40
+ .ob-validation-notification-card.is-expanded {
41
+ background-color: $white;
42
+ color: $black;
43
+ }
44
+
45
+ .ob-validation-notification-card.is-contracted {
46
+ background-color: $danger;
47
+ color: $white;
48
+ }
49
+
50
+ // Card Content
51
+ .ob-validation-notification-card-content {
52
+ transition-property: padding;
53
+ transition-duration: inherit;
54
+ transition-timing-function: inherit;
55
+ padding: $size-6;
56
+ padding-bottom: $size-4;
57
+ }
58
+ .is-contracted .ob-validation-notification-card-content {
59
+ padding-top: $size-8;
60
+ padding-bottom: $size-8;
61
+ }
62
+
63
+ // Card Content Header
64
+ .ob-validation-notification-card-header-wrapper {
65
+ display: flex;
66
+ width: 100%;
67
+ align-items: center;
68
+ justify-content: space-between;
69
+ }
70
+
71
+ .ob-validation-notification-card-header-title-wrapper {
72
+ display: flex;
73
+ align-items: center;
74
+ }
75
+
76
+ .ob-validation-notification-card-header-title-text {
77
+ font-weight: $weight-semibold;
78
+ }
79
+
80
+ .ob-validation-notification-card-header-title-icon {
81
+ margin-right: $size-8;
82
+ font-size: 22px;
83
+ }
84
+
85
+ // Card collapse
86
+ .ob-validation-notification-card-collapse-wrapper {
87
+ transition-property: width, opacity;
88
+ transition-duration: inherit;
89
+ transition-timing-function: inherit;
90
+ white-space: nowrap;
91
+ overflow-x: hidden;
92
+ }
93
+
94
+ .ob-validation-notification-wrapper .MuiCollapse-root {
95
+ transition-property: height;
96
+ transition-duration: inherit;
97
+ transition-timing-function: inherit;
98
+ }
99
+
100
+ .is-contracted .ob-validation-notification-card-collapse-wrapper {
101
+ // Allows for a perfectly smooth transition when the text size is unaltered by the browser.
102
+ width: 196px;
103
+ opacity: 0;
104
+ }
105
+ .is-expanded .ob-validation-notification-card-collapse-wrapper {
106
+ width: 300px;
107
+ opacity: 1;
108
+ }
109
+
110
+ // List
111
+ .ob-validation-notification-card-page-label {
112
+ font-weight: $weight-semibold;
113
+ font-size: 0.875rem;
114
+ }
115
+ .ob-validation-notification-card-page-label.is-not-first {
116
+ margin-top: $size-8;
117
+ }
118
+ .ob-validation-notification-card-list {
119
+ margin-top: $size-8;
120
+ border-radius: $validation-errors-border-radius;
121
+ }
122
+
123
+ // Items
124
+ .ob-validation-notification-card-item {
125
+ display: flex;
126
+ justify-content: space-between;
127
+ align-items: center;
128
+ padding: $size-8;
129
+ }
130
+ .ob-validation-notification-card-item.is-first {
131
+ border-top-left-radius: $validation-errors-border-radius;
132
+ border-top-right-radius: $validation-errors-border-radius;
133
+ }
134
+ .ob-validation-notification-card-item.is-last {
135
+ border-bottom-left-radius: $validation-errors-border-radius;
136
+ border-bottom-right-radius: $validation-errors-border-radius;
137
+ }
138
+
139
+ .ob-validation-notification-card-item-text {
140
+ white-space: nowrap;
141
+ overflow: hidden;
142
+ font-size: 0.875rem;
143
+ }
144
+
145
+ .ob-validation-notification-card-item-text-error-message {
146
+ overflow: hidden;
147
+ text-overflow: ellipsis;
148
+ }
149
+
150
+ .ob-validation-notification-card-item-icon {
151
+ margin-left: $size-8;
152
+ }
153
+
154
+ // Below desktop
155
+ @media only screen and (max-width: $desktop) {
156
+ .ob-bottom-navigation__content {
157
+ .ob-validation-notification-wrapper {
158
+ margin-bottom: 4rem;
159
+ }
160
+ }
161
+ }
162
+
163
+ // Mobile size
164
+ @media only screen and (max-width: $tablet) {
165
+ .ob-validation-notification-wrapper {
166
+ left: $size-6;
167
+ }
168
+
169
+ .is-contracted .ob-validation-notification-card-collapse-wrapper {
170
+ width: 100%;
171
+ }
172
+ .is-expanded .ob-validation-notification-card-collapse-wrapper {
173
+ width: 100%;
174
+ }
175
+ .section .ob-list.ob-validation-notification-card-list {
176
+ margin-right: unset;
177
+ margin-left: unset;
178
+ width: unset;
179
+ }
180
+ }
package/dist/styles.css CHANGED
@@ -8637,6 +8637,10 @@ button on-loading {
8637
8637
  right: 15px;
8638
8638
  }
8639
8639
 
8640
+ .ql-editor strong {
8641
+ color: inherit;
8642
+ }
8643
+
8640
8644
  .ob-buttons-radio {
8641
8645
  container-name: ob-buttons-radio;
8642
8646
  container-type: inline-size;
@@ -9544,6 +9548,10 @@ textarea:disabled {
9544
9548
  transform: translate(-50%, 50%);
9545
9549
  }
9546
9550
 
9551
+ .ob-section__collapsed {
9552
+ display: none;
9553
+ }
9554
+
9547
9555
  .ob-bsb__record-control {
9548
9556
  min-width: 0;
9549
9557
  }
@@ -9855,6 +9863,177 @@ textarea:disabled {
9855
9863
  }
9856
9864
  }
9857
9865
 
9866
+ .ob-validation-notification-wrapper {
9867
+ position: fixed;
9868
+ bottom: 1rem;
9869
+ right: 1rem;
9870
+ z-index: 30;
9871
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
9872
+ transition-duration: 300ms;
9873
+ }
9874
+
9875
+ .ob-validation-color-transition {
9876
+ transition-property: color;
9877
+ transition-duration: inherit;
9878
+ transition-timing-function: inherit;
9879
+ }
9880
+
9881
+ .ob-validation-notification-card {
9882
+ transition-property: transform, background-color;
9883
+ transition-duration: inherit;
9884
+ transition-timing-function: inherit;
9885
+ border-radius: 8px;
9886
+ max-height: 350px;
9887
+ overflow-y: auto;
9888
+ border-color: #e8113c;
9889
+ border-width: 2px;
9890
+ border-style: solid;
9891
+ animation: pulse-animation 1.5s infinite;
9892
+ }
9893
+ @keyframes pulse-animation {
9894
+ 0% {
9895
+ box-shadow: 0 0 0 0px rgba(255, 0, 0, 0.4);
9896
+ }
9897
+ 100% {
9898
+ box-shadow: 0 0 0 1rem rgba(255, 0, 0, 0);
9899
+ }
9900
+ }
9901
+
9902
+ .ob-validation-notification-card.is-expanded {
9903
+ background-color: hsl(0, 0%, 100%);
9904
+ color: hsl(0, 0%, 4%);
9905
+ }
9906
+
9907
+ .ob-validation-notification-card.is-contracted {
9908
+ background-color: #e8113c;
9909
+ color: hsl(0, 0%, 100%);
9910
+ }
9911
+
9912
+ .ob-validation-notification-card-content {
9913
+ transition-property: padding;
9914
+ transition-duration: inherit;
9915
+ transition-timing-function: inherit;
9916
+ padding: 1rem;
9917
+ padding-bottom: 1.5rem;
9918
+ }
9919
+
9920
+ .is-contracted .ob-validation-notification-card-content {
9921
+ padding-top: 0.5rem;
9922
+ padding-bottom: 0.5rem;
9923
+ }
9924
+
9925
+ .ob-validation-notification-card-header-wrapper {
9926
+ display: flex;
9927
+ width: 100%;
9928
+ align-items: center;
9929
+ justify-content: space-between;
9930
+ }
9931
+
9932
+ .ob-validation-notification-card-header-title-wrapper {
9933
+ display: flex;
9934
+ align-items: center;
9935
+ }
9936
+
9937
+ .ob-validation-notification-card-header-title-text {
9938
+ font-weight: 600;
9939
+ }
9940
+
9941
+ .ob-validation-notification-card-header-title-icon {
9942
+ margin-right: 0.5rem;
9943
+ font-size: 22px;
9944
+ }
9945
+
9946
+ .ob-validation-notification-card-collapse-wrapper {
9947
+ transition-property: width, opacity;
9948
+ transition-duration: inherit;
9949
+ transition-timing-function: inherit;
9950
+ white-space: nowrap;
9951
+ overflow-x: hidden;
9952
+ }
9953
+
9954
+ .ob-validation-notification-wrapper .MuiCollapse-root {
9955
+ transition-property: height;
9956
+ transition-duration: inherit;
9957
+ transition-timing-function: inherit;
9958
+ }
9959
+
9960
+ .is-contracted .ob-validation-notification-card-collapse-wrapper {
9961
+ width: 196px;
9962
+ opacity: 0;
9963
+ }
9964
+
9965
+ .is-expanded .ob-validation-notification-card-collapse-wrapper {
9966
+ width: 300px;
9967
+ opacity: 1;
9968
+ }
9969
+
9970
+ .ob-validation-notification-card-page-label {
9971
+ font-weight: 600;
9972
+ font-size: 0.875rem;
9973
+ }
9974
+
9975
+ .ob-validation-notification-card-page-label.is-not-first {
9976
+ margin-top: 0.5rem;
9977
+ }
9978
+
9979
+ .ob-validation-notification-card-list {
9980
+ margin-top: 0.5rem;
9981
+ border-radius: 8px;
9982
+ }
9983
+
9984
+ .ob-validation-notification-card-item {
9985
+ display: flex;
9986
+ justify-content: space-between;
9987
+ align-items: center;
9988
+ padding: 0.5rem;
9989
+ }
9990
+
9991
+ .ob-validation-notification-card-item.is-first {
9992
+ border-top-left-radius: 8px;
9993
+ border-top-right-radius: 8px;
9994
+ }
9995
+
9996
+ .ob-validation-notification-card-item.is-last {
9997
+ border-bottom-left-radius: 8px;
9998
+ border-bottom-right-radius: 8px;
9999
+ }
10000
+
10001
+ .ob-validation-notification-card-item-text {
10002
+ white-space: nowrap;
10003
+ overflow: hidden;
10004
+ font-size: 0.875rem;
10005
+ }
10006
+
10007
+ .ob-validation-notification-card-item-text-error-message {
10008
+ overflow: hidden;
10009
+ text-overflow: ellipsis;
10010
+ }
10011
+
10012
+ .ob-validation-notification-card-item-icon {
10013
+ margin-left: 0.5rem;
10014
+ }
10015
+
10016
+ @media only screen and (max-width: 1024px) {
10017
+ .ob-bottom-navigation__content .ob-validation-notification-wrapper {
10018
+ margin-bottom: 4rem;
10019
+ }
10020
+ }
10021
+ @media only screen and (max-width: 769px) {
10022
+ .ob-validation-notification-wrapper {
10023
+ left: 1rem;
10024
+ }
10025
+ .is-contracted .ob-validation-notification-card-collapse-wrapper {
10026
+ width: 100%;
10027
+ }
10028
+ .is-expanded .ob-validation-notification-card-collapse-wrapper {
10029
+ width: 100%;
10030
+ }
10031
+ .section .ob-list.ob-validation-notification-card-list {
10032
+ margin-right: unset;
10033
+ margin-left: unset;
10034
+ width: unset;
10035
+ }
10036
+ }
9858
10037
  .flatpickr-calendar {
9859
10038
  background: transparent;
9860
10039
  opacity: 0;
package/dist/styles.scss CHANGED
@@ -141,6 +141,7 @@ $section-padding-mobile: $section-padding-mobile-y $section-padding-mobile-x;
141
141
  @import './styles/api-nsw-liquor-licence.scss';
142
142
  @import './styles/arcgis-web-map.scss';
143
143
  @import './styles/abn.scss';
144
+ @import './styles/validation-errors-card.scss';
144
145
  //
145
146
  // Third Party
146
147
  //
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { FormTypes, SubmissionTypes, IntegrationTypes } from '@oneblink/types';
3
2
  export { FormElementConditionallyShownElement, FormElementConditionallyShown, FormElementsConditionallyShown, } from '@oneblink/sdk-core/dist/conditionalLogicService';
4
3
  export type FormElementKey = string;
@@ -0,0 +1,13 @@
1
+ import { FormTypes } from '@oneblink/types';
2
+ declare class ElementDOMId {
3
+ elementDOMId: string;
4
+ constructor(params: {
5
+ element: FormTypes.FormElementWithName;
6
+ idPrefix: string;
7
+ } | string);
8
+ get value(): string;
9
+ get elementContainerDOMId(): string;
10
+ get subFormDOMIdPrefix(): string;
11
+ repeatableSetEntryDOMIdPrefix: (entryKey: string) => string;
12
+ }
13
+ export default ElementDOMId;
@@ -0,0 +1,24 @@
1
+ class ElementDOMId {
2
+ constructor(params) {
3
+ this.repeatableSetEntryDOMIdPrefix = (entryKey) => {
4
+ return `${this.elementDOMId}_entry-${entryKey}_`;
5
+ };
6
+ if (typeof params !== 'string') {
7
+ this.elementDOMId = `${params.idPrefix}${params.element.name}`;
8
+ }
9
+ else {
10
+ this.elementDOMId = params;
11
+ }
12
+ }
13
+ get value() {
14
+ return this.elementDOMId;
15
+ }
16
+ get elementContainerDOMId() {
17
+ return `element-container__${this.elementDOMId}`;
18
+ }
19
+ get subFormDOMIdPrefix() {
20
+ return `${this.elementDOMId}_`;
21
+ }
22
+ }
23
+ export default ElementDOMId;
24
+ //# sourceMappingURL=elementDOMIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementDOMIds.js","sourceRoot":"","sources":["../../src/utils/elementDOMIds.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY;IAEhB,YACE,MAKU;QAoBZ,kCAA6B,GAAG,CAAC,QAAgB,EAAE,EAAE;YACnD,OAAO,GAAG,IAAI,CAAC,YAAY,UAAU,QAAQ,GAAG,CAAA;QAClD,CAAC,CAAA;QApBC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IACD,IAAI,qBAAqB;QACvB,OAAO,sBAAsB,IAAI,CAAC,YAAY,EAAE,CAAA;IAClD,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,CAAA;IAChC,CAAC;CAKF;AAED,eAAe,YAAY,CAAA","sourcesContent":["import { FormTypes } from '@oneblink/types'\n\nclass ElementDOMId {\n elementDOMId: string\n constructor(\n params:\n | {\n element: FormTypes.FormElementWithName\n idPrefix: string\n }\n | string,\n ) {\n if (typeof params !== 'string') {\n this.elementDOMId = `${params.idPrefix}${params.element.name}`\n } else {\n this.elementDOMId = params\n }\n }\n\n get value() {\n return this.elementDOMId\n }\n get elementContainerDOMId() {\n return `element-container__${this.elementDOMId}`\n }\n\n get subFormDOMIdPrefix() {\n return `${this.elementDOMId}_`\n }\n\n repeatableSetEntryDOMIdPrefix = (entryKey: string) => {\n return `${this.elementDOMId}_entry-${entryKey}_`\n }\n}\n\nexport default ElementDOMId\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"merge-executed-lookups.js","sourceRoot":"","sources":["../../src/utils/merge-executed-lookups.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAKhB;;IACC,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO,eAAe,CAAA;KACvB;IAED,MAAM,sBAAsB,GAAG,EAAE,GAAG,eAAe,EAAE,CAAA;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,sBAAsB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;;gBACvD,MAAM,sBAAsB,GAC1B,MAAC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,GAAG,CAAuB,mCAAI,EAAE,CAAA;gBACrD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,GAAG,CAAC,CAAC;oBAC1D,CAAC,CAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAChB,GAAG,CACiD;oBACxD,CAAC,CAAC,EAAE,CAAA;gBACN,OAAO,oBAAoB,CAAC;oBAC1B,gBAAgB,EAAE,KAAK;oBACvB,iBAAiB,EAAE,YAAY,CAAC,KAAK,CAAC;oBACtC,eAAe,EAAE,MAAA,sBAAsB,CAAC,KAAK,CAAC,mCAAI,EAAE;iBACrD,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YACF,SAAQ;SACT;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YAC3B,sBAAsB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;gBACjD,gBAAgB,EACd,KAAuD;gBACzD,iBAAiB,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAClC,GAAG,CAC8C;gBACnD,eAAe,EAAE,MAAC,sBAAsB,CAAC,GAAG,CAAqB,mCAAI,EAAE;aACxE,CAAC,CAAA;YACF,SAAQ;SACT;QACD,sBAAsB,CAAC,GAAG,CAAC;YACzB,sBAAsB,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,MAAK,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,GAAG,CAAC,CAAA,CAAA;KAC7E;IACD,OAAO,sBAAsB,CAAA;AAC/B,CAAC","sourcesContent":["import { SubmissionTypes } from '@oneblink/types'\nimport { ExecutedLookups } from '../types/form'\n\nexport default function mergeExecutedLookups({\n dataLookupResult,\n currentSubmission,\n executedLookups,\n}: {\n dataLookupResult: SubmissionTypes.S3SubmissionData['submission'] | undefined\n currentSubmission: SubmissionTypes.S3SubmissionData['submission'] | undefined\n executedLookups: ExecutedLookups\n}): ExecutedLookups {\n if (!dataLookupResult) {\n return executedLookups\n }\n\n const updatedExecutedLookups = { ...executedLookups }\n for (const [key, value] of Object.entries(dataLookupResult)) {\n if (Array.isArray(value)) {\n updatedExecutedLookups[key] = value.map((entry, index) => {\n const elementExecutedLookups =\n (executedLookups?.[key] as ExecutedLookups[]) ?? []\n const elementValue = Array.isArray(currentSubmission?.[key])\n ? (currentSubmission?.[\n key\n ] as SubmissionTypes.S3SubmissionData['submission'][])\n : []\n return mergeExecutedLookups({\n dataLookupResult: entry,\n currentSubmission: elementValue[index],\n executedLookups: elementExecutedLookups[index] ?? {},\n })\n })\n continue\n }\n if (Object(value) === value) {\n updatedExecutedLookups[key] = mergeExecutedLookups({\n dataLookupResult:\n value as SubmissionTypes.S3SubmissionData['submission'],\n currentSubmission: currentSubmission?.[\n key\n ] as SubmissionTypes.S3SubmissionData['submission'],\n executedLookups: (updatedExecutedLookups[key] as ExecutedLookups) ?? {},\n })\n continue\n }\n updatedExecutedLookups[key] =\n updatedExecutedLookups[key] === true && value === currentSubmission?.[key]\n }\n return updatedExecutedLookups\n}\n"]}
1
+ {"version":3,"file":"merge-executed-lookups.js","sourceRoot":"","sources":["../../src/utils/merge-executed-lookups.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAKhB;;IACC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,MAAM,sBAAsB,GAAG,EAAE,GAAG,eAAe,EAAE,CAAA;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,sBAAsB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;;gBACvD,MAAM,sBAAsB,GAC1B,MAAC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,GAAG,CAAuB,mCAAI,EAAE,CAAA;gBACrD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,GAAG,CAAC,CAAC;oBAC1D,CAAC,CAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAChB,GAAG,CACiD;oBACxD,CAAC,CAAC,EAAE,CAAA;gBACN,OAAO,oBAAoB,CAAC;oBAC1B,gBAAgB,EAAE,KAAK;oBACvB,iBAAiB,EAAE,YAAY,CAAC,KAAK,CAAC;oBACtC,eAAe,EAAE,MAAA,sBAAsB,CAAC,KAAK,CAAC,mCAAI,EAAE;iBACrD,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAC5B,sBAAsB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;gBACjD,gBAAgB,EACd,KAAuD;gBACzD,iBAAiB,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAClC,GAAG,CAC8C;gBACnD,eAAe,EAAE,MAAC,sBAAsB,CAAC,GAAG,CAAqB,mCAAI,EAAE;aACxE,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,sBAAsB,CAAC,GAAG,CAAC;YACzB,sBAAsB,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,MAAK,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,GAAG,CAAC,CAAA,CAAA;IAC9E,CAAC;IACD,OAAO,sBAAsB,CAAA;AAC/B,CAAC","sourcesContent":["import { SubmissionTypes } from '@oneblink/types'\nimport { ExecutedLookups } from '../types/form'\n\nexport default function mergeExecutedLookups({\n dataLookupResult,\n currentSubmission,\n executedLookups,\n}: {\n dataLookupResult: SubmissionTypes.S3SubmissionData['submission'] | undefined\n currentSubmission: SubmissionTypes.S3SubmissionData['submission'] | undefined\n executedLookups: ExecutedLookups\n}): ExecutedLookups {\n if (!dataLookupResult) {\n return executedLookups\n }\n\n const updatedExecutedLookups = { ...executedLookups }\n for (const [key, value] of Object.entries(dataLookupResult)) {\n if (Array.isArray(value)) {\n updatedExecutedLookups[key] = value.map((entry, index) => {\n const elementExecutedLookups =\n (executedLookups?.[key] as ExecutedLookups[]) ?? []\n const elementValue = Array.isArray(currentSubmission?.[key])\n ? (currentSubmission?.[\n key\n ] as SubmissionTypes.S3SubmissionData['submission'][])\n : []\n return mergeExecutedLookups({\n dataLookupResult: entry,\n currentSubmission: elementValue[index],\n executedLookups: elementExecutedLookups[index] ?? {},\n })\n })\n continue\n }\n if (Object(value) === value) {\n updatedExecutedLookups[key] = mergeExecutedLookups({\n dataLookupResult:\n value as SubmissionTypes.S3SubmissionData['submission'],\n currentSubmission: currentSubmission?.[\n key\n ] as SubmissionTypes.S3SubmissionData['submission'],\n executedLookups: (updatedExecutedLookups[key] as ExecutedLookups) ?? {},\n })\n continue\n }\n updatedExecutedLookups[key] =\n updatedExecutedLookups[key] === true && value === currentSubmission?.[key]\n }\n return updatedExecutedLookups\n}\n"]}
@@ -0,0 +1,6 @@
1
+ declare const scrollToElement: ({ id, navigationTopOffset, }: {
2
+ id: string;
3
+ /** We allow an offset to cater for any headers */
4
+ navigationTopOffset: number;
5
+ }) => void;
6
+ export default scrollToElement;