studiokit-scaffolding-js 7.0.12-next.1.3 → 7.0.12-next.2.1

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 (258) hide show
  1. package/lib/components/ActionList.js +164 -37
  2. package/lib/components/AlertDialog.js +128 -12
  3. package/lib/components/AlertWithIcon.js +88 -29
  4. package/lib/components/ConnectedModal.js +35 -12
  5. package/lib/components/Dropdowns/GroupsDropdown.js +63 -45
  6. package/lib/components/Dropdowns/ManagedNavDropdown.js +92 -67
  7. package/lib/components/Dropdowns/UserDropdown.js +105 -24
  8. package/lib/components/Dropdowns/index.js +4 -10
  9. package/lib/components/EntityOwnerList.js +47 -21
  10. package/lib/components/Error.js +101 -12
  11. package/lib/components/ErrorBoundary.js +127 -38
  12. package/lib/components/ErrorMessage.js +39 -12
  13. package/lib/components/Forms/DateField.js +56 -45
  14. package/lib/components/Forms/TimeField.js +76 -45
  15. package/lib/components/Forms/index.js +3 -5
  16. package/lib/components/Groups/CreateEditCopySaveButtons.js +109 -14
  17. package/lib/components/Groups/ExternalGroups/Attach.js +206 -151
  18. package/lib/components/Groups/ExternalGroups/Table.js +176 -48
  19. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
  20. package/lib/components/Groups/RosterSyncInfo.js +142 -23
  21. package/lib/components/HOC/AccessibleAppComponent.js +88 -72
  22. package/lib/components/HOC/ActivityRequiredComponent.js +68 -33
  23. package/lib/components/HOC/AsyncComponent.js +49 -41
  24. package/lib/components/HOC/AuthenticatedComponent.js +55 -44
  25. package/lib/components/HOC/CollectionComponent.js +154 -104
  26. package/lib/components/HOC/CollectionFirstItemComponent.js +45 -40
  27. package/lib/components/HOC/CollectionItemComponent.js +152 -100
  28. package/lib/components/HOC/ConnectedModalComponent.js +87 -69
  29. package/lib/components/HOC/DataDependentComponent.js +26 -27
  30. package/lib/components/HOC/EntityComponent.js +57 -53
  31. package/lib/components/HOC/FullscreenModalComponent.js +139 -108
  32. package/lib/components/HOC/GroupActivityRequiredComponent.js +27 -20
  33. package/lib/components/HOC/GuidComponent.js +20 -20
  34. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +32 -29
  35. package/lib/components/HOC/ModelErrorRedirectComponent.js +37 -39
  36. package/lib/components/HOC/SearchPersistorComponent.js +237 -173
  37. package/lib/components/HOC/UnauthenticatedComponent.js +32 -30
  38. package/lib/components/HOC/UserComponent.js +6 -8
  39. package/lib/components/Icons/IconAlphaList.js +28 -8
  40. package/lib/components/Icons/IconExternalUser.js +28 -8
  41. package/lib/components/Icons/IconImpersonation.js +28 -8
  42. package/lib/components/Icons/IconStopImpersonating.js +28 -8
  43. package/lib/components/Icons/IconTable.js +29 -9
  44. package/lib/components/Icons/IconTableDeleteCol.js +28 -8
  45. package/lib/components/Icons/IconTableDeleteRow.js +28 -8
  46. package/lib/components/Icons/IconTableInsertCol.js +28 -8
  47. package/lib/components/Icons/IconTableInsertRow.js +28 -8
  48. package/lib/components/Impersonation/Button.js +71 -16
  49. package/lib/components/Impersonation/Link.js +72 -16
  50. package/lib/components/Impersonation/UserDetail.js +60 -11
  51. package/lib/components/Loading.js +23 -8
  52. package/lib/components/LockDownBrowser/Check.js +188 -51
  53. package/lib/components/LockDownBrowser/ExitButton.js +22 -13
  54. package/lib/components/LockDownBrowser/Launch.js +64 -64
  55. package/lib/components/Lti/Confirm.js +147 -14
  56. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +165 -36
  57. package/lib/components/Lti/Launch.js +99 -25
  58. package/lib/components/Lti/LaunchGroup.js +81 -16
  59. package/lib/components/ManageTable.js +304 -90
  60. package/lib/components/ManageTableNoDataComponent.js +38 -7
  61. package/lib/components/NewVersionAlert.js +76 -49
  62. package/lib/components/NotFound.js +81 -11
  63. package/lib/components/Notifications.js +179 -129
  64. package/lib/components/PaginationNextButton.js +28 -9
  65. package/lib/components/PaginationPreviousButton.js +28 -9
  66. package/lib/components/Quill/CustomToolbar.js +427 -222
  67. package/lib/components/Quill/Formats/Image.js +67 -67
  68. package/lib/components/Quill/Formats/List.js +38 -47
  69. package/lib/components/Quill/Formats/Video.js +23 -26
  70. package/lib/components/Quill/ImageDropModule.js +136 -114
  71. package/lib/components/Quill/ImageWarning.js +41 -12
  72. package/lib/components/Quill/ImageWithAltTextModal.js +420 -89
  73. package/lib/components/Quill/Specs/CustomImageSpec.js +32 -31
  74. package/lib/components/Quill/Specs/CustomVideoSpec.js +22 -23
  75. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +89 -97
  76. package/lib/components/Quill/TableModule/Blots/TableBlot.js +47 -50
  77. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +48 -51
  78. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +219 -224
  79. package/lib/components/Quill/TableModule/Blots/TableContainer.js +75 -86
  80. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +70 -73
  81. package/lib/components/Quill/TableModule/constants.js +40 -42
  82. package/lib/components/Quill/TableModule/index.js +357 -305
  83. package/lib/components/Quill/TableModule/utils.js +39 -48
  84. package/lib/components/Quill/accessibilityFix.js +219 -223
  85. package/lib/components/Quill/index.js +30 -33
  86. package/lib/components/RefreshIndicator/Bordered.js +44 -10
  87. package/lib/components/RefreshIndicator/Inline.js +43 -12
  88. package/lib/components/RefreshIndicator/index.js +257 -62
  89. package/lib/components/SearchControls.js +211 -14
  90. package/lib/components/SentryRoute.js +5 -7
  91. package/lib/components/Tables/RoleFilter.js +66 -38
  92. package/lib/components/Tables/TextFilter.js +58 -18
  93. package/lib/components/UserRoles/Add.js +193 -99
  94. package/lib/components/UserRoles/Context.js +3 -6
  95. package/lib/components/UserRoles/RoleCell.js +176 -75
  96. package/lib/components/UserRoles/Select.js +151 -20
  97. package/lib/components/UserRoles/Table.js +215 -82
  98. package/lib/components/UserRoles/index.js +526 -386
  99. package/lib/config/eslint/index.js +26 -29
  100. package/lib/config/eslint/lib/order.js +21 -28
  101. package/lib/config/eslint/lib/prettier.js +15 -19
  102. package/lib/config/eslint/lib/typescript.js +87 -113
  103. package/lib/config/eslint/react.js +18 -15
  104. package/lib/constants/baseActivity.js +26 -28
  105. package/lib/constants/baseRole.js +10 -12
  106. package/lib/constants/configuration.js +43 -55
  107. package/lib/constants/externalProviderType.js +6 -8
  108. package/lib/constants/fetchErrorData.js +10 -12
  109. package/lib/constants/index.js +13 -15
  110. package/lib/constants/lockDownBrowser.js +23 -25
  111. package/lib/constants/mockData.js +370 -300
  112. package/lib/constants/modelStatus.js +11 -13
  113. package/lib/constants/notificationType.js +8 -10
  114. package/lib/constants/operatingSystem.js +8 -10
  115. package/lib/constants/shard.js +7 -9
  116. package/lib/constants/table.js +18 -22
  117. package/lib/constants/tier.js +8 -10
  118. package/lib/constants/userRole.js +11 -8
  119. package/lib/endpointMappings.js +191 -182
  120. package/lib/hooks/useCollection.js +79 -65
  121. package/lib/hooks/useCollectionConfiguration.js +220 -80
  122. package/lib/hooks/useCollectionItem.js +151 -57
  123. package/lib/hooks/useGuid.js +16 -9
  124. package/lib/hooks/usePrevious.js +14 -13
  125. package/lib/index.js +11 -26
  126. package/lib/redux/actionCreator.js +44 -35
  127. package/lib/redux/actions/AuthAction.js +45 -32
  128. package/lib/redux/actions/ModalAction.js +6 -8
  129. package/lib/redux/actions/ModelAction.js +95 -43
  130. package/lib/redux/actions/NotificationAction.js +6 -8
  131. package/lib/redux/actions/SearchAction.js +5 -7
  132. package/lib/redux/actions/index.js +6 -8
  133. package/lib/redux/configureReducers.js +48 -46
  134. package/lib/redux/configureStore.js +77 -91
  135. package/lib/redux/helpers.js +2 -5
  136. package/lib/redux/reducers/authReducer.js +44 -43
  137. package/lib/redux/reducers/index.js +7 -14
  138. package/lib/redux/reducers/modalsReducer.js +43 -31
  139. package/lib/redux/reducers/modelsReducer.js +131 -137
  140. package/lib/redux/reducers/notificationsReducer.js +20 -20
  141. package/lib/redux/reducers/searchReducer.js +13 -13
  142. package/lib/redux/sagas/appInsightsSaga.js +19 -21
  143. package/lib/redux/sagas/authSaga.js +248 -234
  144. package/lib/redux/sagas/caliperSaga.js +142 -131
  145. package/lib/redux/sagas/clockOffsetSaga.js +29 -32
  146. package/lib/redux/sagas/configurationSaga.js +8 -10
  147. package/lib/redux/sagas/downtimeApiErrorSaga.js +16 -19
  148. package/lib/redux/sagas/errorSaga.js +23 -24
  149. package/lib/redux/sagas/googleAnalyticsSaga.js +24 -27
  150. package/lib/redux/sagas/identityProviderSaga.js +19 -21
  151. package/lib/redux/sagas/initialDataLoadSaga.js +34 -31
  152. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +25 -22
  153. package/lib/redux/sagas/modelFetchSaga.js +302 -286
  154. package/lib/redux/sagas/noStoreSaga.js +60 -61
  155. package/lib/redux/sagas/postLoginDataSaga.js +37 -32
  156. package/lib/redux/sagas/postLoginRedirectSaga.js +22 -27
  157. package/lib/redux/sagas/rootSaga.js +77 -60
  158. package/lib/redux/sagas/sentrySaga.js +25 -28
  159. package/lib/redux/sagas/userIdSaga.js +13 -15
  160. package/lib/services/codeProviderService.js +21 -21
  161. package/lib/services/dateService.js +6 -8
  162. package/lib/services/documentService.js +10 -11
  163. package/lib/services/fetchService.js +103 -95
  164. package/lib/services/persistenceService.js +27 -30
  165. package/lib/services/ticketProviderService.js +25 -25
  166. package/lib/services/tokenPersistenceService.js +8 -10
  167. package/lib/services/windowService.js +14 -16
  168. package/lib/startup.js +110 -101
  169. package/lib/types/AppConfiguration.js +2 -2
  170. package/lib/types/Artifact.js +7 -9
  171. package/lib/types/BaseReduxState.js +2 -2
  172. package/lib/types/Client.js +2 -2
  173. package/lib/types/Collection.js +2 -2
  174. package/lib/types/Configuration.js +2 -2
  175. package/lib/types/DeepLinkingResponseRequest.js +2 -2
  176. package/lib/types/DeletableModel.js +2 -2
  177. package/lib/types/Event.js +2 -2
  178. package/lib/types/ExternalGroup.js +2 -2
  179. package/lib/types/ExternalProvider.js +2 -2
  180. package/lib/types/ExternalTerm.js +2 -2
  181. package/lib/types/Group.js +2 -2
  182. package/lib/types/IdentityProvider.js +2 -2
  183. package/lib/types/LtiLaunch.js +2 -2
  184. package/lib/types/NameOnlyEntity.js +2 -2
  185. package/lib/types/Notification.js +2 -2
  186. package/lib/types/OptionalRecord.js +2 -2
  187. package/lib/types/OwnerSchedule.js +2 -2
  188. package/lib/types/PropertyOfType.js +2 -2
  189. package/lib/types/Quill.js +2 -2
  190. package/lib/types/RoleDescription.js +2 -2
  191. package/lib/types/Search.js +2 -2
  192. package/lib/types/SimpleLocation.js +2 -2
  193. package/lib/types/UniTime.js +2 -2
  194. package/lib/types/User.js +2 -2
  195. package/lib/types/UserRole.js +2 -2
  196. package/lib/types/auth/AuthState.js +2 -2
  197. package/lib/types/auth/CasV1LoginRequestBody.js +2 -2
  198. package/lib/types/auth/ClientCredentials.js +2 -2
  199. package/lib/types/auth/CodeProviderService.js +2 -2
  200. package/lib/types/auth/LocalLoginRequestBody.js +2 -2
  201. package/lib/types/auth/TicketProviderService.js +2 -2
  202. package/lib/types/auth/TokenPersistenceService.js +2 -2
  203. package/lib/types/auth/index.js +8 -10
  204. package/lib/types/externals.d.js +2 -0
  205. package/lib/types/index.js +29 -31
  206. package/lib/types/net/EndpointConfig.js +2 -2
  207. package/lib/types/net/EndpointMapping.js +2 -2
  208. package/lib/types/net/EndpointMappings.js +2 -2
  209. package/lib/types/net/ErrorHandler.js +2 -2
  210. package/lib/types/net/FetchConfig.js +2 -2
  211. package/lib/types/net/FetchErrorData.js +6 -8
  212. package/lib/types/net/FetchResult.js +2 -2
  213. package/lib/types/net/HTTPMethod.js +2 -2
  214. package/lib/types/net/HTTPStatusCode.js +12 -14
  215. package/lib/types/net/Metadata.js +2 -2
  216. package/lib/types/net/Model.js +2 -2
  217. package/lib/types/net/ModelCollection.js +2 -2
  218. package/lib/types/net/ModelsState.js +2 -2
  219. package/lib/types/net/OAuthToken.js +2 -2
  220. package/lib/types/net/OAuthTokenOrNull.js +2 -2
  221. package/lib/types/net/TokenAccessFunction.js +2 -2
  222. package/lib/types/net/index.js +17 -19
  223. package/lib/utils/baseActivity.js +83 -85
  224. package/lib/utils/baseRole.js +32 -36
  225. package/lib/utils/collection.js +403 -297
  226. package/lib/utils/cookies.js +19 -23
  227. package/lib/utils/date.js +188 -205
  228. package/lib/utils/dom.js +130 -131
  229. package/lib/utils/domainIdentifier.js +4 -8
  230. package/lib/utils/entityUserRole.js +2 -5
  231. package/lib/utils/error.js +14 -19
  232. package/lib/utils/events.js +32 -31
  233. package/lib/utils/externalGroup.js +20 -25
  234. package/lib/utils/externalProviders.js +4 -7
  235. package/lib/utils/externalTerms.js +6 -6
  236. package/lib/utils/fetch.js +168 -176
  237. package/lib/utils/group.js +14 -11
  238. package/lib/utils/groupDates.js +38 -46
  239. package/lib/utils/groupRoles.js +23 -32
  240. package/lib/utils/lockDownBrowser.js +12 -15
  241. package/lib/utils/logger.js +23 -28
  242. package/lib/utils/lti.js +4 -7
  243. package/lib/utils/model.js +28 -43
  244. package/lib/utils/number.js +9 -13
  245. package/lib/utils/promise.js +23 -26
  246. package/lib/utils/quill.js +55 -60
  247. package/lib/utils/route.js +52 -60
  248. package/lib/utils/search.js +72 -87
  249. package/lib/utils/shard.js +33 -42
  250. package/lib/utils/sort.js +47 -50
  251. package/lib/utils/string.js +10 -12
  252. package/lib/utils/table.js +29 -33
  253. package/lib/utils/timezone.js +7 -12
  254. package/lib/utils/url.js +130 -144
  255. package/lib/utils/user.js +54 -64
  256. package/lib/utils/userAgent.js +7 -14
  257. package/lib/utils/userRole.js +36 -39
  258. package/package.json +17 -3
