@oneblink/apps-react 6.8.0 → 6.9.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) 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 +7 -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 +7 -7
  50. package/dist/components/renderer/attachments/AttachmentStatus.js +4 -4
  51. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  52. package/dist/components/renderer/attachments/DropdownMenu.d.ts +1 -0
  53. package/dist/components/renderer/attachments/DropdownMenu.js +10 -1
  54. package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
  55. package/dist/components/renderer/attachments/FileCard.d.ts +5 -4
  56. package/dist/components/renderer/attachments/FileCard.js +5 -4
  57. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  58. package/dist/components/renderer/attachments/FileCardContent.d.ts +3 -2
  59. package/dist/components/renderer/attachments/FileCardContent.js +3 -3
  60. package/dist/components/renderer/attachments/FileCardContent.js.map +1 -1
  61. package/dist/form-elements/FormElementABN.js.map +1 -1
  62. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  63. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  64. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  65. package/dist/form-elements/FormElementBSB.js.map +1 -1
  66. package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
  67. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  68. package/dist/form-elements/FormElementCamera.js +13 -13
  69. package/dist/form-elements/FormElementCamera.js.map +1 -1
  70. package/dist/form-elements/FormElementCaptcha.js.map +1 -1
  71. package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
  72. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  73. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  74. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  75. package/dist/form-elements/FormElementDate.js.map +1 -1
  76. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  77. package/dist/form-elements/FormElementFile.js +1 -1
  78. package/dist/form-elements/FormElementFile.js.map +1 -1
  79. package/dist/form-elements/FormElementFiles.js.map +1 -1
  80. package/dist/form-elements/FormElementForm.js +3 -1
  81. package/dist/form-elements/FormElementForm.js.map +1 -1
  82. package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
  83. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  84. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  85. package/dist/form-elements/FormElementHeading.js.map +1 -1
  86. package/dist/form-elements/FormElementLocation.js.map +1 -1
  87. package/dist/form-elements/FormElementNumber.js.map +1 -1
  88. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  89. package/dist/form-elements/FormElementRadio.js.map +1 -1
  90. package/dist/form-elements/FormElementRepeatableSet.js +3 -1
  91. package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
  92. package/dist/form-elements/FormElementSection.js.map +1 -1
  93. package/dist/form-elements/FormElementSelect.js.map +1 -1
  94. package/dist/form-elements/FormElementSignature.js +7 -7
  95. package/dist/form-elements/FormElementSignature.js.map +1 -1
  96. package/dist/form-elements/FormElementSummary.js.map +1 -1
  97. package/dist/form-elements/FormElementTime.js.map +1 -1
  98. package/dist/hooks/attachments/useAttachment.d.ts +4 -3
  99. package/dist/hooks/attachments/useAttachment.js +32 -45
  100. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  101. package/dist/hooks/attachments/useAttachments.d.ts +1 -1
  102. package/dist/hooks/attachments/useAttachments.js.map +1 -1
  103. package/dist/hooks/useCaptcha.d.ts +0 -1
  104. package/dist/hooks/useClickOutsideElement.js.map +1 -1
  105. package/dist/hooks/useConditionalLogic.js.map +1 -1
  106. package/dist/hooks/useDrafts.js.map +1 -1
  107. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  108. package/dist/hooks/useFlatpickr.js.map +1 -1
  109. package/dist/hooks/useFormDefinition.js.map +1 -1
  110. package/dist/hooks/useFormElementLookups.js.map +1 -1
  111. package/dist/hooks/useFormElementOptions.js.map +1 -1
  112. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -3
  113. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  114. package/dist/hooks/useFormSubmissionModelContext.js.map +1 -1
  115. package/dist/hooks/useFormSubmissionState.d.ts +2 -2
  116. package/dist/hooks/useFormValidation.d.ts +1 -1
  117. package/dist/hooks/useFormValidation.js.map +1 -1
  118. package/dist/hooks/useInfiniteScrollDataLoad.js.map +1 -1
  119. package/dist/hooks/useIsOffline.d.ts +1 -1
  120. package/dist/hooks/useLoadDataState.js.map +1 -1
  121. package/dist/hooks/useLogin.js.map +1 -1
  122. package/dist/hooks/useLookupNotification.js.map +1 -1
  123. package/dist/hooks/useLookups.d.ts +1 -1
  124. package/dist/hooks/useLookups.js.map +1 -1
  125. package/dist/hooks/useOneBlinkFormContainer.d.ts +0 -1
  126. package/dist/hooks/usePages.js.map +1 -1
  127. package/dist/hooks/usePendingSubmissions.js.map +1 -1
  128. package/dist/hooks/useReCAPTCHAProps.js.map +1 -1
  129. package/dist/hooks/useSignUp.js.map +1 -1
  130. package/dist/hooks/useSubmissionIdIsValid.js.map +1 -1
  131. package/dist/hooks/useToggleComplianceChildren.js.map +1 -1
  132. package/dist/hooks/useValidationClass.js.map +1 -1
  133. package/dist/services/attachments.js.map +1 -1
  134. package/dist/services/blob-utils.js.map +1 -1
  135. package/dist/services/checkBsbsAreInvalid.js.map +1 -1
  136. package/dist/services/checkIfAttachmentsExist.js.map +1 -1
  137. package/dist/services/checkIfBsbsAreValidating.js.map +1 -1
  138. package/dist/services/cleanFormSubmissionModel.js.map +1 -1
  139. package/dist/services/download-file.js.map +1 -1
  140. package/dist/services/drawTimestampOnCanvas.js.map +1 -1
  141. package/dist/services/form-validation.js.map +1 -1
  142. package/dist/services/generate-default-data.js.map +1 -1
  143. package/dist/services/generateCivicaNameRecordElements.js.map +1 -1
  144. package/dist/services/generateFreshdeskDependentFieldElements.js.map +1 -1
  145. package/dist/services/geolocation.js +1 -1
  146. package/dist/services/geolocation.js.map +1 -1
  147. package/dist/services/getDateRangeConfiguration.js.map +1 -1
  148. package/dist/services/getRepeatableSetEntriesConfiguration.js.map +1 -1
  149. package/dist/services/injectableOptions.js.map +1 -1
  150. package/dist/services/scrolling-service.js.map +1 -1
  151. package/dist/styles/ob-html.scss +3 -0
  152. package/dist/styles/section.scss +4 -0
  153. package/dist/styles/validation-errors-card.scss +180 -0
  154. package/dist/styles.css +179 -0
  155. package/dist/styles.scss +1 -0
  156. package/dist/types/form.d.ts +0 -1
  157. package/dist/utils/elementDOMIds.d.ts +13 -0
  158. package/dist/utils/elementDOMIds.js +24 -0
  159. package/dist/utils/elementDOMIds.js.map +1 -0
  160. package/dist/utils/merge-executed-lookups.js.map +1 -1
  161. package/dist/utils/scrollToElement.d.ts +6 -0
  162. package/dist/utils/scrollToElement.js +65 -0
  163. package/dist/utils/scrollToElement.js.map +1 -0
  164. package/package.json +6 -5
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;
@@ -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.8.0",
4
+ "version": "6.9.0-beta.10",
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"