@oneblink/apps-react 6.9.0-beta.7 → 6.9.0-beta.8

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 (144) hide show
  1. package/dist/OneBlinkAutoSaveForm.js.map +1 -1
  2. package/dist/OneBlinkForm.d.ts +25 -37
  3. package/dist/OneBlinkFormBase.js.map +1 -1
  4. package/dist/OneBlinkReadOnlyForm.js +0 -1
  5. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  6. package/dist/PaymentReceipt.js.map +1 -1
  7. package/dist/components/ArcGISWebMap.js.map +1 -1
  8. package/dist/components/CustomAccordion.d.ts +12 -13
  9. package/dist/components/ErrorSnackbar.js.map +1 -1
  10. package/dist/components/ValidationErrorsCard.d.ts +2 -1
  11. package/dist/components/ValidationErrorsCard.js +19 -16
  12. package/dist/components/ValidationErrorsCard.js.map +1 -1
  13. package/dist/components/ValidationErrorsCard_framer.js.map +1 -1
  14. package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
  15. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
  16. package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
  17. package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
  18. package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
  19. package/dist/components/formStore/table/ActionedByTableCell.js.map +1 -1
  20. package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
  21. package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
  22. package/dist/components/formStore/table/TableCellCopyButton.js.map +1 -1
  23. package/dist/components/formStore/table/generateColumns.d.ts +3 -10
  24. package/dist/components/formStore/table/generateColumns.js.map +1 -1
  25. package/dist/components/formStore/table/useFormStoreTable.d.ts +4 -4
  26. package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
  27. package/dist/components/formStore/useFormStoreTableContext.d.ts +4 -4
  28. package/dist/components/formStore/useFormStoreTableContext.js.map +1 -1
  29. package/dist/components/payments/PaymentForm.js.map +1 -1
  30. package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
  31. package/dist/components/renderer/AnnotationModal.js.map +1 -1
  32. package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
  33. package/dist/components/renderer/FormElementOptions.js.map +1 -1
  34. package/dist/components/renderer/LookupButton.js.map +1 -1
  35. package/dist/components/renderer/LookupNotification.js.map +1 -1
  36. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
  37. package/dist/components/renderer/OneBlinkFormElements.js +3 -1
  38. package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
  39. package/dist/components/renderer/PageFormElements.js.map +1 -1
  40. package/dist/components/renderer/ReverseGeocode.js.map +1 -1
  41. package/dist/components/renderer/ToggleAllCheckbox.js.map +1 -1
  42. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +5 -5
  43. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  44. package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
  45. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  46. package/dist/components/renderer/attachments/FileCardContent.d.ts +2 -2
  47. package/dist/components/renderer/attachments/FileCardContent.js.map +1 -1
  48. package/dist/form-elements/FormElementABN.js.map +1 -1
  49. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  50. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  51. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  52. package/dist/form-elements/FormElementBSB.js.map +1 -1
  53. package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
  54. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  55. package/dist/form-elements/FormElementCamera.js.map +1 -1
  56. package/dist/form-elements/FormElementCaptcha.js.map +1 -1
  57. package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
  58. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  59. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  60. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  61. package/dist/form-elements/FormElementDate.js.map +1 -1
  62. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  63. package/dist/form-elements/FormElementFile.js.map +1 -1
  64. package/dist/form-elements/FormElementFiles.js.map +1 -1
  65. package/dist/form-elements/FormElementForm.js +3 -1
  66. package/dist/form-elements/FormElementForm.js.map +1 -1
  67. package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
  68. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  69. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  70. package/dist/form-elements/FormElementHeading.js.map +1 -1
  71. package/dist/form-elements/FormElementLocation.js.map +1 -1
  72. package/dist/form-elements/FormElementNumber.js.map +1 -1
  73. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  74. package/dist/form-elements/FormElementRadio.js.map +1 -1
  75. package/dist/form-elements/FormElementRepeatableSet.js +3 -1
  76. package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
  77. package/dist/form-elements/FormElementSection.js.map +1 -1
  78. package/dist/form-elements/FormElementSelect.js.map +1 -1
  79. package/dist/form-elements/FormElementSignature.js.map +1 -1
  80. package/dist/form-elements/FormElementSummary.js.map +1 -1
  81. package/dist/form-elements/FormElementTime.js.map +1 -1
  82. package/dist/hooks/attachments/useAttachment.d.ts +3 -3
  83. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  84. package/dist/hooks/attachments/useAttachments.d.ts +1 -1
  85. package/dist/hooks/attachments/useAttachments.js.map +1 -1
  86. package/dist/hooks/useCaptcha.d.ts +0 -1
  87. package/dist/hooks/useClickOutsideElement.js.map +1 -1
  88. package/dist/hooks/useConditionalLogic.js.map +1 -1
  89. package/dist/hooks/useDrafts.js.map +1 -1
  90. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  91. package/dist/hooks/useFlatpickr.js.map +1 -1
  92. package/dist/hooks/useFormDefinition.js.map +1 -1
  93. package/dist/hooks/useFormElementLookups.js.map +1 -1
  94. package/dist/hooks/useFormElementOptions.js.map +1 -1
  95. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -3
  96. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  97. package/dist/hooks/useFormSubmissionModelContext.js.map +1 -1
  98. package/dist/hooks/useFormSubmissionState.d.ts +2 -2
  99. package/dist/hooks/useFormValidation.d.ts +1 -1
  100. package/dist/hooks/useFormValidation.js.map +1 -1
  101. package/dist/hooks/useInfiniteScrollDataLoad.js.map +1 -1
  102. package/dist/hooks/useIsOffline.d.ts +1 -1
  103. package/dist/hooks/useLoadDataState.js.map +1 -1
  104. package/dist/hooks/useLogin.js.map +1 -1
  105. package/dist/hooks/useLookupNotification.js.map +1 -1
  106. package/dist/hooks/useLookups.d.ts +1 -1
  107. package/dist/hooks/useLookups.js.map +1 -1
  108. package/dist/hooks/useOneBlinkFormContainer.d.ts +0 -1
  109. package/dist/hooks/usePages.js.map +1 -1
  110. package/dist/hooks/usePendingSubmissions.js.map +1 -1
  111. package/dist/hooks/useReCAPTCHAProps.js.map +1 -1
  112. package/dist/hooks/useSignUp.js.map +1 -1
  113. package/dist/hooks/useSubmissionIdIsValid.js.map +1 -1
  114. package/dist/hooks/useToggleComplianceChildren.js.map +1 -1
  115. package/dist/hooks/useValidationClass.js.map +1 -1
  116. package/dist/services/attachments.js.map +1 -1
  117. package/dist/services/blob-utils.js.map +1 -1
  118. package/dist/services/checkBsbsAreInvalid.js.map +1 -1
  119. package/dist/services/checkIfAttachmentsExist.js.map +1 -1
  120. package/dist/services/checkIfBsbsAreValidating.js.map +1 -1
  121. package/dist/services/cleanFormSubmissionModel.js.map +1 -1
  122. package/dist/services/download-file.js.map +1 -1
  123. package/dist/services/drawTimestampOnCanvas.js.map +1 -1
  124. package/dist/services/form-validation.js.map +1 -1
  125. package/dist/services/generate-default-data.js.map +1 -1
  126. package/dist/services/generateCivicaNameRecordElements.js.map +1 -1
  127. package/dist/services/generateFreshdeskDependentFieldElements.js.map +1 -1
  128. package/dist/services/geolocation.js +1 -1
  129. package/dist/services/geolocation.js.map +1 -1
  130. package/dist/services/getDateRangeConfiguration.js.map +1 -1
  131. package/dist/services/getRepeatableSetEntriesConfiguration.js.map +1 -1
  132. package/dist/services/injectableOptions.js.map +1 -1
  133. package/dist/services/scrolling-service.js.map +1 -1
  134. package/dist/styles/section.scss +4 -0
  135. package/dist/styles.css +4 -0
  136. package/dist/types/form.d.ts +0 -1
  137. package/dist/utils/elementDOMIds.d.ts +13 -0
  138. package/dist/utils/elementDOMIds.js +24 -0
  139. package/dist/utils/elementDOMIds.js.map +1 -0
  140. package/dist/utils/merge-executed-lookups.js.map +1 -1
  141. package/dist/utils/scrollToElement.d.ts +6 -0
  142. package/dist/utils/scrollToElement.js +65 -0
  143. package/dist/utils/scrollToElement.js.map +1 -0
  144. 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":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAMnC,SAAS,8BAA8B,CAAC,EACtC,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,cAAc,EAC1B,YAAY,EAAE,gBAAgB,EAC9B,GAAG,MAAM,EAOV;IACC,OAAO,iBAAiB,CAAC,kCAAkC,CAAS;QAClE,QAAQ;QACR,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,gBAAgB;QAC9B,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY;YACrD,yCAAyC;YACzC,MAAM,iBAAiB,GAEhB;gBACL,GAAG,MAAM;gBACT,UAAU;gBACV,YAAY;gBACZ,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;gBAC7B,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS;gBACvC,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB;gBACvD,qBAAqB,EAAE,IAAI;aAC5B,CAAA;YACD,MAAM,EACJ,IAAI,EAAE,KAAK,EACX,yBAAyB,EAAE,gCAAgC,GAC5D,GAAG,mBAAmB,CAAC,mCAAmC,CACzD,MAAM,CAAC,KAAK,EACZ,iBAAiB,CAClB,CAAA;YACD,IAAI,CAAC,gCAAgC,EAAE;gBACrC,OAAM;aACP;YAED,MAAM,EACJ,IAAI,EAAE,KAAK,EACX,yBAAyB,EAAE,gCAAgC,GAC5D,GAAG,mBAAmB,CAAC,mCAAmC,CACzD,MAAM,CAAC,KAAK,EACZ,iBAAiB,CAClB,CAAA;YACD,IAAI,CAAC,gCAAgC,EAAE;gBACrC,OAAM;aACP;YAED,OAAO;gBACL,KAAK,GAAG,GAAG,GAAG,KAAK;gBACnB,KAAK;gBACL;oBACE,KAAK;oBACL,KAAK;iBACN;aACF,CAAA;QACH,CAAC;QACD,wBAAwB,CAAC,MAAM,EAAE,OAAO;YACtC,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC5B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7B,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,MAAM,EACN,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,GAOZ;IACC,MAAM,OAAO,GAAG,8BAA8B,CAAC;QAC7C,MAAM;QACN,UAAU;QACV,YAAY;QACZ,WAAW;QACX,WAAW;KACZ,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAoC,EAAE,CAAA;IAE5D,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACnC,gBAAgB,CAAC,IAAI,CAAC;YACpB,GAAG,MAAM;YACT,EAAE,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;YAC7C,KAAK;YACL,KAAK;SACN,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAED,SAAS,kCAAkC,CAAC,EAC1C,eAAe,EACf,QAAQ,EACR,OAAO,EACP,WAAW,EACX,WAAW,GAOZ;IACC,OAAO,QAAQ,CAAC,GAAG,CAAwB,CAAC,CAAC,EAAE,EAAE;QAC/C,QAAQ,CAAC,CAAC,IAAI,EAAE;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC,CAAC;gBACd,OAAO;oBACL,GAAG,CAAC;oBACJ,QAAQ,EAAE,kCAAkC,CAAC;wBAC3C,wEAAwE;wBACxE,eAAe;wBACf,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,OAAO;wBACP,WAAW;wBACX,WAAW;qBACZ,CAAC;iBACH,CAAA;aACF;YACD,KAAK,MAAM,CAAC,CAAC;gBACX,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;oBAC7B,OAAO;wBACL,GAAG,CAAC;wBACJ,QAAQ,EAAE,kCAAkC,CAAC;4BAC3C,mDAAmD;4BACnD,eAAe,EAAE,CAAC,CAAC,QAAQ;4BAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,OAAO,EAAE,OAAO,CAAC,MAAM,CAErB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gCAChB,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oCACjB,IAAI,CAAC,IAAI,CACP,KAAK,CACH,CAAC,CAAC,IAAI,CAC2C,CACpD,CAAA;iCACF;gCACD,OAAO,IAAI,CAAA;4BACb,CAAC,EAAE,EAAE,CAAC;4BACN,WAAW;4BACX,WAAW;yBACZ,CAAC;qBACH,CAAA;iBACF;qBAAM;oBACL,OAAO,CAAC,CAAA;iBACT;aACF;YACD,KAAK,eAAe,CAAC,CAAC;gBACpB,OAAO;oBACL,GAAG,CAAC;oBACJ,QAAQ,EAAE,kCAAkC,CAAC;wBAC3C,mEAAmE;wBACnE,eAAe,EAAE,CAAC,CAAC,QAAQ;wBAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,OAAO,EAAE,OAAO,CAAC,MAAM,CAErB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;4BAChB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;4BACnC,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;gCAChC,IAAI,CAAC,IAAI,CACP,GAAI,aAAkE,CACvE,CAAA;6BACF;4BACD,OAAO,IAAI,CAAA;wBACb,CAAC,EAAE,EAAE,CAAC;wBACN,WAAW;wBACX,WAAW;qBACZ,CAAC;iBACH,CAAA;aACF;YACD,OAAO,CAAC,CAAC;gBACP,MAAM,cAAc,GAAG,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;gBACvE,IAAI,cAAc,EAAE;oBAClB,OAAO;wBACL,GAAG,cAAc;wBACjB,OAAO,EAAE,OAAO,CAAC,MAAM,CACrB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE;;4BACzB,MAAA,cAAc,CAAC,OAAO,0CAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gCACpC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;oCACvC,MAAM,EAAE,CAAC;oCACT,UAAU;oCACV,YAAY,EAAE,eAAe;oCAC7B,WAAW;oCACX,WAAW;iCACZ,CAAC,CAAA;gCAEF,UAAU,CAAC,IAAI,CACb,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,EAAE;oCACrC,OAAO,CAAC,UAAU,CAAC,IAAI,CACrB,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,CAC9C,CAAA;gCACH,CAAC,CAAC,CACH,CAAA;4BACH,CAAC,CAAC,CAAA;4BACF,OAAO,UAAU,CAAA;wBACnB,CAAC,EACD,EAAE,CACH;qBACF,CAAA;iBACF;gBACD,OAAO,CAAC,CAAA;aACT;SACF;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,EAC7C,UAAU,EACV,GAAG,MAAM,EAOV;IACC,oEAAoE;IACpE,gEAAgE;IAChE,qEAAqE;IACrE,oEAAoE;IACpE,8DAA8D;IAC9D,OAAO,kCAAkC,CAAC;QACxC,GAAG,MAAM;QACT,OAAO,EAAE,CAAC,UAAU,CAAC;KACtB,CAAC,CAAA;AACJ,CAAC","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"]}