package/lib/utils/dom.js CHANGED
@@ -1,59 +1,54 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setupMobileEventListeners = exports.isTextInput = exports.hasExternalKeyboard = exports.isMobileDevice = exports.getFirstParentElementWithClassName = exports.getVerticallyScrollableParent = void 0;
4
- const logger_1 = require("./logger");
1
+ import { getLogger } from './logger';
5
2
  const KEYBOARD_ANIMATION_MS = 250;
3
+
6
4
  /**
7
5
  * Get the nearest vertically scrollable parent of an element
8
6
  * @param { HTMLElement } element - The element to start with
9
7
  * @returns The nearest vertically scrollable parent element
10
8
  */
11
- const getVerticallyScrollableParent = (element) => {
12
- let style = getComputedStyle(element);
13
- const excludeStaticParent = style.position === 'absolute';
14
- const overflowRegex = /(auto|scroll|hidden)/;
15
- for (let parent = element; (parent = parent.parentElement);) {
16
- style = getComputedStyle(parent);
17
- if (excludeStaticParent && style.position === 'static')
18
- continue;
19
- if (overflowRegex.test(style.overflow + style.overflowY) && parent.scrollHeight > parent.clientHeight)
20
- return parent;
21
- }
22
- return document.scrollingElement;
9
+ export const getVerticallyScrollableParent = element => {
10
+ let style = getComputedStyle(element);
11
+ const excludeStaticParent = style.position === 'absolute';
12
+ const overflowRegex = /(auto|scroll|hidden)/;
13
+ for (let parent = element; parent = parent.parentElement;) {
14
+ style = getComputedStyle(parent);
15
+ if (excludeStaticParent && style.position === 'static') continue;
16
+ if (overflowRegex.test(style.overflow + style.overflowY) && parent.scrollHeight > parent.clientHeight) return parent;
17
+ }
18
+ return document.scrollingElement;
23
19
  };
24
- exports.getVerticallyScrollableParent = getVerticallyScrollableParent;
20
+
25
21
  /**
26
22
  * Get the first parent that has the given className in its classList
27
23
  * @param element The target element
28
24
  * @param className The className to match
29
25
  */
30
- const getFirstParentElementWithClassName = (element, className) => {
31
- for (let parent = element; (parent = parent.parentElement);) {
32
- if (parent.classList.contains(className))
33
- return parent;
34
- }
35
- return undefined;
26
+ export const getFirstParentElementWithClassName = (element, className) => {
27
+ for (let parent = element; parent = parent.parentElement;) {
28
+ if (parent.classList.contains(className)) return parent;
29
+ }
30
+ return undefined;
36
31
  };
37
- exports.getFirstParentElementWithClassName = getFirstParentElementWithClassName;
32
+
38
33
  /**
39
34
  * Return whether the device being used is one of several mainstream mobile devices
40
35
  */
41
- const isMobileDevice = () => {
42
- return (/android|ipad|ipod|iphone/i.test(navigator.userAgent) ||
43
- (/macintosh/i.test(navigator.userAgent) && navigator.maxTouchPoints));
36
+ export const isMobileDevice = () => {
37
+ return /android|ipad|ipod|iphone/i.test(navigator.userAgent) || /macintosh/i.test(navigator.userAgent) && navigator.maxTouchPoints;
44
38
  };
45
- exports.isMobileDevice = isMobileDevice;
39
+
46
40
  /** Return whether the device is using an external keyboard vs. the native on-screen OS keyboard. */
47
- const hasExternalKeyboard = () => window.hasExternalKeyboard;
48
- exports.hasExternalKeyboard = hasExternalKeyboard;
41
+ export const hasExternalKeyboard = () => window.hasExternalKeyboard;
42
+
49
43
  /**
50
44
  * Sets `window.hasExternalKeyboard`, returned by `hasExternalKeyboard`.
51
45
  */
52
- const setHasExternalKeyboard = (hasExternalKeyboard) => {
53
- (0, logger_1.getLogger)().debug('hasExternalKeyboard', hasExternalKeyboard);
54
- const windowWithoutType = window;
55
- windowWithoutType.hasExternalKeyboard = hasExternalKeyboard;
46
+ const setHasExternalKeyboard = hasExternalKeyboard => {
47
+ getLogger().debug('hasExternalKeyboard', hasExternalKeyboard);
48
+ const windowWithoutType = window;
49
+ windowWithoutType.hasExternalKeyboard = hasExternalKeyboard;
56
50
  };
51
+
57
52
  /**
58
53
  * 100vh is kind of b⊘rked on mobile safari, we have to set it programmatically here
59
54
  * so we can calculate device-independent viewport heights
@@ -63,72 +58,73 @@ const setHasExternalKeyboard = (hasExternalKeyboard) => {
63
58
  *
64
59
  */
65
60
  const setVisualViewportHeightVar = () => {
66
- const height = visualViewport ? visualViewport.height : 0;
67
- document.documentElement.style.setProperty('--visual-viewport-height', `${height}px`);
61
+ const height = visualViewport ? visualViewport.height : 0;
62
+ document.documentElement.style.setProperty('--visual-viewport-height', `${height}px`);
68
63
  };
64
+
69
65
  /**
70
66
  * Is the given element capable of text input?
71
67
  *
72
68
  * @param el An HTML element
73
69
  */
74
- const isTextInput = (el) => {
75
- const tagName = el.tagName && el.tagName.toLowerCase();
76
- if (tagName === 'textarea')
77
- return true;
78
- if (tagName === 'input') {
79
- const inputEl = el;
80
- return inputEl.type !== 'button' && inputEl.type !== 'radio' && inputEl.type !== 'checkbox';
81
- }
82
- // Quill editor
83
- return tagName === 'div' && el.className.includes('ql-editor') && el.contentEditable === 'true';
70
+ export const isTextInput = el => {
71
+ const tagName = el.tagName && el.tagName.toLowerCase();
72
+ if (tagName === 'textarea') return true;
73
+ if (tagName === 'input') {
74
+ const inputEl = el;
75
+ return inputEl.type !== 'button' && inputEl.type !== 'radio' && inputEl.type !== 'checkbox';
76
+ }
77
+ // Quill editor
78
+ return tagName === 'div' && el.className.includes('ql-editor') && el.contentEditable === 'true';
84
79
  };
85
- exports.isTextInput = isTextInput;
86
80
  let updateHasExternalKeyboardAfterFocusTimeout = undefined;
87
81
  let scrollToElementAfterFocusTimeout = undefined;
88
82
  const updateHasExternalKeyboardAfterFocus = () => {
89
- const closedVisualViewportHeight = visualViewport ? visualViewport.height : 0;
90
- // wait for the keyboard animation
91
- updateHasExternalKeyboardAfterFocusTimeout = window.setTimeout(() => {
92
- // find the keyboard height based on the difference in viewport height
93
- const keyboardHeight = closedVisualViewportHeight - (visualViewport ? visualViewport.height : 0);
94
- // on first-load the input focus can fail
95
- // when this happens the height is 0, and this ONLY happens when there is NOT an external keyboard
96
- if (keyboardHeight === 0 && (0, exports.hasExternalKeyboard)() === undefined) {
97
- setHasExternalKeyboard(false);
98
- }
99
- else {
100
- // if the keyboard height is greater than 100, that means the full onscreen keyboard displayed
101
- // otherwise, only the small context menu displayed, meaning there is an external keyboard
102
- setHasExternalKeyboard(keyboardHeight < 100);
103
- }
104
- updateHasExternalKeyboardAfterFocusTimeout = undefined;
105
- }, KEYBOARD_ANIMATION_MS);
83
+ const closedVisualViewportHeight = visualViewport ? visualViewport.height : 0;
84
+ // wait for the keyboard animation
85
+ updateHasExternalKeyboardAfterFocusTimeout = window.setTimeout(() => {
86
+ // find the keyboard height based on the difference in viewport height
87
+ const keyboardHeight = closedVisualViewportHeight - (visualViewport ? visualViewport.height : 0);
88
+ // on first-load the input focus can fail
89
+ // when this happens the height is 0, and this ONLY happens when there is NOT an external keyboard
90
+ if (keyboardHeight === 0 && hasExternalKeyboard() === undefined) {
91
+ setHasExternalKeyboard(false);
92
+ } else {
93
+ // if the keyboard height is greater than 100, that means the full onscreen keyboard displayed
94
+ // otherwise, only the small context menu displayed, meaning there is an external keyboard
95
+ setHasExternalKeyboard(keyboardHeight < 100);
96
+ }
97
+ updateHasExternalKeyboardAfterFocusTimeout = undefined;
98
+ }, KEYBOARD_ANIMATION_MS);
106
99
  };
107
- const scrollToElementAfterFocus = (el) => {
108
- // wait for the keyboard animation
109
- scrollToElementAfterFocusTimeout = window.setTimeout(() => {
110
- // after the keyboard is open, check for the el’s scrollable parent, as it could have just become scrollable
111
- const scrollParent = (0, exports.getVerticallyScrollableParent)(el);
112
- // if the el has a scrollable parent other than the document, scroll it back into view
113
- if (scrollParent && scrollParent !== document.documentElement) {
114
- const scrollRect = scrollParent.getBoundingClientRect();
115
- const rect = el.getBoundingClientRect();
116
- // only scroll into view if outside of the scroll parent bounds
117
- if (rect.bottom < scrollRect.top || rect.top > scrollRect.bottom) {
118
- const newScrollTop = scrollParent.scrollTop + rect.top - scrollRect.top - 10;
119
- (0, logger_1.getLogger)().debug('scrollToEl', newScrollTop);
120
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
121
- if (scrollParent.scrollTo) {
122
- scrollParent.scrollTo({ top: newScrollTop, behavior: 'smooth' });
123
- }
124
- else {
125
- scrollParent.scrollTop = newScrollTop;
126
- }
127
- }
100
+ const scrollToElementAfterFocus = el => {
101
+ // wait for the keyboard animation
102
+ scrollToElementAfterFocusTimeout = window.setTimeout(() => {
103
+ // after the keyboard is open, check for the el’s scrollable parent, as it could have just become scrollable
104
+ const scrollParent = getVerticallyScrollableParent(el);
105
+ // if the el has a scrollable parent other than the document, scroll it back into view
106
+ if (scrollParent && scrollParent !== document.documentElement) {
107
+ const scrollRect = scrollParent.getBoundingClientRect();
108
+ const rect = el.getBoundingClientRect();
109
+ // only scroll into view if outside of the scroll parent bounds
110
+ if (rect.bottom < scrollRect.top || rect.top > scrollRect.bottom) {
111
+ const newScrollTop = scrollParent.scrollTop + rect.top - scrollRect.top - 10;
112
+ getLogger().debug('scrollToEl', newScrollTop);
113
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
114
+ if (scrollParent.scrollTo) {
115
+ scrollParent.scrollTo({
116
+ top: newScrollTop,
117
+ behavior: 'smooth'
118
+ });
119
+ } else {
120
+ scrollParent.scrollTop = newScrollTop;
128
121
  }
129
- scrollToElementAfterFocusTimeout = undefined;
130
- }, KEYBOARD_ANIMATION_MS);
122
+ }
123
+ }
124
+ scrollToElementAfterFocusTimeout = undefined;
125
+ }, KEYBOARD_ANIMATION_MS);
131
126
  };
127
+
132
128
  /**
133
129
  * Event handler for "focusin" event.
134
130
  *
@@ -137,12 +133,12 @@ const scrollToElementAfterFocus = (el) => {
137
133
  * Checks for external keyboard and scrolls to the focused element after any animations, e.g. keyboard open.
138
134
  *
139
135
  */
140
- const onFocusIn = (e) => {
141
- if (!e.target || !(0, exports.isTextInput)(e.target))
142
- return;
143
- updateHasExternalKeyboardAfterFocus();
144
- scrollToElementAfterFocus(e.target);
136
+ const onFocusIn = e => {
137
+ if (!e.target || !isTextInput(e.target)) return;
138
+ updateHasExternalKeyboardAfterFocus();
139
+ scrollToElementAfterFocus(e.target);
145
140
  };
141
+
146
142
  /**
147
143
  * Event handler for "focusout" event.
148
144
  *
@@ -151,52 +147,55 @@ const onFocusIn = (e) => {
151
147
  * Clears any pending timeouts from "focusin" events.
152
148
  *
153
149
  */
154
- const onFocusOut = (e) => {
155
- if (!e.target || !(0, exports.isTextInput)(e.target))
156
- return;
157
- if (updateHasExternalKeyboardAfterFocusTimeout) {
158
- window.clearTimeout(updateHasExternalKeyboardAfterFocusTimeout);
159
- updateHasExternalKeyboardAfterFocusTimeout = undefined;
160
- }
161
- if (scrollToElementAfterFocusTimeout) {
162
- window.clearTimeout(scrollToElementAfterFocusTimeout);
163
- scrollToElementAfterFocusTimeout = undefined;
164
- }
150
+ const onFocusOut = e => {
151
+ if (!e.target || !isTextInput(e.target)) return;
152
+ if (updateHasExternalKeyboardAfterFocusTimeout) {
153
+ window.clearTimeout(updateHasExternalKeyboardAfterFocusTimeout);
154
+ updateHasExternalKeyboardAfterFocusTimeout = undefined;
155
+ }
156
+ if (scrollToElementAfterFocusTimeout) {
157
+ window.clearTimeout(scrollToElementAfterFocusTimeout);
158
+ scrollToElementAfterFocusTimeout = undefined;
159
+ }
165
160
  };
161
+
166
162
  /**
167
163
  * Check if the device is using an external keyboard by appending an `input` and focusing it.
168
164
  *
169
165
  * This will trigger the `onFocusIn` event handler, which updates the `hasExternalKeyboard` global.
170
166
  */
171
167
  const checkForExternalKeyboard = () => {
172
- const el = document.createElement('input');
173
- el.type = 'text';
174
- el.autofocus = true;
175
- el.addEventListener('focusin', () => {
176
- // remove the input after the keyboard has displayed, plus a small buffer
177
- window.setTimeout(() => {
178
- el.blur();
179
- el.remove();
180
- }, KEYBOARD_ANIMATION_MS + 100);
181
- });
182
- document.documentElement.append(el);
168
+ const el = document.createElement('input');
169
+ el.type = 'text';
170
+ el.autofocus = true;
171
+ el.addEventListener('focusin', () => {
172
+ // remove the input after the keyboard has displayed, plus a small buffer
173
+ window.setTimeout(() => {
174
+ el.blur();
175
+ el.remove();
176
+ }, KEYBOARD_ANIMATION_MS + 100);
177
+ });
178
+ document.documentElement.append(el);
183
179
  };
184
- const setupMobileEventListeners = () => {
185
- if (!(0, exports.isMobileDevice)() || !visualViewport)
186
- return;
187
- // set viewport height var at setup
180
+ export const setupMobileEventListeners = () => {
181
+ if (!isMobileDevice() || !visualViewport) return;
182
+
183
+ // set viewport height var at setup
184
+ setVisualViewportHeightVar();
185
+
186
+ // add event listeners
187
+ visualViewport.addEventListener('resize', () => {
188
188
  setVisualViewportHeightVar();
189
- // add event listeners
190
- visualViewport.addEventListener('resize', () => {
191
- setVisualViewportHeightVar();
192
- // keep the document element scrolled to the top if a ReactModal is open
193
- if (document.body.classList.contains('ReactModal__Body--open')) {
194
- document.documentElement.scrollTop = 0;
195
- }
196
- });
197
- window.addEventListener('focusin', onFocusIn);
198
- window.addEventListener('focusout', onFocusOut);
199
- // check for external keyboard at setup
200
- checkForExternalKeyboard();
189
+
190
+ // keep the document element scrolled to the top if a ReactModal is open
191
+ if (document.body.classList.contains('ReactModal__Body--open')) {
192
+ document.documentElement.scrollTop = 0;
193
+ }
194
+ });
195
+ window.addEventListener('focusin', onFocusIn);
196
+ window.addEventListener('focusout', onFocusOut);
197
+
198
+ // check for external keyboard at setup
199
+ checkForExternalKeyboard();
201
200
  };
202
- exports.setupMobileEventListeners = setupMobileEventListeners;
201
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJLRVlCT0FSRF9BTklNQVRJT05fTVMiLCJnZXRWZXJ0aWNhbGx5U2Nyb2xsYWJsZVBhcmVudCIsImVsZW1lbnQiLCJzdHlsZSIsImdldENvbXB1dGVkU3R5bGUiLCJleGNsdWRlU3RhdGljUGFyZW50IiwicG9zaXRpb24iLCJvdmVyZmxvd1JlZ2V4IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsInRlc3QiLCJvdmVyZmxvdyIsIm92ZXJmbG93WSIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRvY3VtZW50Iiwic2Nyb2xsaW5nRWxlbWVudCIsImdldEZpcnN0UGFyZW50RWxlbWVudFdpdGhDbGFzc05hbWUiLCJjbGFzc05hbWUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInVuZGVmaW5lZCIsImlzTW9iaWxlRGV2aWNlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwibWF4VG91Y2hQb2ludHMiLCJoYXNFeHRlcm5hbEtleWJvYXJkIiwid2luZG93Iiwic2V0SGFzRXh0ZXJuYWxLZXlib2FyZCIsImRlYnVnIiwid2luZG93V2l0aG91dFR5cGUiLCJzZXRWaXN1YWxWaWV3cG9ydEhlaWdodFZhciIsImhlaWdodCIsInZpc3VhbFZpZXdwb3J0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2V0UHJvcGVydHkiLCJpc1RleHRJbnB1dCIsImVsIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiaW5wdXRFbCIsInR5cGUiLCJpbmNsdWRlcyIsImNvbnRlbnRFZGl0YWJsZSIsInVwZGF0ZUhhc0V4dGVybmFsS2V5Ym9hcmRBZnRlckZvY3VzVGltZW91dCIsInNjcm9sbFRvRWxlbWVudEFmdGVyRm9jdXNUaW1lb3V0IiwidXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXMiLCJjbG9zZWRWaXN1YWxWaWV3cG9ydEhlaWdodCIsInNldFRpbWVvdXQiLCJrZXlib2FyZEhlaWdodCIsInNjcm9sbFRvRWxlbWVudEFmdGVyRm9jdXMiLCJzY3JvbGxQYXJlbnQiLCJzY3JvbGxSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicmVjdCIsImJvdHRvbSIsInRvcCIsIm5ld1Njcm9sbFRvcCIsInNjcm9sbFRvcCIsInNjcm9sbFRvIiwiYmVoYXZpb3IiLCJvbkZvY3VzSW4iLCJlIiwidGFyZ2V0Iiwib25Gb2N1c091dCIsImNsZWFyVGltZW91dCIsImNoZWNrRm9yRXh0ZXJuYWxLZXlib2FyZCIsImNyZWF0ZUVsZW1lbnQiLCJhdXRvZm9jdXMiLCJhZGRFdmVudExpc3RlbmVyIiwiYmx1ciIsInJlbW92ZSIsImFwcGVuZCIsInNldHVwTW9iaWxlRXZlbnRMaXN0ZW5lcnMiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2RvbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcblxuY29uc3QgS0VZQk9BUkRfQU5JTUFUSU9OX01TID0gMjUwXG5cbi8qKlxuICogR2V0IHRoZSBuZWFyZXN0IHZlcnRpY2FsbHkgc2Nyb2xsYWJsZSBwYXJlbnQgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHsgSFRNTEVsZW1lbnQgfSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gc3RhcnQgd2l0aFxuICogQHJldHVybnMgVGhlIG5lYXJlc3QgdmVydGljYWxseSBzY3JvbGxhYmxlIHBhcmVudCBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWZXJ0aWNhbGx5U2Nyb2xsYWJsZVBhcmVudCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRsZXQgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG5cdGNvbnN0IGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuXHRjb25zdCBvdmVyZmxvd1JlZ2V4ID0gLyhhdXRvfHNjcm9sbHxoaWRkZW4pL1xuXG5cdGZvciAobGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDsgKHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50KTsgKSB7XG5cdFx0c3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBhcmVudClcblx0XHRpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIGNvbnRpbnVlXG5cdFx0aWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSkgJiYgcGFyZW50LnNjcm9sbEhlaWdodCA+IHBhcmVudC5jbGllbnRIZWlnaHQpXG5cdFx0XHRyZXR1cm4gcGFyZW50XG5cdH1cblx0cmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnRcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGhhcyB0aGUgZ2l2ZW4gY2xhc3NOYW1lIGluIGl0cyBjbGFzc0xpc3RcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSB0YXJnZXQgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3NOYW1lIHRvIG1hdGNoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaXJzdFBhcmVudEVsZW1lbnRXaXRoQ2xhc3NOYW1lID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRmb3IgKGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7IChwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCk7ICkge1xuXHRcdGlmIChwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBwYXJlbnRcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGRldmljZSBiZWluZyB1c2VkIGlzIG9uZSBvZiBzZXZlcmFsIG1haW5zdHJlYW0gbW9iaWxlIGRldmljZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTW9iaWxlRGV2aWNlID0gKCkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdC9hbmRyb2lkfGlwYWR8aXBvZHxpcGhvbmUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8XG5cdFx0KC9tYWNpbnRvc2gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cylcblx0KVxufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgdGhlIGRldmljZSBpcyB1c2luZyBhbiBleHRlcm5hbCBrZXlib2FyZCB2cy4gdGhlIG5hdGl2ZSBvbi1zY3JlZW4gT1Mga2V5Ym9hcmQuICovXG5leHBvcnQgY29uc3QgaGFzRXh0ZXJuYWxLZXlib2FyZCA9ICgpOiBib29sZWFuIHwgdW5kZWZpbmVkID0+ICh3aW5kb3cgYXMgYW55KS5oYXNFeHRlcm5hbEtleWJvYXJkXG5cbi8qKlxuICogU2V0cyBgd2luZG93Lmhhc0V4dGVybmFsS2V5Ym9hcmRgLCByZXR1cm5lZCBieSBgaGFzRXh0ZXJuYWxLZXlib2FyZGAuXG4gKi9cbmNvbnN0IHNldEhhc0V4dGVybmFsS2V5Ym9hcmQgPSAoaGFzRXh0ZXJuYWxLZXlib2FyZDogYm9vbGVhbikgPT4ge1xuXHRnZXRMb2dnZXIoKS5kZWJ1ZygnaGFzRXh0ZXJuYWxLZXlib2FyZCcsIGhhc0V4dGVybmFsS2V5Ym9hcmQpXG5cdGNvbnN0IHdpbmRvd1dpdGhvdXRUeXBlID0gd2luZG93IGFzIGFueVxuXHR3aW5kb3dXaXRob3V0VHlwZS5oYXNFeHRlcm5hbEtleWJvYXJkID0gaGFzRXh0ZXJuYWxLZXlib2FyZFxufVxuXG4vKipcbiAqIDEwMHZoIGlzIGtpbmQgb2YgYuKKmHJrZWQgb24gbW9iaWxlIHNhZmFyaSwgd2UgaGF2ZSB0byBzZXQgaXQgcHJvZ3JhbW1hdGljYWxseSBoZXJlXG4gKiBzbyB3ZSBjYW4gY2FsY3VsYXRlIGRldmljZS1pbmRlcGVuZGVudCB2aWV3cG9ydCBoZWlnaHRzXG4gKiBodHRwczovL2FsbHRoaW5nc3NtaXR0eS5jb20vMjAyMC8wNS8xMS9jc3MtZml4LWZvci0xMDB2aC1pbi1tb2JpbGUtd2Via2l0L1xuICpcbiAqIFNldHMgdGhlIENTUyB2YXJpYWJsZSBgLS12aXN1YWwtdmlld3BvcnQtaGVpZ2h0YCBvbiB0aGUgYGRvY3VtZW50RWxlbWVudGAvPGh0bWw+LlxuICpcbiAqL1xuY29uc3Qgc2V0VmlzdWFsVmlld3BvcnRIZWlnaHRWYXIgPSAoKSA9PiB7XG5cdGNvbnN0IGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogMFxuXHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdmlzdWFsLXZpZXdwb3J0LWhlaWdodCcsIGAke2hlaWdodH1weGApXG59XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIGVsZW1lbnQgY2FwYWJsZSBvZiB0ZXh0IGlucHV0P1xuICpcbiAqIEBwYXJhbSBlbCBBbiBIVE1MIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVGV4dElucHV0ID0gKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuXHRjb25zdCB0YWdOYW1lID0gZWwudGFnTmFtZSAmJiBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKClcblx0aWYgKHRhZ05hbWUgPT09ICd0ZXh0YXJlYScpIHJldHVybiB0cnVlXG5cdGlmICh0YWdOYW1lID09PSAnaW5wdXQnKSB7XG5cdFx0Y29uc3QgaW5wdXRFbCA9IGVsIGFzIEhUTUxJbnB1dEVsZW1lbnRcblx0XHRyZXR1cm4gaW5wdXRFbC50eXBlICE9PSAnYnV0dG9uJyAmJiBpbnB1dEVsLnR5cGUgIT09ICdyYWRpbycgJiYgaW5wdXRFbC50eXBlICE9PSAnY2hlY2tib3gnXG5cdH1cblx0Ly8gUXVpbGwgZWRpdG9yXG5cdHJldHVybiB0YWdOYW1lID09PSAnZGl2JyAmJiBlbC5jbGFzc05hbWUuaW5jbHVkZXMoJ3FsLWVkaXRvcicpICYmIGVsLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnXG59XG5cbmxldCB1cGRhdGVIYXNFeHRlcm5hbEtleWJvYXJkQWZ0ZXJGb2N1c1RpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxubGV0IHNjcm9sbFRvRWxlbWVudEFmdGVyRm9jdXNUaW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuY29uc3QgdXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXMgPSAoKSA9PiB7XG5cdGNvbnN0IGNsb3NlZFZpc3VhbFZpZXdwb3J0SGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAwXG5cdC8vIHdhaXQgZm9yIHRoZSBrZXlib2FyZCBhbmltYXRpb25cblx0dXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXNUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdC8vIGZpbmQgdGhlIGtleWJvYXJkIGhlaWdodCBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZSBpbiB2aWV3cG9ydCBoZWlnaHRcblx0XHRjb25zdCBrZXlib2FyZEhlaWdodCA9IGNsb3NlZFZpc3VhbFZpZXdwb3J0SGVpZ2h0IC0gKHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogMClcblx0XHQvLyBvbiBmaXJzdC1sb2FkIHRoZSBpbnB1dCBmb2N1cyBjYW4gZmFpbFxuXHRcdC8vIHdoZW4gdGhpcyBoYXBwZW5zIHRoZSBoZWlnaHQgaXMgMCwgYW5kIHRoaXMgT05MWSBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgTk9UIGFuIGV4dGVybmFsIGtleWJvYXJkXG5cdFx0aWYgKGtleWJvYXJkSGVpZ2h0ID09PSAwICYmIGhhc0V4dGVybmFsS2V5Ym9hcmQoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZXRIYXNFeHRlcm5hbEtleWJvYXJkKGZhbHNlKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZiB0aGUga2V5Ym9hcmQgaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiAxMDAsIHRoYXQgbWVhbnMgdGhlIGZ1bGwgb25zY3JlZW4ga2V5Ym9hcmQgZGlzcGxheWVkXG5cdFx0XHQvLyBvdGhlcndpc2UsIG9ubHkgdGhlIHNtYWxsIGNvbnRleHQgbWVudSBkaXNwbGF5ZWQsIG1lYW5pbmcgdGhlcmUgaXMgYW4gZXh0ZXJuYWwga2V5Ym9hcmRcblx0XHRcdHNldEhhc0V4dGVybmFsS2V5Ym9hcmQoa2V5Ym9hcmRIZWlnaHQgPCAxMDApXG5cdFx0fVxuXG5cdFx0dXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXNUaW1lb3V0ID0gdW5kZWZpbmVkXG5cdH0sIEtFWUJPQVJEX0FOSU1BVElPTl9NUylcbn1cblxuY29uc3Qgc2Nyb2xsVG9FbGVtZW50QWZ0ZXJGb2N1cyA9IChlbDogSFRNTEVsZW1lbnQpID0+IHtcblx0Ly8gd2FpdCBmb3IgdGhlIGtleWJvYXJkIGFuaW1hdGlvblxuXHRzY3JvbGxUb0VsZW1lbnRBZnRlckZvY3VzVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHQvLyBhZnRlciB0aGUga2V5Ym9hcmQgaXMgb3BlbiwgY2hlY2sgZm9yIHRoZSBlbOKAmXMgc2Nyb2xsYWJsZSBwYXJlbnQsIGFzIGl0IGNvdWxkIGhhdmUganVzdCBiZWNvbWUgc2Nyb2xsYWJsZVxuXHRcdGNvbnN0IHNjcm9sbFBhcmVudCA9IGdldFZlcnRpY2FsbHlTY3JvbGxhYmxlUGFyZW50KGVsKVxuXHRcdC8vIGlmIHRoZSBlbCBoYXMgYSBzY3JvbGxhYmxlIHBhcmVudCBvdGhlciB0aGFuIHRoZSBkb2N1bWVudCwgc2Nyb2xsIGl0IGJhY2sgaW50byB2aWV3XG5cdFx0aWYgKHNjcm9sbFBhcmVudCAmJiBzY3JvbGxQYXJlbnQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuXHRcdFx0Y29uc3Qgc2Nyb2xsUmVjdCA9IHNjcm9sbFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXHRcdFx0Y29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cdFx0XHQvLyBvbmx5IHNjcm9sbCBpbnRvIHZpZXcgaWYgb3V0c2lkZSBvZiB0aGUgc2Nyb2xsIHBhcmVudCBib3VuZHNcblx0XHRcdGlmIChyZWN0LmJvdHRvbSA8IHNjcm9sbFJlY3QudG9wIHx8IHJlY3QudG9wID4gc2Nyb2xsUmVjdC5ib3R0b20pIHtcblx0XHRcdFx0Y29uc3QgbmV3U2Nyb2xsVG9wID0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCArIHJlY3QudG9wIC0gc2Nyb2xsUmVjdC50b3AgLSAxMFxuXHRcdFx0XHRnZXRMb2dnZXIoKS5kZWJ1Zygnc2Nyb2xsVG9FbCcsIG5ld1Njcm9sbFRvcClcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cblx0XHRcdFx0aWYgKHNjcm9sbFBhcmVudC5zY3JvbGxUbykge1xuXHRcdFx0XHRcdHNjcm9sbFBhcmVudC5zY3JvbGxUbyh7IHRvcDogbmV3U2Nyb2xsVG9wLCBiZWhhdmlvcjogJ3Ntb290aCcgfSlcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzY3JvbGxQYXJlbnQuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRzY3JvbGxUb0VsZW1lbnRBZnRlckZvY3VzVGltZW91dCA9IHVuZGVmaW5lZFxuXHR9LCBLRVlCT0FSRF9BTklNQVRJT05fTVMpXG59XG5cbi8qKlxuICogRXZlbnQgaGFuZGxlciBmb3IgXCJmb2N1c2luXCIgZXZlbnQuXG4gKlxuICogXCJmb2N1c2luXCIgYnViYmxlcyB1cCBmcm9tIGFsbCBmb2N1cyBldmVudHMsIHNvIHVzZXMgYGlzVGV4dElucHV0YCB0byBvbmx5IHJlYWN0IHRvIFwia2V5Ym9hcmRcIiBmb2N1cyBldmVudHMuXG4gKlxuICogQ2hlY2tzIGZvciBleHRlcm5hbCBrZXlib2FyZCBhbmQgc2Nyb2xscyB0byB0aGUgZm9jdXNlZCBlbGVtZW50IGFmdGVyIGFueSBhbmltYXRpb25zLCBlLmcuIGtleWJvYXJkIG9wZW4uXG4gKlxuICovXG5jb25zdCBvbkZvY3VzSW4gPSAoZTogRXZlbnQpID0+IHtcblx0aWYgKCFlLnRhcmdldCB8fCAhaXNUZXh0SW5wdXQoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSByZXR1cm5cblx0dXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXMoKVxuXHRzY3JvbGxUb0VsZW1lbnRBZnRlckZvY3VzKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxufVxuXG4vKipcbiAqIEV2ZW50IGhhbmRsZXIgZm9yIFwiZm9jdXNvdXRcIiBldmVudC5cbiAqXG4gKiBcImZvY3Vzb3V0XCIgYnViYmxlcyB1cCBmcm9tIGFsbCBmb2N1cyBldmVudHMsIHNvIHVzZXMgYGlzVGV4dElucHV0YCB0byBvbmx5IHJlYWN0IHRvIFwia2V5Ym9hcmRcIiBmb2N1cyBldmVudHMuXG4gKlxuICogQ2xlYXJzIGFueSBwZW5kaW5nIHRpbWVvdXRzIGZyb20gXCJmb2N1c2luXCIgZXZlbnRzLlxuICpcbiAqL1xuY29uc3Qgb25Gb2N1c091dCA9IChlOiBFdmVudCkgPT4ge1xuXHRpZiAoIWUudGFyZ2V0IHx8ICFpc1RleHRJbnB1dChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHJldHVyblxuXHRpZiAodXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXNUaW1lb3V0KSB7XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh1cGRhdGVIYXNFeHRlcm5hbEtleWJvYXJkQWZ0ZXJGb2N1c1RpbWVvdXQpXG5cdFx0dXBkYXRlSGFzRXh0ZXJuYWxLZXlib2FyZEFmdGVyRm9jdXNUaW1lb3V0ID0gdW5kZWZpbmVkXG5cdH1cblx0aWYgKHNjcm9sbFRvRWxlbWVudEFmdGVyRm9jdXNUaW1lb3V0KSB7XG5cdFx0d2luZG93LmNsZWFyVGltZW91dChzY3JvbGxUb0VsZW1lbnRBZnRlckZvY3VzVGltZW91dClcblx0XHRzY3JvbGxUb0VsZW1lbnRBZnRlckZvY3VzVGltZW91dCA9IHVuZGVmaW5lZFxuXHR9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyB1c2luZyBhbiBleHRlcm5hbCBrZXlib2FyZCBieSBhcHBlbmRpbmcgYW4gYGlucHV0YCBhbmQgZm9jdXNpbmcgaXQuXG4gKlxuICogVGhpcyB3aWxsIHRyaWdnZXIgdGhlIGBvbkZvY3VzSW5gIGV2ZW50IGhhbmRsZXIsIHdoaWNoIHVwZGF0ZXMgdGhlIGBoYXNFeHRlcm5hbEtleWJvYXJkYCBnbG9iYWwuXG4gKi9cbmNvbnN0IGNoZWNrRm9yRXh0ZXJuYWxLZXlib2FyZCA9ICgpID0+IHtcblx0Y29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG5cdGVsLnR5cGUgPSAndGV4dCdcblx0ZWwuYXV0b2ZvY3VzID0gdHJ1ZVxuXHRlbC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKCkgPT4ge1xuXHRcdC8vIHJlbW92ZSB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGtleWJvYXJkIGhhcyBkaXNwbGF5ZWQsIHBsdXMgYSBzbWFsbCBidWZmZXJcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRlbC5ibHVyKClcblx0XHRcdGVsLnJlbW92ZSgpXG5cdFx0fSwgS0VZQk9BUkRfQU5JTUFUSU9OX01TICsgMTAwKVxuXHR9KVxuXHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kKGVsKVxufVxuXG5leHBvcnQgY29uc3Qgc2V0dXBNb2JpbGVFdmVudExpc3RlbmVycyA9ICgpID0+IHtcblx0aWYgKCFpc01vYmlsZURldmljZSgpIHx8ICF2aXN1YWxWaWV3cG9ydCkgcmV0dXJuXG5cblx0Ly8gc2V0IHZpZXdwb3J0IGhlaWdodCB2YXIgYXQgc2V0dXBcblx0c2V0VmlzdWFsVmlld3BvcnRIZWlnaHRWYXIoKVxuXG5cdC8vIGFkZCBldmVudCBsaXN0ZW5lcnNcblx0dmlzdWFsVmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuXHRcdHNldFZpc3VhbFZpZXdwb3J0SGVpZ2h0VmFyKClcblxuXHRcdC8vIGtlZXAgdGhlIGRvY3VtZW50IGVsZW1lbnQgc2Nyb2xsZWQgdG8gdGhlIHRvcCBpZiBhIFJlYWN0TW9kYWwgaXMgb3BlblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnUmVhY3RNb2RhbF9fQm9keS0tb3BlbicpKSB7XG5cdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXHRcdH1cblx0fSlcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvbkZvY3VzSW4pXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uRm9jdXNPdXQpXG5cblx0Ly8gY2hlY2sgZm9yIGV4dGVybmFsIGtleWJvYXJkIGF0IHNldHVwXG5cdGNoZWNrRm9yRXh0ZXJuYWxLZXlib2FyZCgpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSxVQUFVO0FBRXBDLE1BQU1DLHFCQUFxQixHQUFHLEdBQUc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1DLDZCQUE2QixHQUFJQyxPQUFvQixJQUFLO0VBQ3RFLElBQUlDLEtBQUssR0FBR0MsZ0JBQWdCLENBQUNGLE9BQU8sQ0FBQztFQUNyQyxNQUFNRyxtQkFBbUIsR0FBR0YsS0FBSyxDQUFDRyxRQUFRLEtBQUssVUFBVTtFQUN6RCxNQUFNQyxhQUFhLEdBQUcsc0JBQXNCO0VBRTVDLEtBQUssSUFBSUMsTUFBMEIsR0FBR04sT0FBTyxFQUFHTSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0MsYUFBYSxHQUFLO0lBQ2pGTixLQUFLLEdBQUdDLGdCQUFnQixDQUFDSSxNQUFNLENBQUM7SUFDaEMsSUFBSUgsbUJBQW1CLElBQUlGLEtBQUssQ0FBQ0csUUFBUSxLQUFLLFFBQVEsRUFBRTtJQUN4RCxJQUFJQyxhQUFhLENBQUNHLElBQUksQ0FBQ1AsS0FBSyxDQUFDUSxRQUFR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
@@ -1,8 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDomainIdentifierTypePluralString = exports.getDomainIdentifierTypeString = void 0;
4
- const shard_1 = require("./shard");
5
- const getDomainIdentifierTypeString = () => (0, shard_1.isPurdueShard)() ? 'Purdue career account alias or PUID' : 'Email Address';
6
- exports.getDomainIdentifierTypeString = getDomainIdentifierTypeString;
7
- const getDomainIdentifierTypePluralString = () => (0, shard_1.isPurdueShard)() ? 'Purdue career account aliases or PUIDs' : 'Email Addresses';
8
- exports.getDomainIdentifierTypePluralString = getDomainIdentifierTypePluralString;
1
+ import { isPurdueShard } from './shard';
2
+ export const getDomainIdentifierTypeString = () => isPurdueShard() ? 'Purdue career account alias or PUID' : 'Email Address';
3
+ export const getDomainIdentifierTypePluralString = () => isPurdueShard() ? 'Purdue career account aliases or PUIDs' : 'Email Addresses';
4
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1B1cmR1ZVNoYXJkIiwiZ2V0RG9tYWluSWRlbnRpZmllclR5cGVTdHJpbmciLCJnZXREb21haW5JZGVudGlmaWVyVHlwZVBsdXJhbFN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb21haW5JZGVudGlmaWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUHVyZHVlU2hhcmQgfSBmcm9tICcuL3NoYXJkJ1xuXG5leHBvcnQgY29uc3QgZ2V0RG9tYWluSWRlbnRpZmllclR5cGVTdHJpbmcgPSAoKSA9PlxuXHRpc1B1cmR1ZVNoYXJkKCkgPyAnUHVyZHVlIGNhcmVlciBhY2NvdW50IGFsaWFzIG9yIFBVSUQnIDogJ0VtYWlsIEFkZHJlc3MnXG5cbmV4cG9ydCBjb25zdCBnZXREb21haW5JZGVudGlmaWVyVHlwZVBsdXJhbFN0cmluZyA9ICgpID0+XG5cdGlzUHVyZHVlU2hhcmQoKSA/ICdQdXJkdWUgY2FyZWVyIGFjY291bnQgYWxpYXNlcyBvciBQVUlEcycgOiAnRW1haWwgQWRkcmVzc2VzJ1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQVEsU0FBUztBQUV2QyxPQUFPLE1BQU1DLDZCQUE2QixHQUFHQSxDQUFBLEtBQzVDRCxhQUFhLENBQUMsQ0FBQyxHQUFHLHFDQUFxQyxHQUFHLGVBQWU7QUFFMUUsT0FBTyxNQUFNRSxtQ0FBbUMsR0FBR0EsQ0FBQSxLQUNsREYsYUFBYSxDQUFDLENBQUMsR0FBRyx3Q0FBd0MsR0FBRyxpQkFBaUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,5 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRootModelName = void 0;
4
- const getRootModelName = (props) => props.modelName.split('.').slice(0, -1).join('.');
5
- exports.getRootModelName = getRootModelName;
1
+ export const getRootModelName = props => props.modelName.split('.').slice(0, -1).join('.');
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRSb290TW9kZWxOYW1lIiwicHJvcHMiLCJtb2RlbE5hbWUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lbnRpdHlVc2VyUm9sZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZ2V0Um9vdE1vZGVsTmFtZSA9IChwcm9wczogeyBtb2RlbE5hbWU6IHN0cmluZyB9KSA9PiBwcm9wcy5tb2RlbE5hbWUuc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkuam9pbignLicpXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsZ0JBQWdCLEdBQUlDLEtBQTRCLElBQUtBLEtBQUssQ0FBQ0MsU0FBUyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,20 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.constructErrorFromCaughtError = void 0;
4
- const constructErrorFromCaughtError = (caughtError, name, message) => {
5
- const error = new Error(message);
6
- error.name = name;
7
- if (caughtError instanceof Error) {
8
- error.message += `${message ? '.\n' : ''}${caughtError.name !== 'Error' ? `${caughtError.name}: ` : ''}${caughtError.message}`;
9
- error.stack = caughtError.stack;
10
- // TODO: use `new Error(message, { cause: caughtError })` once we upgrade TS to allow es2022
11
- }
12
- else if (typeof caughtError === 'string') {
13
- error.message += `${message ? '.\n' : ''}${caughtError}`;
14
- }
15
- else if (caughtError && typeof caughtError === 'object') {
16
- error.message += `${message ? '.\n' : ''}${JSON.stringify(caughtError)}`;
17
- }
18
- return error;
1
+ export const constructErrorFromCaughtError = (caughtError, name, message) => {
2
+ const error = new Error(message);
3
+ error.name = name;
4
+ if (caughtError instanceof Error) {
5
+ error.message += `${message ? '.\n' : ''}${caughtError.name !== 'Error' ? `${caughtError.name}: ` : ''}${caughtError.message}`;
6
+ error.stack = caughtError.stack;
7
+ // TODO: use `new Error(message, { cause: caughtError })` once we upgrade TS to allow es2022
8
+ } else if (typeof caughtError === 'string') {
9
+ error.message += `${message ? '.\n' : ''}${caughtError}`;
10
+ } else if (caughtError && typeof caughtError === 'object') {
11
+ error.message += `${message ? '.\n' : ''}${JSON.stringify(caughtError)}`;
12
+ }
13
+ return error;
19
14
  };
20
- exports.constructErrorFromCaughtError = constructErrorFromCaughtError;
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25zdHJ1Y3RFcnJvckZyb21DYXVnaHRFcnJvciIsImNhdWdodEVycm9yIiwibmFtZSIsIm1lc3NhZ2UiLCJlcnJvciIsIkVycm9yIiwic3RhY2siLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjb25zdHJ1Y3RFcnJvckZyb21DYXVnaHRFcnJvciA9IChjYXVnaHRFcnJvcjogdW5rbm93biwgbmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSA9PiB7XG5cdGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpXG5cdGVycm9yLm5hbWUgPSBuYW1lXG5cdGlmIChjYXVnaHRFcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0ZXJyb3IubWVzc2FnZSArPSBgJHttZXNzYWdlID8gJy5cXG4nIDogJyd9JHtjYXVnaHRFcnJvci5uYW1lICE9PSAnRXJyb3InID8gYCR7Y2F1Z2h0RXJyb3IubmFtZX06IGAgOiAnJ30ke1xuXHRcdFx0Y2F1Z2h0RXJyb3IubWVzc2FnZVxuXHRcdH1gXG5cdFx0ZXJyb3Iuc3RhY2sgPSBjYXVnaHRFcnJvci5zdGFja1xuXHRcdC8vIFRPRE86IHVzZSBgbmV3IEVycm9yKG1lc3NhZ2UsIHsgY2F1c2U6IGNhdWdodEVycm9yIH0pYCBvbmNlIHdlIHVwZ3JhZGUgVFMgdG8gYWxsb3cgZXMyMDIyXG5cdH0gZWxzZSBpZiAodHlwZW9mIGNhdWdodEVycm9yID09PSAnc3RyaW5nJykge1xuXHRcdGVycm9yLm1lc3NhZ2UgKz0gYCR7bWVzc2FnZSA/ICcuXFxuJyA6ICcnfSR7Y2F1Z2h0RXJyb3J9YFxuXHR9IGVsc2UgaWYgKGNhdWdodEVycm9yICYmIHR5cGVvZiBjYXVnaHRFcnJvciA9PT0gJ29iamVjdCcpIHtcblx0XHRlcnJvci5tZXNzYWdlICs9IGAke21lc3NhZ2UgPyAnLlxcbicgOiAnJ30ke0pTT04uc3RyaW5naWZ5KGNhdWdodEVycm9yKX1gXG5cdH1cblx0cmV0dXJuIGVycm9yXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsNkJBQTZCLEdBQUdBLENBQUNDLFdBQW9CLEVBQUVDLElBQVksRUFBRUMsT0FBZ0IsS0FBSztFQUN0RyxNQUFNQyxLQUFLLEdBQUcsSUFBSUMsS0FBSyxDQUFDRixPQUFPLENBQUM7RUFDaENDLEtBQUssQ0FBQ0YsSUFBSSxHQUFHQSxJQUFJO0VBQ2pCLElBQUlELFdBQVcsWUFBWUksS0FBSyxFQUFFO0lBQ2pDRCxLQUFLLENBQUNELE9BQU8sSUFBSSxHQUFHQSxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBR0YsV0FBVyxDQUFDQyxJQUFJLEtBQUssT0FBTyxHQUFHLEdBQUdELFdBQVcsQ0FBQ0MsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUNyR0QsV0FBVyxDQUFDRSxPQUFPLEVBQ2xCO0lBQ0ZDLEtBQUssQ0FBQ0UsS0FBSyxHQUFHTCxXQUFXLENBQUNLLEtBQUs7SUFDL0I7RUFDRCxDQUFDLE1BQU0sSUFBSSxPQUFPTCxXQUFXLEtBQUssUUFBUSxFQUFFO0lBQzNDRyxLQUFLLENBQUNELE9BQU8sSUFBSSxHQUFHQSxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBR0YsV0FBVyxFQUFFO0VBQ3pELENBQUMsTUFBTSxJQUFJQSxXQUFXLElBQUksT0FBT0EsV0FBVyxLQUFLLFFBQVEsRUFBRTtJQUMxREcsS0FBSyxDQUFDRCxPQUFPLElBQUksR0FBR0EsT0FBTyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUdJLElBQUksQ0FBQ0MsU0FBUyxDQUFDUCxXQUFXLENBQUMsRUFBRTtFQUN6RTtFQUNBLE9BQU9HLEtBQUs7QUFDYixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,36 +1,37 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trackCustomEvent = void 0;
4
- const tslib_1 = require("tslib");
5
- const react_ga4_1 = tslib_1.__importDefault(require("react-ga4"));
6
- const constants_1 = require("../constants");
1
+ import ga from 'react-ga4';
2
+ import { getAppConfig, getAppInsights, getUserId } from '../constants';
7
3
  /**
8
4
  * Send an event to Google Analytics and App Insights
9
5
  * @param event
10
6
  */
11
- const trackCustomEvent = (event) => {
12
- const { eventName, category, action, label } = event;
13
- const userId = (0, constants_1.getUserId)();
14
- const appConfig = (0, constants_1.getAppConfig)();
15
- if (appConfig.GOOGLE_ANALYTICS_TRACKING_ID) {
16
- react_ga4_1.default.event(eventName, {
17
- event_category: category,
18
- action: action,
19
- event_label: label,
20
- user_id: userId
21
- });
22
- }
23
- if (appConfig.APP_INSIGHTS_CONNECTION_STRING) {
24
- const appInsights = (0, constants_1.getAppInsights)();
25
- appInsights.trackEvent({
26
- name: eventName,
27
- properties: {
28
- category: category,
29
- action: action,
30
- label: label,
31
- userId: userId
32
- }
33
- });
34
- }
7
+ export const trackCustomEvent = event => {
8
+ const {
9
+ eventName,
10
+ category,
11
+ action,
12
+ label
13
+ } = event;
14
+ const userId = getUserId();
15
+ const appConfig = getAppConfig();
16
+ if (appConfig.GOOGLE_ANALYTICS_TRACKING_ID) {
17
+ ga.event(eventName, {
18
+ event_category: category,
19
+ action: action,
20
+ event_label: label,
21
+ user_id: userId
22
+ });
23
+ }
24
+ if (appConfig.APP_INSIGHTS_CONNECTION_STRING) {
25
+ const appInsights = getAppInsights();
26
+ appInsights.trackEvent({
27
+ name: eventName,
28
+ properties: {
29
+ category: category,
30
+ action: action,
31
+ label: label,
32
+ userId: userId
33
+ }
34
+ });
35
+ }
35
36
  };
36
- exports.trackCustomEvent = trackCustomEvent;
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnYSIsImdldEFwcENvbmZpZyIsImdldEFwcEluc2lnaHRzIiwiZ2V0VXNlcklkIiwidHJhY2tDdXN0b21FdmVudCIsImV2ZW50IiwiZXZlbnROYW1lIiwiY2F0ZWdvcnkiLCJhY3Rpb24iLCJsYWJlbCIsInVzZXJJZCIsImFwcENvbmZpZyIsIkdPT0dMRV9BTkFMWVRJQ1NfVFJBQ0tJTkdfSUQiLCJldmVudF9jYXRlZ29yeSIsImV2ZW50X2xhYmVsIiwidXNlcl9pZCIsIkFQUF9JTlNJR0hUU19DT05ORUNUSU9OX1NUUklORyIsImFwcEluc2lnaHRzIiwidHJhY2tFdmVudCIsIm5hbWUiLCJwcm9wZXJ0aWVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2V2ZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2EgZnJvbSAncmVhY3QtZ2E0J1xuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnLCBnZXRBcHBJbnNpZ2h0cywgZ2V0VXNlcklkIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi90eXBlcy9FdmVudCdcblxuLyoqXG4gKiBTZW5kIGFuIGV2ZW50IHRvIEdvb2dsZSBBbmFseXRpY3MgYW5kIEFwcCBJbnNpZ2h0c1xuICogQHBhcmFtIGV2ZW50XG4gKi9cbmV4cG9ydCBjb25zdCB0cmFja0N1c3RvbUV2ZW50ID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4ge1xuXHRjb25zdCB7IGV2ZW50TmFtZSwgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwgfSA9IGV2ZW50XG5cdGNvbnN0IHVzZXJJZCA9IGdldFVzZXJJZCgpXG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGlmIChhcHBDb25maWcuR09PR0xFX0FOQUxZVElDU19UUkFDS0lOR19JRCkge1xuXHRcdGdhLmV2ZW50KGV2ZW50TmFtZSwge1xuXHRcdFx0ZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuXHRcdFx0YWN0aW9uOiBhY3Rpb24sXG5cdFx0XHRldmVudF9sYWJlbDogbGFiZWwsXG5cdFx0XHR1c2VyX2lkOiB1c2VySWRcblx0XHR9KVxuXHR9XG5cdGlmIChhcHBDb25maWcuQVBQX0lOU0lHSFRTX0NPTk5FQ1RJT05fU1RSSU5HKSB7XG5cdFx0Y29uc3QgYXBwSW5zaWdodHMgPSBnZXRBcHBJbnNpZ2h0cygpXG5cdFx0YXBwSW5zaWdodHMudHJhY2tFdmVudCh7XG5cdFx0XHRuYW1lOiBldmVudE5hbWUsXG5cdFx0XHRwcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdGNhdGVnb3J5OiBjYXRlZ29yeSxcblx0XHRcdFx0YWN0aW9uOiBhY3Rpb24sXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0dXNlcklkOiB1c2VySWRcblx0XHRcdH1cblx0XHR9KVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEVBQUUsTUFBTSxXQUFXO0FBQzFCLFNBQVNDLFlBQVksRUFBRUMsY0FBYyxFQUFFQyxTQUFTLFFBQVEsY0FBYztBQUd0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUMsZ0JBQWdCLEdBQUlDLEtBQWtCLElBQUs7RUFDdkQsTUFBTTtJQUFFQyxTQUFTO0lBQUVDLFFBQVE7SUFBRUMsTUFBTTtJQUFFQztFQUFNLENBQUMsR0FBR0osS0FBSztFQUNwRCxNQUFNSyxNQUFNLEdBQUdQLFNBQVMsQ0FBQyxDQUFDO0VBQzFCLE1BQU1RLFNBQVMsR0FBR1YsWUFBWSxDQUFDLENBQUM7RUFDaEMsSUFBSVUsU0FBUyxDQUFDQyw0QkFBNEIsRUFBRTtJQUMzQ1osRUFBRSxDQUFDSyxLQUFLLENBQUNDLFNBQVMsRUFBRTtNQUNuQk8sY0FBYyxFQUFFTixRQUFRO01BQ3hCQyxNQUFNLEVBQUVBLE1BQU07TUFDZE0sV0FBVyxFQUFFTCxLQUFLO01BQ2xCTSxPQUFPLEVBQUVMO0lBQ1YsQ0FBQyxDQUFDO0VBQ0g7RUFDQSxJQUFJQyxTQUFTLENBQUNLLDhCQUE4QixFQUFFO0lBQzdDLE1BQU1DLFdBQVcsR0FBR2YsY0FBYyxDQUFDLENBQUM7SUFDcENlLFdBQVcsQ0FBQ0MsVUFBVSxDQUFDO01BQ3RCQyxJQUFJLEVBQUViLFNBQVM7TUFDZmMsVUFBVSxFQUFFO1FBQ1hiLFFBQVEsRUFBRUEsUUFBUTtRQUNsQkMsTUFBTSxFQUFFQSxNQUFNO1FBQ2RDLEtBQUssRUFBRUEsS0FBSztRQUNaQyxNQUFNLEVBQUVBO01BQ1Q7SUFDRCxDQUFDLENBQUM7RUFDSDtBQUNELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,28 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasGradePushEnabled = exports.hasAnyLtiExternalGroup = exports.hasAnyUniTimeExternalGroup = void 0;
4
- const externalProviderType_1 = require("../constants/externalProviderType");
5
- const hasAnyUniTimeExternalGroup = (externalGroups, externalProviders) => {
6
- const uniTimeExternalProvider = externalProviders.find(ep => ep.typename === externalProviderType_1.EXTERNAL_PROVIDER_TYPE.UNITIME);
7
- if (!uniTimeExternalProvider) {
8
- return false;
9
- }
10
- return externalGroups.some(eg => eg.externalProviderId === uniTimeExternalProvider.id);
1
+ import { EXTERNAL_PROVIDER_TYPE } from '../constants/externalProviderType';
2
+ export const hasAnyUniTimeExternalGroup = (externalGroups, externalProviders) => {
3
+ const uniTimeExternalProvider = externalProviders.find(ep => ep.typename === EXTERNAL_PROVIDER_TYPE.UNITIME);
4
+ if (!uniTimeExternalProvider) {
5
+ return false;
6
+ }
7
+ return externalGroups.some(eg => eg.externalProviderId === uniTimeExternalProvider.id);
11
8
  };
12
- exports.hasAnyUniTimeExternalGroup = hasAnyUniTimeExternalGroup;
13
- const hasAnyLtiExternalGroup = (externalGroups, externalProviders) => {
14
- const ltiExternalProvider = externalProviders.find(ep => ep.typename === externalProviderType_1.EXTERNAL_PROVIDER_TYPE.LTI);
15
- if (!ltiExternalProvider) {
16
- return false;
17
- }
18
- return externalGroups.some(eg => eg.externalProviderId === ltiExternalProvider.id);
9
+ export const hasAnyLtiExternalGroup = (externalGroups, externalProviders) => {
10
+ const ltiExternalProvider = externalProviders.find(ep => ep.typename === EXTERNAL_PROVIDER_TYPE.LTI);
11
+ if (!ltiExternalProvider) {
12
+ return false;
13
+ }
14
+ return externalGroups.some(eg => eg.externalProviderId === ltiExternalProvider.id);
19
15
  };
20
- exports.hasAnyLtiExternalGroup = hasAnyLtiExternalGroup;
21
- const hasGradePushEnabled = (externalGroups, externalProviders) => {
22
- const ltiExternalProvider = externalProviders.find(ep => ep.gradePushEnabled);
23
- if (!ltiExternalProvider) {
24
- return false;
25
- }
26
- return externalGroups.some(eg => eg.externalProviderId === ltiExternalProvider.id && !!eg.gradesUrl);
16
+ export const hasGradePushEnabled = (externalGroups, externalProviders) => {
17
+ const ltiExternalProvider = externalProviders.find(ep => ep.gradePushEnabled);
18
+ if (!ltiExternalProvider) {
19
+ return false;
20
+ }
21
+ return externalGroups.some(eg => eg.externalProviderId === ltiExternalProvider.id && !!eg.gradesUrl);
27
22
  };
28
- exports.hasGradePushEnabled = hasGradePushEnabled;
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFWFRFUk5BTF9QUk9WSURFUl9UWVBFIiwiaGFzQW55VW5pVGltZUV4dGVybmFsR3JvdXAiLCJleHRlcm5hbEdyb3VwcyIsImV4dGVybmFsUHJvdmlkZXJzIiwidW5pVGltZUV4dGVybmFsUHJvdmlkZXIiLCJmaW5kIiwiZXAiLCJ0eXBlbmFtZSIsIlVOSVRJTUUiLCJzb21lIiwiZWciLCJleHRlcm5hbFByb3ZpZGVySWQiLCJpZCIsImhhc0FueUx0aUV4dGVybmFsR3JvdXAiLCJsdGlFeHRlcm5hbFByb3ZpZGVyIiwiTFRJIiwiaGFzR3JhZGVQdXNoRW5hYmxlZCIsImdyYWRlUHVzaEVuYWJsZWQiLCJncmFkZXNVcmwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZXh0ZXJuYWxHcm91cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFWFRFUk5BTF9QUk9WSURFUl9UWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzL2V4dGVybmFsUHJvdmlkZXJUeXBlJ1xuaW1wb3J0IHsgRXh0ZXJuYWxHcm91cCB9IGZyb20gJy4uL3R5cGVzL0V4dGVybmFsR3JvdXAnXG5pbXBvcnQgeyBFeHRlcm5hbFByb3ZpZGVyIH0gZnJvbSAnLi4vdHlwZXMvRXh0ZXJuYWxQcm92aWRlcidcblxuZXhwb3J0IGNvbnN0IGhhc0FueVVuaVRpbWVFeHRlcm5hbEdyb3VwID0gKGV4dGVybmFsR3JvdXBzOiBFeHRlcm5hbEdyb3VwW10sIGV4dGVybmFsUHJvdmlkZXJzOiBFeHRlcm5hbFByb3ZpZGVyW10pID0+IHtcblx0Y29uc3QgdW5pVGltZUV4dGVybmFsUHJvdmlkZXIgPSBleHRlcm5hbFByb3ZpZGVycy5maW5kKGVwID0+IGVwLnR5cGVuYW1lID09PSBFWFRFUk5BTF9QUk9WSURFUl9UWVBFLlVOSVRJTUUpXG5cblx0aWYgKCF1bmlUaW1lRXh0ZXJuYWxQcm92aWRlcikge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0cmV0dXJuIGV4dGVybmFsR3JvdXBzLnNvbWUoZWcgPT4gZWcuZXh0ZXJuYWxQcm92aWRlcklkID09PSB1bmlUaW1lRXh0ZXJuYWxQcm92aWRlci5pZClcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0FueUx0aUV4dGVybmFsR3JvdXAgPSAoZXh0ZXJuYWxHcm91cHM6IEV4dGVybmFsR3JvdXBbXSwgZXh0ZXJuYWxQcm92aWRlcnM6IEV4dGVybmFsUHJvdmlkZXJbXSkgPT4ge1xuXHRjb25zdCBsdGlFeHRlcm5hbFByb3ZpZGVyID0gZXh0ZXJuYWxQcm92aWRlcnMuZmluZChlcCA9PiBlcC50eXBlbmFtZSA9PT0gRVhURVJOQUxfUFJPVklERVJfVFlQRS5MVEkpXG5cblx0aWYgKCFsdGlFeHRlcm5hbFByb3ZpZGVyKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHRyZXR1cm4gZXh0ZXJuYWxHcm91cHMuc29tZShlZyA9PiBlZy5leHRlcm5hbFByb3ZpZGVySWQgPT09IGx0aUV4dGVybmFsUHJvdmlkZXIuaWQpXG59XG5cbmV4cG9ydCBjb25zdCBoYXNHcmFkZVB1c2hFbmFibGVkID0gKGV4dGVybmFsR3JvdXBzOiBFeHRlcm5hbEdyb3VwW10sIGV4dGVybmFsUHJvdmlkZXJzOiBFeHRlcm5hbFByb3ZpZGVyW10pID0+IHtcblx0Y29uc3QgbHRpRXh0ZXJuYWxQcm92aWRlciA9IGV4dGVybmFsUHJvdmlkZXJzLmZpbmQoZXAgPT4gZXAuZ3JhZGVQdXNoRW5hYmxlZClcblxuXHRpZiAoIWx0aUV4dGVybmFsUHJvdmlkZXIpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdHJldHVybiBleHRlcm5hbEdyb3Vwcy5zb21lKGVnID0+IGVnLmV4dGVybmFsUHJvdmlkZXJJZCA9PT0gbHRpRXh0ZXJuYWxQcm92aWRlci5pZCAmJiAhIWVnLmdyYWRlc1VybClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0Esc0JBQXNCLFFBQVEsbUNBQW1DO0FBSTFFLE9BQU8sTUFBTUMsMEJBQTBCLEdBQUdBLENBQUNDLGNBQStCLEVBQUVDLGlCQUFxQyxLQUFLO0VBQ3JILE1BQU1DLHVCQUF1QixHQUFHRCxpQkFBaUIsQ0FBQ0UsSUFBSSxDQUFDQyxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsUUFBUSxLQUFLUCxzQkFBc0IsQ0FBQ1EsT0FBTyxDQUFDO0VBRTVHLElBQUksQ0FBQ0osdUJBQXVCLEVBQUU7SUFDN0IsT0FBTyxLQUFLO0VBQ2I7RUFFQSxPQUFPRixjQUFjLENBQUNPLElBQUksQ0FBQ0MsRUFBRSxJQUFJQSxFQUFFLENBQUNDLGtCQUFrQixLQUFLUCx1QkFBdUIsQ0FBQ1EsRUFBRSxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxPQUFPLE1BQU1DLHNCQUFzQixHQUFHQSxDQUFDWCxjQUErQixFQUFFQyxpQkFBcUMsS0FBSztFQUNqSCxNQUFNVyxtQkFBbUIsR0FBR1gsaUJBQWlCLENBQUNFLElBQUksQ0FBQ0MsRUFBRSxJQUFJQSxFQUFFLENBQUNDLFFBQVEsS0FBS1Asc0JBQXNCLENBQUNlLEdBQUcsQ0FBQztFQUVwRyxJQUFJLENBQUNELG1CQUFtQixFQUFFO0lBQ3pCLE9BQU8sS0FBSztFQUNiO0VBRUEsT0FBT1osY0FBYyxDQUFDTyxJQUFJLENBQUNDLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxrQkFBa0IsS0FBS0csbUJBQW1CLENBQUNGLEVBQUUsQ0FBQztBQUNuRixDQUFDO0FBRUQsT0FBTyxNQUFNSSxtQkFBbUIsR0FBR0EsQ0FBQ2QsY0FBK0IsRUFBRUMsaUJBQXFDLEtBQUs7RUFDOUcsTUFBTVcsbUJBQW1CLEdBQUdYLGlCQUFpQixDQUFDRSxJQUFJLENBQUNDLEVBQUUsSUFBSUEsRUFBRSxDQUFDVyxnQkFBZ0IsQ0FBQztFQUU3RSxJQUFJLENBQUNILG1CQUFtQixFQUFFO0lBQ3pCLE9BQU8sS0FBSztFQUNiO0VBRUEsT0FBT1osY0FBYyxDQUFDTyxJQUFJLENBQUNDLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxrQkFBa0IsS0FBS0csbUJBQW1CLENBQUNGLEVBQUUsSUFBSSxDQUFDLENBQUNGLEVBQUUsQ0FBQ1EsU0FBUyxDQUFDO0FBQ3JHLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shouldDisplayCreateNonLtiGroupAlert = void 0;
4
- const externalProviderType_1 = require("../constants/externalProviderType");
5
- const shouldDisplayCreateNonLtiGroupAlert = (externalProviders) => {
6
- return externalProviders.some(ep => ep.typename === externalProviderType_1.EXTERNAL_PROVIDER_TYPE.LTI && ep.shouldDisplayCreateNonLtiGroupAlert);
1
+ import { EXTERNAL_PROVIDER_TYPE } from '../constants/externalProviderType';
2
+ export const shouldDisplayCreateNonLtiGroupAlert = externalProviders => {
3
+ return externalProviders.some(ep => ep.typename === EXTERNAL_PROVIDER_TYPE.LTI && ep.shouldDisplayCreateNonLtiGroupAlert);
7
4
  };
8
- exports.shouldDisplayCreateNonLtiGroupAlert = shouldDisplayCreateNonLtiGroupAlert;
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFWFRFUk5BTF9QUk9WSURFUl9UWVBFIiwic2hvdWxkRGlzcGxheUNyZWF0ZU5vbkx0aUdyb3VwQWxlcnQiLCJleHRlcm5hbFByb3ZpZGVycyIsInNvbWUiLCJlcCIsInR5cGVuYW1lIiwiTFRJIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2V4dGVybmFsUHJvdmlkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVYVEVSTkFMX1BST1ZJREVSX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMvZXh0ZXJuYWxQcm92aWRlclR5cGUnXG5pbXBvcnQgeyBFeHRlcm5hbFByb3ZpZGVyIH0gZnJvbSAnLi4vdHlwZXMvRXh0ZXJuYWxQcm92aWRlcidcblxuZXhwb3J0IGNvbnN0IHNob3VsZERpc3BsYXlDcmVhdGVOb25MdGlHcm91cEFsZXJ0ID0gKGV4dGVybmFsUHJvdmlkZXJzOiBFeHRlcm5hbFByb3ZpZGVyW10pID0+IHtcblx0cmV0dXJuIGV4dGVybmFsUHJvdmlkZXJzLnNvbWUoXG5cdFx0ZXAgPT4gZXAudHlwZW5hbWUgPT09IEVYVEVSTkFMX1BST1ZJREVSX1RZUEUuTFRJICYmIGVwLnNob3VsZERpc3BsYXlDcmVhdGVOb25MdGlHcm91cEFsZXJ0XG5cdClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0Esc0JBQXNCLFFBQVEsbUNBQW1DO0FBRzFFLE9BQU8sTUFBTUMsbUNBQW1DLEdBQUlDLGlCQUFxQyxJQUFLO0VBQzdGLE9BQU9BLGlCQUFpQixDQUFDQyxJQUFJLENBQzVCQyxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsUUFBUSxLQUFLTCxzQkFBc0IsQ0FBQ00sR0FBRyxJQUFJRixFQUFFLENBQUNILG1DQUN4RCxDQUFDO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,6 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.filterByCurrentAndFuture = void 0;
4
- const date_1 = require("../utils/date");
5
- const filterByCurrentAndFuture = (externalTerms, nowUtc = (0, date_1.getServerNowUtc)().toISOString()) => externalTerms.filter(et => (0, date_1.isNowBeforeDate)(et.endDate, nowUtc));
6
- exports.filterByCurrentAndFuture = filterByCurrentAndFuture;
1
+ import { getServerNowUtc, isNowBeforeDate } from '../utils/date';
2
+ export const filterByCurrentAndFuture = function (externalTerms) {
3
+ let nowUtc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getServerNowUtc().toISOString();
4
+ return externalTerms.filter(et => isNowBeforeDate(et.endDate, nowUtc));
5
+ };
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZXJ2ZXJOb3dVdGMiLCJpc05vd0JlZm9yZURhdGUiLCJmaWx0ZXJCeUN1cnJlbnRBbmRGdXR1cmUiLCJleHRlcm5hbFRlcm1zIiwibm93VXRjIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwidG9JU09TdHJpbmciLCJmaWx0ZXIiLCJldCIsImVuZERhdGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZXh0ZXJuYWxUZXJtcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHRlcm5hbFRlcm0gfSBmcm9tICcuLi90eXBlcy9FeHRlcm5hbFRlcm0nXG5pbXBvcnQgeyBnZXRTZXJ2ZXJOb3dVdGMsIGlzTm93QmVmb3JlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeUN1cnJlbnRBbmRGdXR1cmUgPSAoZXh0ZXJuYWxUZXJtczogRXh0ZXJuYWxUZXJtW10sIG5vd1V0YyA9IGdldFNlcnZlck5vd1V0YygpLnRvSVNPU3RyaW5nKCkpID0+XG5cdGV4dGVybmFsVGVybXMuZmlsdGVyKGV0ID0+IGlzTm93QmVmb3JlRGF0ZShldC5lbmREYXRlLCBub3dVdGMpKVxuIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxlQUFlLEVBQUVDLGVBQWUsUUFBUSxlQUFlO0FBRWhFLE9BQU8sTUFBTUMsd0JBQXdCLEdBQUcsU0FBQUEsQ0FBQ0MsYUFBNkI7RUFBQSxJQUFFQyxNQUFNLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHTCxlQUFlLENBQUMsQ0FBQyxDQUFDUSxXQUFXLENBQUMsQ0FBQztFQUFBLE9BQy9HTCxhQUFhLENBQUNNLE1BQU0sQ0FBQ0MsRUFBRSxJQUFJVCxlQUFlLENBQUNTLEVBQUUsQ0FBQ0MsT0FBTyxFQUFFUCxNQUFNLENBQUMsQ0FBQztBQUFBIiwiaWdub3JlTGlzdCI6W119