@@ -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
+ }
package/dist/styles.css CHANGED
@@ -9548,6 +9548,10 @@ textarea:disabled {
9548
9548
  transform: translate(-50%, 50%);
9549
9549
  }
9550
9550
 
9551
+ .ob-section__collapsed {
9552
+ display: none;
9553
+ }
9554
+
9551
9555
  .ob-bsb__record-control {
9552
9556
  min-width: 0;
9553
9557
  }
@@ -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;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Recursively traverses ancestors to find the first visible ancestor element
3
+ * and allow getting its scroll point. It handles the case of ancestor elements
4
+ * being hidden by `ob-hidden` or an ancestor section being collapsed.
5
+ *
6
+ * @param element - The element for which to find its first visible ancestor or
7
+ * ancestor sibling.
8
+ * @returns A callback that returns the scroll point of the first visible
9
+ * ancestor element, or undefined if none is found.
10
+ */
11
+ const findScrollPointOfVisibleAncestorElement = (element) => {
12
+ var _a;
13
+ const isVisible = element.checkVisibility();
14
+ if (!isVisible) {
15
+ const OBHiddenElement = element.closest('.is-hidden');
16
+ if (OBHiddenElement) {
17
+ // In the case of a hidden ancestor element we will navigate to the bottom of the previous visible sibling.
18
+ const parentIsVisible = (_a = OBHiddenElement.parentElement) === null || _a === void 0 ? void 0 : _a.checkVisibility();
19
+ if (!parentIsVisible) {
20
+ return findScrollPointOfVisibleAncestorElement(OBHiddenElement);
21
+ }
22
+ let previousSibling = OBHiddenElement.previousElementSibling;
23
+ while (previousSibling) {
24
+ if (previousSibling.checkVisibility()) {
25
+ // Have to reasign for TS, because it does not recognise the typeguard in the `while` inside the callback function
26
+ const sib = previousSibling;
27
+ return () => sib.getBoundingClientRect().bottom;
28
+ }
29
+ previousSibling = previousSibling.previousElementSibling;
30
+ }
31
+ }
32
+ // Collapsed section ancestor
33
+ const ancestorCollapsedSection = element.closest('.ob-section__collapsed');
34
+ if (ancestorCollapsedSection) {
35
+ const ancestorSectionRoot = ancestorCollapsedSection.closest('.ob-section');
36
+ return ancestorSectionRoot
37
+ ? findScrollPointOfVisibleAncestorElement(ancestorSectionRoot)
38
+ : undefined;
39
+ }
40
+ // Not visible for some other reason
41
+ return;
42
+ }
43
+ else {
44
+ return () => element.getBoundingClientRect().top;
45
+ }
46
+ };
47
+ const scrollToElement = ({ id, navigationTopOffset, }) => {
48
+ const element = document.getElementById(id);
49
+ if (element) {
50
+ const getScrollPoint = findScrollPointOfVisibleAncestorElement(element);
51
+ if (getScrollPoint) {
52
+ window.requestAnimationFrame(() => {
53
+ window.scrollTo({
54
+ top: getScrollPoint() +
55
+ window.scrollY -
56
+ // We allow an offset to cater for any headers
57
+ navigationTopOffset,
58
+ behavior: 'smooth',
59
+ });
60
+ });
61
+ }
62
+ }
63
+ };
64
+ export default scrollToElement;
65
+ //# sourceMappingURL=scrollToElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollToElement.js","sourceRoot":"","sources":["../../src/utils/scrollToElement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,uCAAuC,GAAG,CAC9C,OAAgB,EACY,EAAE;;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAA;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAErD,IAAI,eAAe,EAAE,CAAC;YACpB,2GAA2G;YAC3G,MAAM,eAAe,GAAG,MAAA,eAAe,CAAC,aAAa,0CAAE,eAAe,EAAE,CAAA;YACxE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,uCAAuC,CAAC,eAAe,CAAC,CAAA;YACjE,CAAC;YACD,IAAI,eAAe,GAAG,eAAe,CAAC,sBAAsB,CAAA;YAC5D,OAAO,eAAe,EAAE,CAAC;gBACvB,IAAI,eAAe,CAAC,eAAe,EAAE,EAAE,CAAC;oBACtC,kHAAkH;oBAClH,MAAM,GAAG,GAAG,eAAe,CAAA;oBAC3B,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAA;gBACjD,CAAC;gBACD,eAAe,GAAG,eAAe,CAAC,sBAAsB,CAAA;YAC1D,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;QAC1E,IAAI,wBAAwB,EAAE,CAAC;YAC7B,MAAM,mBAAmB,GACvB,wBAAwB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YACjD,OAAO,mBAAmB;gBACxB,CAAC,CAAC,uCAAuC,CAAC,mBAAmB,CAAC;gBAC9D,CAAC,CAAC,SAAS,CAAA;QACf,CAAC;QAED,oCAAoC;QACpC,OAAM;IACR,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAA;IAClD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,EACvB,EAAE,EACF,mBAAmB,GAKpB,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IAE3C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,cAAc,GAAG,uCAAuC,CAAC,OAAO,CAAC,CAAA;QACvE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;gBAChC,MAAM,CAAC,QAAQ,CAAC;oBACd,GAAG,EACD,cAAc,EAAE;wBAChB,MAAM,CAAC,OAAO;wBACd,8CAA8C;wBAC9C,mBAAmB;oBACrB,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,eAAe,eAAe,CAAA","sourcesContent":["/**\n * Recursively traverses ancestors to find the first visible ancestor element\n * and allow getting its scroll point. It handles the case of ancestor elements\n * being hidden by `ob-hidden` or an ancestor section being collapsed.\n *\n * @param element - The element for which to find its first visible ancestor or\n * ancestor sibling.\n * @returns A callback that returns the scroll point of the first visible\n * ancestor element, or undefined if none is found.\n */\nconst findScrollPointOfVisibleAncestorElement = (\n element: Element,\n): (() => number) | undefined => {\n const isVisible = element.checkVisibility()\n if (!isVisible) {\n const OBHiddenElement = element.closest('.is-hidden')\n\n if (OBHiddenElement) {\n // In the case of a hidden ancestor element we will navigate to the bottom of the previous visible sibling.\n const parentIsVisible = OBHiddenElement.parentElement?.checkVisibility()\n if (!parentIsVisible) {\n return findScrollPointOfVisibleAncestorElement(OBHiddenElement)\n }\n let previousSibling = OBHiddenElement.previousElementSibling\n while (previousSibling) {\n if (previousSibling.checkVisibility()) {\n // Have to reasign for TS, because it does not recognise the typeguard in the `while` inside the callback function\n const sib = previousSibling\n return () => sib.getBoundingClientRect().bottom\n }\n previousSibling = previousSibling.previousElementSibling\n }\n }\n\n // Collapsed section ancestor\n const ancestorCollapsedSection = element.closest('.ob-section__collapsed')\n if (ancestorCollapsedSection) {\n const ancestorSectionRoot =\n ancestorCollapsedSection.closest('.ob-section')\n return ancestorSectionRoot\n ? findScrollPointOfVisibleAncestorElement(ancestorSectionRoot)\n : undefined\n }\n\n // Not visible for some other reason\n return\n } else {\n return () => element.getBoundingClientRect().top\n }\n}\n\nconst scrollToElement = ({\n id,\n navigationTopOffset,\n}: {\n id: string\n /** We allow an offset to cater for any headers */\n navigationTopOffset: number\n}) => {\n const element = document.getElementById(id)\n\n if (element) {\n const getScrollPoint = findScrollPointOfVisibleAncestorElement(element)\n if (getScrollPoint) {\n window.requestAnimationFrame(() => {\n window.scrollTo({\n top:\n getScrollPoint() +\n window.scrollY -\n // We allow an offset to cater for any headers\n navigationTopOffset,\n behavior: 'smooth',\n })\n })\n }\n }\n}\n\nexport default scrollToElement\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": "6.9.0-beta.7",
4
+ "version": "6.9.0-beta.8",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"
@@ -76,17 +76,18 @@
76
76
  "eslint-plugin-react": "^7.33.2",
77
77
  "eslint-plugin-react-hooks": "^4.6.0",
78
78
  "fixpack": "^4.0.0",
79
- "jest": "^27.5.1",
79
+ "jest": "^29.7.0",
80
+ "jest-environment-jsdom": "^29.7.0",
80
81
  "prettier": "^3.2.4",
81
82
  "prettier-plugin-jsdoc": "^1.3.0",
82
83
  "react": "^17.0.2",
83
84
  "react-dom": "^17.0.2",
84
85
  "react-router-dom": "^5.3.4",
85
86
  "sass": "^1.70.0",
86
- "ts-jest": "^27.1.5",
87
+ "ts-jest": "^29.2.5",
87
88
  "tsc-watch": "^6.0.4",
88
- "typedoc": "^0.24.8",
89
- "typescript": "^4.9.5"
89
+ "typedoc": "^0.26.9",
90
+ "typescript": "^5.6.3"
90
91
  },
91
92
  "directories": {
92
93
  "doc": "docs"