studiokit-scaffolding-js 7.0.12 → 7.1.0

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 (390) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/lib/components/ActionList.d.ts +2 -2
  4. package/lib/components/ActionList.js +166 -87
  5. package/lib/components/AlertDialog.d.ts +3 -3
  6. package/lib/components/AlertDialog.js +133 -18
  7. package/lib/components/AlertWithIcon.js +93 -52
  8. package/lib/components/ConnectedModal.d.ts +1 -2
  9. package/lib/components/ConnectedModal.js +43 -37
  10. package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
  11. package/lib/components/Dropdowns/GroupsDropdown.js +69 -82
  12. package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
  13. package/lib/components/Dropdowns/ManagedNavDropdown.js +99 -111
  14. package/lib/components/Dropdowns/UserDropdown.js +109 -70
  15. package/lib/components/Dropdowns/index.js +27 -11
  16. package/lib/components/EntityOwnerList.d.ts +3 -3
  17. package/lib/components/EntityOwnerList.js +52 -60
  18. package/lib/components/Error.js +107 -27
  19. package/lib/components/ErrorBoundary.js +133 -94
  20. package/lib/components/ErrorMessage.d.ts +2 -2
  21. package/lib/components/ErrorMessage.js +44 -14
  22. package/lib/components/Forms/DateField.d.ts +2 -2
  23. package/lib/components/Forms/DateField.js +63 -95
  24. package/lib/components/Forms/TimeField.d.ts +2 -2
  25. package/lib/components/Forms/TimeField.js +84 -108
  26. package/lib/components/Forms/index.js +27 -13
  27. package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
  28. package/lib/components/Groups/CreateEditCopySaveButtons.js +102 -14
  29. package/lib/components/Groups/ExternalGroups/Attach.d.ts +6 -7
  30. package/lib/components/Groups/ExternalGroups/Attach.js +213 -188
  31. package/lib/components/Groups/ExternalGroups/Table.js +183 -76
  32. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +5 -1
  33. package/lib/components/Groups/RosterSyncInfo.js +140 -49
  34. package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
  35. package/lib/components/HOC/AccessibleAppComponent.js +101 -124
  36. package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
  37. package/lib/components/HOC/ActivityRequiredComponent.js +93 -107
  38. package/lib/components/HOC/AsyncComponent.d.ts +9 -9
  39. package/lib/components/HOC/AsyncComponent.js +53 -129
  40. package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
  41. package/lib/components/HOC/AuthenticatedComponent.js +59 -96
  42. package/lib/components/HOC/CollectionComponent.d.ts +12 -12
  43. package/lib/components/HOC/CollectionComponent.js +171 -171
  44. package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
  45. package/lib/components/HOC/CollectionFirstItemComponent.js +52 -94
  46. package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
  47. package/lib/components/HOC/CollectionItemComponent.js +169 -168
  48. package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
  49. package/lib/components/HOC/ConnectedModalComponent.js +110 -140
  50. package/lib/components/HOC/DataDependentComponent.d.ts +3 -55
  51. package/lib/components/HOC/DataDependentComponent.js +30 -79
  52. package/lib/components/HOC/EntityComponent.d.ts +13 -13
  53. package/lib/components/HOC/EntityComponent.js +74 -112
  54. package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
  55. package/lib/components/HOC/FullscreenModalComponent.js +165 -185
  56. package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
  57. package/lib/components/HOC/GroupActivityRequiredComponent.js +48 -47
  58. package/lib/components/HOC/GuidComponent.d.ts +1 -1
  59. package/lib/components/HOC/GuidComponent.js +29 -68
  60. package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +28 -29
  61. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +42 -65
  62. package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
  63. package/lib/components/HOC/ModelErrorRedirectComponent.js +51 -94
  64. package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
  65. package/lib/components/HOC/SearchPersistorComponent.js +243 -216
  66. package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
  67. package/lib/components/HOC/UnauthenticatedComponent.js +37 -82
  68. package/lib/components/HOC/UserComponent.d.ts +1 -1
  69. package/lib/components/HOC/UserComponent.js +12 -11
  70. package/lib/components/Icons/IconAlphaList.js +34 -20
  71. package/lib/components/Icons/IconExternalUser.js +34 -20
  72. package/lib/components/Icons/IconImpersonation.js +34 -20
  73. package/lib/components/Icons/IconStopImpersonating.js +34 -20
  74. package/lib/components/Icons/IconTable.js +35 -21
  75. package/lib/components/Icons/IconTableDeleteCol.js +34 -20
  76. package/lib/components/Icons/IconTableDeleteRow.js +34 -20
  77. package/lib/components/Icons/IconTableInsertCol.js +34 -20
  78. package/lib/components/Icons/IconTableInsertRow.js +34 -20
  79. package/lib/components/Impersonation/Button.d.ts +2 -2
  80. package/lib/components/Impersonation/Button.js +76 -56
  81. package/lib/components/Impersonation/Link.d.ts +2 -2
  82. package/lib/components/Impersonation/Link.js +76 -53
  83. package/lib/components/Impersonation/UserDetail.css +22 -22
  84. package/lib/components/Impersonation/UserDetail.d.ts +2 -2
  85. package/lib/components/Impersonation/UserDetail.js +66 -17
  86. package/lib/components/Loading.js +27 -21
  87. package/lib/components/LockDownBrowser/Check.js +194 -107
  88. package/lib/components/LockDownBrowser/ExitButton.js +27 -14
  89. package/lib/components/LockDownBrowser/Launch.js +70 -85
  90. package/lib/components/Lti/Confirm.js +152 -33
  91. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +4 -2
  92. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +170 -78
  93. package/lib/components/Lti/Launch.js +105 -49
  94. package/lib/components/Lti/LaunchGroup.js +85 -39
  95. package/lib/components/ManageTable.d.ts +1 -2
  96. package/lib/components/ManageTable.js +309 -104
  97. package/lib/components/ManageTableNoDataComponent.js +42 -22
  98. package/lib/components/NewVersionAlert.d.ts +2 -2
  99. package/lib/components/NewVersionAlert.js +82 -91
  100. package/lib/components/NotFound.js +87 -28
  101. package/lib/components/Notifications.d.ts +4 -4
  102. package/lib/components/Notifications.js +187 -169
  103. package/lib/components/PaginationNextButton.js +33 -21
  104. package/lib/components/PaginationPreviousButton.js +33 -21
  105. package/lib/components/Quill/CustomToolbar.d.ts +2 -2
  106. package/lib/components/Quill/CustomToolbar.js +432 -257
  107. package/lib/components/Quill/Formats/Image.d.ts +10 -25
  108. package/lib/components/Quill/Formats/Image.js +80 -86
  109. package/lib/components/Quill/Formats/List.d.ts +6 -3
  110. package/lib/components/Quill/Formats/List.js +52 -74
  111. package/lib/components/Quill/Formats/Video.d.ts +2 -1
  112. package/lib/components/Quill/Formats/Video.js +31 -45
  113. package/lib/components/Quill/ImageDropModule.d.ts +1 -1
  114. package/lib/components/Quill/ImageDropModule.js +149 -122
  115. package/lib/components/Quill/ImageWarning.d.ts +2 -2
  116. package/lib/components/Quill/ImageWarning.js +45 -32
  117. package/lib/components/Quill/ImageWithAltTextModal.d.ts +0 -1
  118. package/lib/components/Quill/ImageWithAltTextModal.js +425 -141
  119. package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
  120. package/lib/components/Quill/Specs/CustomImageSpec.js +43 -51
  121. package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
  122. package/lib/components/Quill/Specs/CustomVideoSpec.js +35 -44
  123. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +2 -1
  124. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +105 -121
  125. package/lib/components/Quill/TableModule/Blots/TableBlot.js +53 -66
  126. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +54 -67
  127. package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
  128. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +225 -241
  129. package/lib/components/Quill/TableModule/Blots/TableContainer.js +82 -99
  130. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +76 -87
  131. package/lib/components/Quill/TableModule/constants.js +45 -41
  132. package/lib/components/Quill/TableModule/index.css +171 -171
  133. package/lib/components/Quill/TableModule/index.d.ts +14 -5
  134. package/lib/components/Quill/TableModule/index.js +373 -313
  135. package/lib/components/Quill/TableModule/utils.js +45 -45
  136. package/lib/components/Quill/accessibilityFix.d.ts +0 -1
  137. package/lib/components/Quill/accessibilityFix.js +235 -251
  138. package/lib/components/Quill/index.js +36 -32
  139. package/lib/components/RefreshIndicator/Bordered.js +48 -32
  140. package/lib/components/RefreshIndicator/Inline.js +48 -33
  141. package/lib/components/RefreshIndicator/index.d.ts +2 -2
  142. package/lib/components/RefreshIndicator/index.js +263 -113
  143. package/lib/components/SearchControls.js +216 -31
  144. package/lib/components/SentryRoute.js +10 -23
  145. package/lib/components/Tables/RoleFilter.d.ts +3 -4
  146. package/lib/components/Tables/RoleFilter.js +71 -46
  147. package/lib/components/Tables/TextFilter.d.ts +2 -3
  148. package/lib/components/Tables/TextFilter.js +62 -20
  149. package/lib/components/UserRoles/Add.d.ts +3 -3
  150. package/lib/components/UserRoles/Add.js +199 -161
  151. package/lib/components/UserRoles/Context.js +11 -9
  152. package/lib/components/UserRoles/RoleCell.js +180 -100
  153. package/lib/components/UserRoles/Select.js +157 -51
  154. package/lib/components/UserRoles/Table.js +221 -102
  155. package/lib/components/UserRoles/index.d.ts +6 -6
  156. package/lib/components/UserRoles/index.js +537 -466
  157. package/lib/config/eslint/index.d.ts +2 -0
  158. package/lib/config/eslint/index.js +36 -0
  159. package/lib/config/eslint/lib/order.d.ts +3 -0
  160. package/lib/config/eslint/lib/order.js +30 -0
  161. package/lib/config/eslint/lib/prettier.d.ts +3 -0
  162. package/lib/config/eslint/lib/prettier.js +23 -0
  163. package/lib/config/eslint/lib/typescript.d.ts +2 -0
  164. package/lib/config/eslint/lib/typescript.js +98 -0
  165. package/lib/config/eslint/react.d.ts +2 -0
  166. package/lib/config/eslint/react.js +30 -0
  167. package/lib/constants/baseActivity.js +30 -26
  168. package/lib/constants/baseRole.js +14 -10
  169. package/lib/constants/configuration.d.ts +1 -1
  170. package/lib/constants/configuration.js +43 -39
  171. package/lib/constants/externalProviderType.js +10 -6
  172. package/lib/constants/fetchErrorData.js +15 -11
  173. package/lib/constants/index.js +137 -23
  174. package/lib/constants/lockDownBrowser.js +28 -24
  175. package/lib/constants/mockData.d.ts +4 -6
  176. package/lib/constants/mockData.js +385 -326
  177. package/lib/constants/modelStatus.js +15 -11
  178. package/lib/constants/notificationType.js +12 -8
  179. package/lib/constants/operatingSystem.js +12 -8
  180. package/lib/constants/shard.js +11 -7
  181. package/lib/constants/table.js +21 -21
  182. package/lib/constants/tier.js +12 -8
  183. package/lib/constants/userRole.d.ts +1 -2
  184. package/lib/constants/userRole.js +15 -17
  185. package/lib/css/base/_base.css +98 -98
  186. package/lib/css/base/_typography.css +130 -130
  187. package/lib/css/components/_alert.css +86 -86
  188. package/lib/css/components/_bootstrap-grid.css +28 -28
  189. package/lib/css/components/_buttons.css +397 -397
  190. package/lib/css/components/_forms.css +101 -101
  191. package/lib/css/components/_menu.css +56 -56
  192. package/lib/css/components/_modals.css +46 -46
  193. package/lib/css/components/_quill.css +315 -315
  194. package/lib/css/components/_tables.css +497 -497
  195. package/lib/css/components/_tags.css +12 -12
  196. package/lib/css/index-with-variables.css +15 -15
  197. package/lib/css/index.css +14 -14
  198. package/lib/css/utils/_border.css +463 -463
  199. package/lib/css/utils/_color.css +317 -317
  200. package/lib/css/utils/_display.css +305 -312
  201. package/lib/css/utils/_general.css +48 -48
  202. package/lib/css/utils/_icon.css +16 -16
  203. package/lib/css/utils/_text.css +25 -24
  204. package/lib/css/utils/_width.css +60 -60
  205. package/lib/css/variables.css +84 -84
  206. package/lib/endpointMappings.js +197 -193
  207. package/lib/hooks/useCollection.js +83 -65
  208. package/lib/hooks/useCollectionConfiguration.d.ts +0 -1
  209. package/lib/hooks/useCollectionConfiguration.js +185 -88
  210. package/lib/hooks/useCollectionItem.js +155 -58
  211. package/lib/hooks/useEventCalback.d.ts +14 -0
  212. package/lib/hooks/useEventCalback.js +51 -0
  213. package/lib/hooks/useGuid.js +21 -10
  214. package/lib/hooks/usePrevious.d.ts +24 -1
  215. package/lib/hooks/usePrevious.js +84 -14
  216. package/lib/index.js +156 -36
  217. package/lib/redux/actionCreator.d.ts +6 -6
  218. package/lib/redux/actionCreator.js +51 -40
  219. package/lib/redux/actions/AuthAction.js +44 -31
  220. package/lib/redux/actions/ModalAction.d.ts +1 -1
  221. package/lib/redux/actions/ModalAction.js +10 -6
  222. package/lib/redux/actions/ModelAction.d.ts +1 -1
  223. package/lib/redux/actions/ModelAction.js +77 -49
  224. package/lib/redux/actions/NotificationAction.js +10 -6
  225. package/lib/redux/actions/SearchAction.js +9 -5
  226. package/lib/redux/actions/index.js +60 -16
  227. package/lib/redux/configureReducers.d.ts +2 -5
  228. package/lib/redux/configureReducers.js +67 -78
  229. package/lib/redux/configureStore.d.ts +2 -2
  230. package/lib/redux/configureStore.js +83 -115
  231. package/lib/redux/helpers.js +7 -2
  232. package/lib/redux/reducers/authReducer.js +52 -46
  233. package/lib/redux/reducers/index.js +41 -15
  234. package/lib/redux/reducers/modalsReducer.js +49 -52
  235. package/lib/redux/reducers/modelsReducer.d.ts +2 -2
  236. package/lib/redux/reducers/modelsReducer.js +183 -182
  237. package/lib/redux/reducers/notificationsReducer.js +26 -21
  238. package/lib/redux/reducers/searchReducer.js +26 -20
  239. package/lib/redux/sagas/appInsightsSaga.js +24 -62
  240. package/lib/redux/sagas/authSaga.js +287 -414
  241. package/lib/redux/sagas/caliperSaga.js +169 -263
  242. package/lib/redux/sagas/clockOffsetSaga.js +36 -77
  243. package/lib/redux/sagas/configurationSaga.js +13 -46
  244. package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +0 -1
  245. package/lib/redux/sagas/downtimeApiErrorSaga.js +23 -64
  246. package/lib/redux/sagas/errorSaga.d.ts +0 -1
  247. package/lib/redux/sagas/errorSaga.js +29 -63
  248. package/lib/redux/sagas/googleAnalyticsSaga.js +29 -69
  249. package/lib/redux/sagas/identityProviderSaga.js +24 -69
  250. package/lib/redux/sagas/initialDataLoadSaga.js +38 -29
  251. package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +0 -1
  252. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +32 -81
  253. package/lib/redux/sagas/modelFetchSaga.js +379 -459
  254. package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
  255. package/lib/redux/sagas/noStoreSaga.js +68 -101
  256. package/lib/redux/sagas/postLoginDataSaga.js +47 -79
  257. package/lib/redux/sagas/postLoginRedirectSaga.js +30 -71
  258. package/lib/redux/sagas/rootSaga.js +85 -137
  259. package/lib/redux/sagas/sentrySaga.js +29 -85
  260. package/lib/redux/sagas/userIdSaga.js +18 -54
  261. package/lib/services/codeProviderService.js +25 -29
  262. package/lib/services/dateService.js +14 -12
  263. package/lib/services/documentService.js +18 -13
  264. package/lib/services/fetchService.js +134 -168
  265. package/lib/services/persistenceService.d.ts +4 -4
  266. package/lib/services/persistenceService.js +45 -43
  267. package/lib/services/ticketProviderService.js +29 -33
  268. package/lib/services/tokenPersistenceService.js +13 -9
  269. package/lib/services/windowService.js +21 -17
  270. package/lib/startup.d.ts +1 -1
  271. package/lib/startup.js +132 -135
  272. package/lib/types/AppConfiguration.js +5 -1
  273. package/lib/types/Artifact.js +11 -7
  274. package/lib/types/BaseReduxState.js +5 -1
  275. package/lib/types/Client.js +5 -1
  276. package/lib/types/Collection.d.ts +3 -3
  277. package/lib/types/Collection.js +5 -1
  278. package/lib/types/Configuration.js +5 -1
  279. package/lib/types/DeepLinkingResponseRequest.js +5 -1
  280. package/lib/types/DeletableModel.js +5 -1
  281. package/lib/types/Event.js +5 -1
  282. package/lib/types/ExternalGroup.js +5 -1
  283. package/lib/types/ExternalProvider.js +5 -1
  284. package/lib/types/ExternalTerm.js +5 -1
  285. package/lib/types/Group.js +5 -1
  286. package/lib/types/IdentityProvider.js +5 -1
  287. package/lib/types/LtiLaunch.js +5 -1
  288. package/lib/types/NameOnlyEntity.js +5 -1
  289. package/lib/types/Notification.d.ts +2 -2
  290. package/lib/types/Notification.js +5 -1
  291. package/lib/types/OptionalRecord.d.ts +1 -1
  292. package/lib/types/OptionalRecord.js +5 -1
  293. package/lib/types/OwnerSchedule.d.ts +3 -1
  294. package/lib/types/OwnerSchedule.js +5 -1
  295. package/lib/types/PropertyOfType.d.ts +3 -3
  296. package/lib/types/PropertyOfType.js +5 -1
  297. package/lib/types/Quill.js +5 -1
  298. package/lib/types/RoleDescription.d.ts +0 -1
  299. package/lib/types/RoleDescription.js +5 -1
  300. package/lib/types/Search.js +5 -1
  301. package/lib/types/SimpleLocation.js +5 -1
  302. package/lib/types/UniTime.js +5 -1
  303. package/lib/types/User.js +5 -1
  304. package/lib/types/UserRole.js +5 -1
  305. package/lib/types/auth/AuthState.js +5 -1
  306. package/lib/types/auth/CasV1LoginRequestBody.js +5 -1
  307. package/lib/types/auth/ClientCredentials.js +5 -1
  308. package/lib/types/auth/CodeProviderService.js +5 -1
  309. package/lib/types/auth/LocalLoginRequestBody.js +5 -1
  310. package/lib/types/auth/TicketProviderService.js +5 -1
  311. package/lib/types/auth/TokenPersistenceService.js +5 -1
  312. package/lib/types/auth/index.js +82 -18
  313. package/lib/types/externals.d.js +2 -0
  314. package/lib/types/index.js +313 -39
  315. package/lib/types/net/EndpointConfig.js +5 -1
  316. package/lib/types/net/EndpointMapping.js +5 -1
  317. package/lib/types/net/EndpointMappings.js +5 -1
  318. package/lib/types/net/ErrorHandler.d.ts +1 -1
  319. package/lib/types/net/ErrorHandler.js +5 -1
  320. package/lib/types/net/FetchConfig.d.ts +1 -1
  321. package/lib/types/net/FetchConfig.js +5 -1
  322. package/lib/types/net/FetchErrorData.js +10 -6
  323. package/lib/types/net/FetchResult.d.ts +2 -2
  324. package/lib/types/net/FetchResult.js +5 -1
  325. package/lib/types/net/HTTPMethod.d.ts +1 -1
  326. package/lib/types/net/HTTPMethod.js +5 -1
  327. package/lib/types/net/HTTPStatusCode.js +16 -12
  328. package/lib/types/net/Metadata.js +5 -1
  329. package/lib/types/net/Model.js +5 -1
  330. package/lib/types/net/ModelCollection.js +5 -1
  331. package/lib/types/net/ModelsState.js +5 -1
  332. package/lib/types/net/OAuthToken.js +5 -1
  333. package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
  334. package/lib/types/net/OAuthTokenOrNull.js +5 -1
  335. package/lib/types/net/TokenAccessFunction.d.ts +1 -1
  336. package/lib/types/net/TokenAccessFunction.js +5 -1
  337. package/lib/types/net/index.js +181 -27
  338. package/lib/utils/baseActivity.d.ts +2 -2
  339. package/lib/utils/baseActivity.js +138 -136
  340. package/lib/utils/baseRole.js +37 -33
  341. package/lib/utils/collection.js +432 -310
  342. package/lib/utils/cookies.js +22 -37
  343. package/lib/utils/date.js +320 -320
  344. package/lib/utils/dom.js +186 -174
  345. package/lib/utils/domainIdentifier.js +9 -9
  346. package/lib/utils/entityUserRole.js +6 -2
  347. package/lib/utils/error.d.ts +1 -1
  348. package/lib/utils/error.js +18 -16
  349. package/lib/utils/events.js +40 -33
  350. package/lib/utils/externalGroup.js +25 -21
  351. package/lib/utils/externalProviders.js +8 -4
  352. package/lib/utils/externalTerms.js +9 -6
  353. package/lib/utils/fetch.d.ts +1 -1
  354. package/lib/utils/fetch.js +188 -185
  355. package/lib/utils/group.js +17 -9
  356. package/lib/utils/groupDates.d.ts +1 -1
  357. package/lib/utils/groupDates.js +43 -39
  358. package/lib/utils/groupRoles.js +28 -28
  359. package/lib/utils/lockDownBrowser.js +16 -12
  360. package/lib/utils/logger.js +30 -25
  361. package/lib/utils/lti.js +10 -5
  362. package/lib/utils/model.d.ts +2 -2
  363. package/lib/utils/model.js +39 -48
  364. package/lib/utils/number.js +23 -26
  365. package/lib/utils/promise.d.ts +6 -1
  366. package/lib/utils/promise.js +34 -15
  367. package/lib/utils/quill.js +66 -77
  368. package/lib/utils/route.d.ts +2 -2
  369. package/lib/utils/route.js +61 -60
  370. package/lib/utils/search.d.ts +1 -1
  371. package/lib/utils/search.js +78 -85
  372. package/lib/utils/shard.js +38 -41
  373. package/lib/utils/sort.d.ts +3 -3
  374. package/lib/utils/sort.js +62 -58
  375. package/lib/utils/string.js +14 -10
  376. package/lib/utils/table.d.ts +3 -3
  377. package/lib/utils/table.js +39 -36
  378. package/lib/utils/timezone.js +12 -26
  379. package/lib/utils/url.d.ts +2 -1
  380. package/lib/utils/url.js +146 -200
  381. package/lib/utils/user.js +59 -61
  382. package/lib/utils/userAgent.js +11 -11
  383. package/lib/utils/userRole.d.ts +3 -3
  384. package/lib/utils/userRole.js +58 -56
  385. package/package.json +224 -207
  386. package/lib/config/eslint/index.cjs +0 -21
  387. package/lib/config/eslint/lib/order.cjs +0 -22
  388. package/lib/config/eslint/lib/prettier.cjs +0 -18
  389. package/lib/config/eslint/lib/typescript.cjs +0 -86
  390. package/lib/config/eslint/react.cjs +0 -9
@@ -1,195 +1,220 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- extendStatics(d, b);
11
- function __() { this.constructor = d; }
12
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
- };
14
- })();
15
- var __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
19
7
  exports.ExternalGroupsAttach = void 0;
20
- var lodash_1 = require("lodash");
21
- var react_1 = __importDefault(require("react"));
22
- var react_2 = require("react");
23
- var react_bootstrap_1 = require("react-bootstrap");
24
- var uuid_1 = require("uuid");
25
- var constants_1 = require("../../../constants");
26
- var actionCreator_1 = require("../../../redux/actionCreator");
27
- var noStoreSaga_1 = require("../../../redux/sagas/noStoreSaga");
28
- var fetch_1 = require("../../../utils/fetch");
29
- var model_1 = require("../../../utils/model");
30
- var shard_1 = require("../../../utils/shard");
31
- var user_1 = require("../../../utils/user");
32
- var AlertWithIcon_1 = require("../../AlertWithIcon");
33
- var Loading_1 = require("../../Loading");
34
- var ExternalGroupsAttach = /** @class */ (function (_super) {
35
- __extends(ExternalGroupsAttach, _super);
36
- function ExternalGroupsAttach(props) {
37
- var _this = _super.call(this, props) || this;
38
- _this.setOwnerSchedules = function (groupUserRoles, externalTermId, selectedExternalGroups) {
39
- var _a = _this.props, canConnectAnyExternalGroups = _a.canConnectAnyExternalGroups, canConnectOwnExternalGroups = _a.canConnectOwnExternalGroups, userInfo = _a.userInfo;
40
- var owners = groupUserRoles.filter(function (groupUserRole) {
41
- return groupUserRole.role === constants_1.BASE_ROLE.GROUP_OWNER;
42
- });
43
- var ownersInitialScheduleData = {};
44
- owners.forEach(function (owner) {
45
- lodash_1.set(ownersInitialScheduleData, [owner.userId], {
46
- hookId: uuid_1.v4(),
47
- status: canConnectAnyExternalGroups || (userInfo.id === owner.id && canConnectOwnExternalGroups)
48
- ? constants_1.MODEL_STATUS.UNINITIALIZED
49
- : constants_1.MODEL_STATUS.READY,
50
- owner: owner,
51
- externalGroups: !(canConnectAnyExternalGroups ||
52
- (userInfo.id === owner.id && canConnectOwnExternalGroups))
53
- ? selectedExternalGroups.filter(function (seg) { return seg.userId === owner.id; })
54
- : undefined
55
- });
56
- });
57
- _this.setState({
58
- ownerSchedules: ownersInitialScheduleData,
59
- isUniTimeScheduleLoadingDone: false
60
- }, function () {
61
- return lodash_1.forEach(ownersInitialScheduleData, function (ownerSchedule, userId) {
62
- return _this.getOwnerUniTimeGroups(ownerSchedule, userId, externalTermId);
63
- });
64
- });
65
- };
66
- _this.handleSelectExternalGroups = function (event) {
67
- var externalId = event.target.value;
68
- var checked = event.target.checked;
69
- var _a = _this.props, originalConnectedExternalGroups = _a.originalConnectedExternalGroups, selectedExternalGroups = _a.selectedExternalGroups;
70
- var allOwnerExternalGroups = lodash_1.map(_this.state.ownerSchedules, function (os) { return os.externalGroups; }).reduce(function (a, b) {
71
- return a.concat(b);
72
- });
73
- var selectedExternalGroupsCopy = selectedExternalGroups.slice();
74
- if (checked) {
75
- var originalConnectedExternalGroup = originalConnectedExternalGroups.find(function (oeg) { return oeg.externalId === externalId; });
76
- var selectedExternalGroup = originalConnectedExternalGroup
77
- ? originalConnectedExternalGroup
78
- : allOwnerExternalGroups === null || allOwnerExternalGroups === void 0 ? void 0 : allOwnerExternalGroups.find(function (ao) { return ao.externalId === externalId; });
79
- if (selectedExternalGroup) {
80
- selectedExternalGroupsCopy.push(selectedExternalGroup);
81
- }
82
- }
83
- else {
84
- lodash_1.remove(selectedExternalGroupsCopy, function (seg) { return seg.externalId === externalId; });
85
- }
86
- _this.props.handleSelectedExternalGroups(selectedExternalGroupsCopy);
87
- };
88
- _this.getOwnerUniTimeGroups = function (ownerSchedule, userId, externalTermId) {
89
- if (shard_1.isPurdueShard() && ownerSchedule.status === constants_1.MODEL_STATUS.UNINITIALIZED && !ownerSchedule.externalGroups) {
90
- noStoreSaga_1.registerNoStoreActionHook(ownerSchedule.hookId, function (data) {
91
- noStoreSaga_1.unregisterNoStoreActionHook(ownerSchedule.hookId);
92
- if (!data || fetch_1.isFetchErrorData(data)) {
93
- _this.setState({ isShowingErrorAlert: true, isUniTimeScheduleLoadingDone: true });
94
- }
95
- else {
96
- _this.setUserUniTimeGroups(userId, data.externalGroups);
97
- }
98
- });
99
- actionCreator_1.dispatchModelFetchRequest({
100
- modelName: 'uniTimeInstructorSchedule',
101
- queryParams: {
102
- externalTermId: externalTermId,
103
- userId: userId
104
- },
105
- noStore: true,
106
- guid: ownerSchedule.hookId
107
- });
108
- }
109
- };
110
- _this.setUserUniTimeGroups = function (userId, externalGroups) {
111
- // Setting the user's course sections load status to be ready
112
- var ownerSchedules = _this.state.ownerSchedules || {};
113
- ownerSchedules[userId].status = constants_1.MODEL_STATUS.READY;
114
- ownerSchedules[userId].externalGroups = externalGroups;
115
- var isUniTimeScheduleLoadingDone = lodash_1.every(ownerSchedules, function (os) { return os.status === constants_1.MODEL_STATUS.READY; });
116
- _this.setState({
117
- ownerSchedules: ownerSchedules,
118
- isUniTimeScheduleLoadingDone: isUniTimeScheduleLoadingDone
119
- });
120
- };
121
- _this.displayOwnerSchedules = function (ownerSchedules) {
122
- return lodash_1.map(ownerSchedules, function (os) {
123
- if (!!os.externalGroups && os.externalGroups.length > 0) {
124
- return (react_1.default.createElement("div", { key: os.hookId },
125
- react_1.default.createElement("h4", null, user_1.displayName(os.owner)),
126
- _this.displayUniTimeGroups(os.externalGroups)));
127
- }
128
- });
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _lodash = require("lodash");
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactBootstrap = require("react-bootstrap");
12
+ var _uuid = require("uuid");
13
+ var _constants = require("../../../constants");
14
+ var _actionCreator = require("../../../redux/actionCreator");
15
+ var _noStoreSaga = require("../../../redux/sagas/noStoreSaga");
16
+ var _fetch = require("../../../utils/fetch");
17
+ var _model = require("../../../utils/model");
18
+ var _shard = require("../../../utils/shard");
19
+ var _user = require("../../../utils/user");
20
+ var _AlertWithIcon = require("../../AlertWithIcon");
21
+ var _Loading = require("../../Loading");
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
24
+ class ExternalGroupsAttach extends _react.Component {
25
+ constructor(props) {
26
+ super(props);
27
+ (0, _defineProperty2.default)(this, "setOwnerSchedules", (groupUserRoles, externalTermId, selectedExternalGroups) => {
28
+ const {
29
+ canConnectAnyExternalGroups,
30
+ canConnectOwnExternalGroups,
31
+ userInfo
32
+ } = this.props;
33
+ const owners = groupUserRoles.filter(groupUserRole => {
34
+ return groupUserRole.role === _constants.BASE_ROLE.GROUP_OWNER;
35
+ });
36
+ const ownersInitialScheduleData = {};
37
+ owners.forEach(owner => {
38
+ const ownerData = {
39
+ hookId: (0, _uuid.v4)(),
40
+ status: canConnectAnyExternalGroups || userInfo.id === owner.id && canConnectOwnExternalGroups ? _constants.MODEL_STATUS.UNINITIALIZED : _constants.MODEL_STATUS.READY,
41
+ owner,
42
+ externalGroups: !(canConnectAnyExternalGroups || userInfo.id === owner.id && canConnectOwnExternalGroups) ? selectedExternalGroups.filter(seg => seg.userId === owner.id) : undefined
129
43
  };
130
- _this.displayUniTimeGroups = function (externalGroups) {
131
- var _a = _this.props, selectedExternalGroups = _a.selectedExternalGroups, canConnectAnyExternalGroups = _a.canConnectAnyExternalGroups, canConnectOwnExternalGroups = _a.canConnectOwnExternalGroups, userInfo = _a.userInfo, disabled = _a.disabled;
132
- return lodash_1.orderBy(externalGroups, ['description']).map(function (eg, index) {
133
- var isConnected = selectedExternalGroups.some(function (seg) {
134
- return seg.externalId === eg.externalId &&
135
- seg.externalProviderId === eg.externalProviderId &&
136
- seg.userId === eg.userId;
137
- });
138
- if (canConnectAnyExternalGroups ||
139
- (userInfo.id === eg.userId && canConnectOwnExternalGroups) ||
140
- isConnected) {
141
- return (react_1.default.createElement(react_bootstrap_1.FormCheck, { id: "external-group-" + eg.id, type: "checkbox", key: index, onChange: _this.handleSelectExternalGroups, value: eg.externalId, checked: isConnected, disabled: (userInfo.id !== eg.userId && !canConnectAnyExternalGroups) || disabled, label: eg.name + " " + (eg.description ? "(" + eg.description + ")" : '') }));
142
- }
143
- return null;
44
+ (0, _lodash.set)(ownersInitialScheduleData, [owner.userId], ownerData);
45
+ });
46
+ this.setState({
47
+ ownerSchedules: ownersInitialScheduleData,
48
+ isUniTimeScheduleLoadingDone: false
49
+ }, () => (0, _lodash.forEach)(ownersInitialScheduleData, (ownerSchedule, userId) => {
50
+ this.getOwnerUniTimeGroups(ownerSchedule, userId, externalTermId);
51
+ }));
52
+ });
53
+ (0, _defineProperty2.default)(this, "handleSelectExternalGroups", event => {
54
+ const externalId = event.target.value;
55
+ const checked = event.target.checked;
56
+ const {
57
+ originalConnectedExternalGroups,
58
+ selectedExternalGroups
59
+ } = this.props;
60
+ const allOwnerExternalGroups = (0, _lodash.map)(this.state.ownerSchedules, os => os.externalGroups).reduce((a, b) => (a || []).concat(b || []));
61
+ const selectedExternalGroupsCopy = selectedExternalGroups.slice();
62
+ if (checked) {
63
+ const originalConnectedExternalGroup = originalConnectedExternalGroups.find(oeg => oeg.externalId === externalId);
64
+ const selectedExternalGroup = originalConnectedExternalGroup ? originalConnectedExternalGroup : allOwnerExternalGroups?.find(ao => ao.externalId === externalId);
65
+ if (selectedExternalGroup) {
66
+ selectedExternalGroupsCopy.push(selectedExternalGroup);
67
+ }
68
+ } else {
69
+ (0, _lodash.remove)(selectedExternalGroupsCopy, seg => seg.externalId === externalId);
70
+ }
71
+ this.props.handleSelectedExternalGroups(selectedExternalGroupsCopy);
72
+ });
73
+ (0, _defineProperty2.default)(this, "getOwnerUniTimeGroups", (ownerSchedule, userId, externalTermId) => {
74
+ if ((0, _shard.isPurdueShard)() && ownerSchedule.status === _constants.MODEL_STATUS.UNINITIALIZED && !ownerSchedule.externalGroups) {
75
+ (0, _noStoreSaga.registerNoStoreActionHook)(ownerSchedule.hookId, data => {
76
+ (0, _noStoreSaga.unregisterNoStoreActionHook)(ownerSchedule.hookId);
77
+ if (!data || (0, _fetch.isFetchErrorData)(data)) {
78
+ this.setState({
79
+ isShowingErrorAlert: true,
80
+ isUniTimeScheduleLoadingDone: true
144
81
  });
145
- };
146
- _this.state = {
147
- ownerSchedules: undefined,
148
- isUniTimeScheduleLoadingDone: false,
149
- isShowingErrorAlert: false
150
- };
151
- return _this;
152
- }
153
- ExternalGroupsAttach.prototype.componentDidMount = function () {
154
- var _a = this.props, groupUserRoles = _a.groupUserRoles, externalTermId = _a.externalTermId, selectedExternalGroups = _a.selectedExternalGroups;
155
- this.setOwnerSchedules(model_1.getModelArray(groupUserRoles), externalTermId, selectedExternalGroups);
156
- };
157
- ExternalGroupsAttach.prototype.componentWillUnmount = function () {
158
- var ownerSchedules = this.state.ownerSchedules;
159
- lodash_1.forEach(ownerSchedules, function (os) { return noStoreSaga_1.unregisterNoStoreActionHook(os.hookId); });
160
- };
161
- ExternalGroupsAttach.prototype.componentDidUpdate = function (prevProps) {
162
- var prevExternalTermId = prevProps.externalTermId, prevGroupUserRoles = prevProps.groupUserRoles;
163
- var _a = this.props, externalTermId = _a.externalTermId, groupUserRoles = _a.groupUserRoles, selectedExternalGroups = _a.selectedExternalGroups;
164
- // Assumes group user roles are changing one at a time. Can be made fancier if the need arises
165
- if (!!prevGroupUserRoles &&
166
- !!groupUserRoles &&
167
- (prevExternalTermId !== externalTermId ||
168
- Object.keys(prevGroupUserRoles).length !== Object.keys(groupUserRoles).length)) {
169
- this.setOwnerSchedules(model_1.getModelArray(groupUserRoles), externalTermId, selectedExternalGroups);
82
+ } else {
83
+ this.setUserUniTimeGroups(userId, data.externalGroups);
84
+ }
85
+ });
86
+ (0, _actionCreator.dispatchModelFetchRequest)({
87
+ modelName: 'uniTimeInstructorSchedule',
88
+ queryParams: {
89
+ externalTermId,
90
+ userId
91
+ },
92
+ noStore: true,
93
+ guid: ownerSchedule.hookId
94
+ });
95
+ }
96
+ });
97
+ (0, _defineProperty2.default)(this, "setUserUniTimeGroups", (userId, externalGroups) => {
98
+ // Setting the user's course sections load status to be ready
99
+ const ownerSchedules = this.state.ownerSchedules || {};
100
+ ownerSchedules[userId].status = _constants.MODEL_STATUS.READY;
101
+ ownerSchedules[userId].externalGroups = externalGroups;
102
+ const isUniTimeScheduleLoadingDone = (0, _lodash.every)(ownerSchedules, os => os.status === _constants.MODEL_STATUS.READY);
103
+ this.setState({
104
+ ownerSchedules,
105
+ isUniTimeScheduleLoadingDone
106
+ });
107
+ });
108
+ (0, _defineProperty2.default)(this, "displayOwnerSchedules", ownerSchedules => {
109
+ return (0, _lodash.map)(ownerSchedules, os => {
110
+ if (!!os.externalGroups && os.externalGroups.length > 0) {
111
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
112
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h4", {
113
+ children: (0, _user.displayName)(os.owner)
114
+ }), this.displayUniTimeGroups(os.externalGroups)]
115
+ }, os.hookId);
170
116
  }
117
+ });
118
+ });
119
+ (0, _defineProperty2.default)(this, "displayUniTimeGroups", externalGroups => {
120
+ const {
121
+ selectedExternalGroups,
122
+ canConnectAnyExternalGroups,
123
+ canConnectOwnExternalGroups,
124
+ userInfo,
125
+ disabled
126
+ } = this.props;
127
+ return (0, _lodash.orderBy)(externalGroups, ['description']).map((eg, index) => {
128
+ const isConnected = selectedExternalGroups.some(seg => seg.externalId === eg.externalId && seg.externalProviderId === eg.externalProviderId && seg.userId === eg.userId);
129
+ if (canConnectAnyExternalGroups || userInfo.id === eg.userId && canConnectOwnExternalGroups || isConnected) {
130
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.FormCheck, {
131
+ id: `external-group-${eg.id}`,
132
+ type: "checkbox",
133
+ onChange: this.handleSelectExternalGroups,
134
+ value: eg.externalId,
135
+ checked: isConnected,
136
+ disabled: userInfo.id !== eg.userId && !canConnectAnyExternalGroups || disabled,
137
+ label: `${eg.name} ${eg.description ? `(${eg.description})` : ''}`
138
+ }, index);
139
+ }
140
+ return null;
141
+ });
142
+ });
143
+ this.state = {
144
+ ownerSchedules: undefined,
145
+ isUniTimeScheduleLoadingDone: false,
146
+ isShowingErrorAlert: false
171
147
  };
172
- ExternalGroupsAttach.prototype.render = function () {
173
- var _this = this;
174
- var disabledInfoMessage = this.props.disabledInfoMessage;
175
- var _a = this.state, ownerSchedules = _a.ownerSchedules, isUniTimeScheduleLoadingDone = _a.isUniTimeScheduleLoadingDone, isShowingErrorAlert = _a.isShowingErrorAlert;
176
- var hasAnyExternalGroups = lodash_1.some(ownerSchedules, function (os) { return !!os.externalGroups && os.externalGroups.length > 0; });
177
- return (react_1.default.createElement("div", null,
178
- !isUniTimeScheduleLoadingDone && react_1.default.createElement(Loading_1.Loading, null),
179
- isUniTimeScheduleLoadingDone && (react_1.default.createElement("div", null,
180
- !hasAnyExternalGroups && (react_1.default.createElement(AlertWithIcon_1.AlertWithIcon, { variant: "info" },
181
- react_1.default.createElement("p", null, "No course sections eligible for roster sync."))),
182
- !!disabledInfoMessage && hasAnyExternalGroups && (react_1.default.createElement(AlertWithIcon_1.AlertWithIcon, { variant: "info" },
183
- react_1.default.createElement("p", null, disabledInfoMessage))),
184
- isShowingErrorAlert && (react_1.default.createElement(AlertWithIcon_1.AlertWithIcon, { variant: "warning", onClose: function () {
185
- return _this.setState({
186
- isShowingErrorAlert: false
187
- });
188
- } },
189
- react_1.default.createElement("p", { className: "ma0" }, "Oops! Something went wrong while loading. Please try again."))),
190
- ' ',
191
- hasAnyExternalGroups && !!ownerSchedules && (react_1.default.createElement(react_bootstrap_1.FormGroup, { className: "ml4 f6" }, this.displayOwnerSchedules(ownerSchedules)))))));
192
- };
193
- return ExternalGroupsAttach;
194
- }(react_2.Component));
148
+ }
149
+ componentDidMount() {
150
+ const {
151
+ groupUserRoles,
152
+ externalTermId,
153
+ selectedExternalGroups
154
+ } = this.props;
155
+ this.setOwnerSchedules((0, _model.getModelArray)(groupUserRoles), externalTermId, selectedExternalGroups);
156
+ }
157
+ componentWillUnmount() {
158
+ const {
159
+ ownerSchedules
160
+ } = this.state;
161
+ (0, _lodash.forEach)(ownerSchedules, os => (0, _noStoreSaga.unregisterNoStoreActionHook)(os.hookId));
162
+ }
163
+ componentDidUpdate(prevProps) {
164
+ const {
165
+ externalTermId: prevExternalTermId,
166
+ groupUserRoles: prevGroupUserRoles
167
+ } = prevProps;
168
+ const {
169
+ externalTermId,
170
+ groupUserRoles,
171
+ selectedExternalGroups
172
+ } = this.props;
173
+ // Assumes group user roles are changing one at a time. Can be made fancier if the need arises
174
+ if (prevExternalTermId !== externalTermId || Object.keys(prevGroupUserRoles).length !== Object.keys(groupUserRoles).length) {
175
+ this.setOwnerSchedules((0, _model.getModelArray)(groupUserRoles), externalTermId, selectedExternalGroups);
176
+ }
177
+ }
178
+ render() {
179
+ const {
180
+ disabledInfoMessage
181
+ } = this.props;
182
+ const {
183
+ ownerSchedules,
184
+ isUniTimeScheduleLoadingDone,
185
+ isShowingErrorAlert
186
+ } = this.state;
187
+ const hasAnyExternalGroups = (0, _lodash.some)(ownerSchedules, os => !!os.externalGroups && os.externalGroups.length > 0);
188
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
189
+ children: [!isUniTimeScheduleLoadingDone && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Loading.Loading, {}), isUniTimeScheduleLoadingDone && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
190
+ children: [!hasAnyExternalGroups && /*#__PURE__*/(0, _jsxRuntime.jsx)(_AlertWithIcon.AlertWithIcon, {
191
+ variant: "info",
192
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
193
+ children: "No course sections eligible for roster sync."
194
+ })
195
+ }), !!disabledInfoMessage && hasAnyExternalGroups && /*#__PURE__*/(0, _jsxRuntime.jsx)(_AlertWithIcon.AlertWithIcon, {
196
+ variant: "info",
197
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
198
+ children: disabledInfoMessage
199
+ })
200
+ }), isShowingErrorAlert && /*#__PURE__*/(0, _jsxRuntime.jsx)(_AlertWithIcon.AlertWithIcon, {
201
+ variant: "warning",
202
+ onClose: () => {
203
+ this.setState({
204
+ isShowingErrorAlert: false
205
+ });
206
+ },
207
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
208
+ className: "ma0",
209
+ children: "Oops! Something went wrong while loading. Please try again."
210
+ })
211
+ }), ' ', hasAnyExternalGroups && !!ownerSchedules && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.FormGroup, {
212
+ className: "ml4 f6",
213
+ children: this.displayOwnerSchedules(ownerSchedules)
214
+ })]
215
+ })]
216
+ });
217
+ }
218
+ }
195
219
  exports.ExternalGroupsAttach = ExternalGroupsAttach;
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3JlYWN0Qm9vdHN0cmFwIiwiX3V1aWQiLCJfY29uc3RhbnRzIiwiX2FjdGlvbkNyZWF0b3IiLCJfbm9TdG9yZVNhZ2EiLCJfZmV0Y2giLCJfbW9kZWwiLCJfc2hhcmQiLCJfdXNlciIsIl9BbGVydFdpdGhJY29uIiwiX0xvYWRpbmciLCJfanN4UnVudGltZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkV4dGVybmFsR3JvdXBzQXR0YWNoIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJncm91cFVzZXJSb2xlcyIsImV4dGVybmFsVGVybUlkIiwic2VsZWN0ZWRFeHRlcm5hbEdyb3VwcyIsImNhbkNvbm5lY3RBbnlFeHRlcm5hbEdyb3VwcyIsImNhbkNvbm5lY3RPd25FeHRlcm5hbEdyb3VwcyIsInVzZXJJbmZvIiwib3duZXJzIiwiZmlsdGVyIiwiZ3JvdXBVc2VyUm9sZSIsInJvbGUiLCJCQVNFX1JPTEUiLCJHUk9VUF9PV05FUiIsIm93bmVyc0luaXRpYWxTY2hlZHVsZURhdGEiLCJmb3JFYWNoIiwib3duZXIiLCJvd25lckRhdGEiLCJob29rSWQiLCJ1dWlkdjQiLCJzdGF0dXMiLCJpZCIsIk1PREVMX1NUQVRVUyIsIlVOSU5JVElBTElaRUQiLCJSRUFEWSIsImV4dGVybmFsR3JvdXBzIiwic2VnIiwidXNlcklkIiwidW5kZWZpbmVkIiwic2V0U3RhdGUiLCJvd25lclNjaGVkdWxlcyIsImlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmUiLCJvd25lclNjaGVkdWxlIiwiZ2V0T3duZXJVbmlUaW1lR3JvdXBzIiwiZXZlbnQiLCJleHRlcm5hbElkIiwidGFyZ2V0IiwidmFsdWUiLCJjaGVja2VkIiwib3JpZ2luYWxDb25uZWN0ZWRFeHRlcm5hbEdyb3VwcyIsImFsbE93bmVyRXh0ZXJuYWxHcm91cHMiLCJtYXAiLCJzdGF0ZSIsIm9zIiwicmVkdWNlIiwiYSIsImIiLCJjb25jYXQiLCJzZWxlY3RlZEV4dGVybmFsR3JvdXBzQ29weSIsInNsaWNlIiwib3JpZ2luYWxDb25uZWN0ZWRFeHRlcm5hbEdyb3VwIiwiZmluZCIsIm9lZyIsInNlbGVjdGVkRXh0ZXJuYWxHcm91cCIsImFvIiwicHVzaCIsInJlbW92ZSIsImhhbmRsZVNlbGVjdGVkRXh0ZXJuYWxHcm91cHMiLCJpc1B1cmR1ZVNoYXJkIiwicmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayIsImRhdGEiLCJ1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2siLCJpc0ZldGNoRXJyb3JEYXRhIiwiaXNTaG93aW5nRXJyb3JBbGVydCIsInNldFVzZXJVbmlUaW1lR3JvdXBzIiwiZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCIsIm1vZGVsTmFtZSIsInF1ZXJ5UGFyYW1zIiwibm9TdG9yZSIsImd1aWQiLCJldmVyeSIsImxlbmd0aCIsImpzeHMiLCJjaGlsZHJlbiIsImpzeCIsImRpc3BsYXlOYW1lIiwiZGlzcGxheVVuaVRpbWVHcm91cHMiLCJkaXNhYmxlZCIsIm9yZGVyQnkiLCJlZyIsImluZGV4IiwiaXNDb25uZWN0ZWQiLCJzb21lIiwiZXh0ZXJuYWxQcm92aWRlcklkIiwiRm9ybUNoZWNrIiwidHlwZSIsIm9uQ2hhbmdlIiwiaGFuZGxlU2VsZWN0RXh0ZXJuYWxHcm91cHMiLCJsYWJlbCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImNvbXBvbmVudERpZE1vdW50Iiwic2V0T3duZXJTY2hlZHVsZXMiLCJnZXRNb2RlbEFycmF5IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2RXh0ZXJuYWxUZXJtSWQiLCJwcmV2R3JvdXBVc2VyUm9sZXMiLCJrZXlzIiwicmVuZGVyIiwiZGlzYWJsZWRJbmZvTWVzc2FnZSIsImhhc0FueUV4dGVybmFsR3JvdXBzIiwiTG9hZGluZyIsIkFsZXJ0V2l0aEljb24iLCJ2YXJpYW50Iiwib25DbG9zZSIsImNsYXNzTmFtZSIsIkZvcm1Hcm91cCIsImRpc3BsYXlPd25lclNjaGVkdWxlcyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9Hcm91cHMvRXh0ZXJuYWxHcm91cHMvQXR0YWNoLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5LCBldmVyeSwgZm9yRWFjaCwgbWFwLCBvcmRlckJ5LCByZW1vdmUsIHNldCwgc29tZSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcclxuaW1wb3J0IHsgRm9ybUNoZWNrLCBGb3JtR3JvdXAgfSBmcm9tICdyZWFjdC1ib290c3RyYXAnXHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXHJcbmltcG9ydCB7IEJBU0VfUk9MRSwgTU9ERUxfU1RBVFVTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJ1xyXG5pbXBvcnQgeyBkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVkdXgvYWN0aW9uQ3JlYXRvcidcclxuaW1wb3J0IHsgcmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vaywgdW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rIH0gZnJvbSAnLi4vLi4vLi4vcmVkdXgvc2FnYXMvbm9TdG9yZVNhZ2EnXHJcbmltcG9ydCB7XHJcblx0RXh0ZXJuYWxHcm91cCxcclxuXHRGZXRjaEVycm9yRGF0YSxcclxuXHRHcm91cFVzZXJSb2xlLFxyXG5cdEluc3RydWN0b3JTY2hlZHVsZSxcclxuXHRMdGlMYXVuY2gsXHJcblx0TW9kZWxDb2xsZWN0aW9uLFxyXG5cdE93bmVyU2NoZWR1bGUsXHJcblx0VW5pVGltZUdyb3VwLFxyXG5cdFVzZXJJbmZvXHJcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IGlzRmV0Y2hFcnJvckRhdGEgfSBmcm9tICcuLi8uLi8uLi91dGlscy9mZXRjaCdcclxuaW1wb3J0IHsgZ2V0TW9kZWxBcnJheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL21vZGVsJ1xyXG5pbXBvcnQgeyBpc1B1cmR1ZVNoYXJkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2hhcmQnXHJcbmltcG9ydCB7IGRpc3BsYXlOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXNlcidcclxuaW1wb3J0IHsgQWxlcnRXaXRoSWNvbiB9IGZyb20gJy4uLy4uL0FsZXJ0V2l0aEljb24nXHJcbmltcG9ydCB7IExvYWRpbmcgfSBmcm9tICcuLi8uLi9Mb2FkaW5nJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEdyb3Vwc0F0dGFjaFByb3BzIHtcclxuXHR1c2VySW5mbzogVXNlckluZm9cclxuXHRjYW5SZWFkRXh0ZXJuYWxHcm91cHM6IGJvb2xlYW5cclxuXHRjYW5Db25uZWN0QW55RXh0ZXJuYWxHcm91cHM6IGJvb2xlYW5cclxuXHRjYW5Db25uZWN0T3duRXh0ZXJuYWxHcm91cHM6IGJvb2xlYW5cclxuXHRvcmlnaW5hbENvbm5lY3RlZEV4dGVybmFsR3JvdXBzOiBBcnJheTxFeHRlcm5hbEdyb3VwIHwgTHRpTGF1bmNoPlxyXG5cdHNlbGVjdGVkRXh0ZXJuYWxHcm91cHM6IEFycmF5PEV4dGVybmFsR3JvdXAgfCBMdGlMYXVuY2ggfCBVbmlUaW1lR3JvdXA+XHJcblx0ZXh0ZXJuYWxUZXJtSWQ6IG51bWJlclxyXG5cdGhhbmRsZVNlbGVjdGVkRXh0ZXJuYWxHcm91cHM6IChleHRlcm5hbEdyb3VwczogQXJyYXk8RXh0ZXJuYWxHcm91cCB8IEx0aUxhdW5jaCB8IFVuaVRpbWVHcm91cD4pID0+IHZvaWRcclxuXHRncm91cFVzZXJSb2xlczogTW9kZWxDb2xsZWN0aW9uPEdyb3VwVXNlclJvbGU+XHJcblx0ZGlzYWJsZWQ/OiBib29sZWFuXHJcblx0ZGlzYWJsZWRJbmZvTWVzc2FnZT86IHN0cmluZyB8IFJlYWN0LkpTWC5FbGVtZW50XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeHRlcm5hbEdyb3Vwc0F0dGFjaFN0YXRlIHtcclxuXHRvd25lclNjaGVkdWxlcz86IERpY3Rpb25hcnk8T3duZXJTY2hlZHVsZT5cclxuXHRpc1VuaVRpbWVTY2hlZHVsZUxvYWRpbmdEb25lOiBib29sZWFuXHJcblx0aXNTaG93aW5nRXJyb3JBbGVydDogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxHcm91cHNBdHRhY2ggZXh0ZW5kcyBDb21wb25lbnQ8RXh0ZXJuYWxHcm91cHNBdHRhY2hQcm9wcywgRXh0ZXJuYWxHcm91cHNBdHRhY2hTdGF0ZT4ge1xyXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBFeHRlcm5hbEdyb3Vwc0F0dGFjaFByb3BzKSB7XHJcblx0XHRzdXBlcihwcm9wcylcclxuXHRcdHRoaXMuc3RhdGUgPSB7XHJcblx0XHRcdG93bmVyU2NoZWR1bGVzOiB1bmRlZmluZWQsXHJcblx0XHRcdGlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmU6IGZhbHNlLFxyXG5cdFx0XHRpc1Nob3dpbmdFcnJvckFsZXJ0OiBmYWxzZVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29tcG9uZW50RGlkTW91bnQoKSB7XHJcblx0XHRjb25zdCB7IGdyb3VwVXNlclJvbGVzLCBleHRlcm5hbFRlcm1JZCwgc2VsZWN0ZWRFeHRlcm5hbEdyb3VwcyB9ID0gdGhpcy5wcm9wc1xyXG5cdFx0dGhpcy5zZXRPd25lclNjaGVkdWxlcyhnZXRNb2RlbEFycmF5KGdyb3VwVXNlclJvbGVzKSwgZXh0ZXJuYWxUZXJtSWQsIHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMpXHJcblx0fVxyXG5cclxuXHRjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuXHRcdGNvbnN0IHsgb3duZXJTY2hlZHVsZXMgfSA9IHRoaXMuc3RhdGVcclxuXHRcdGZvckVhY2gob3duZXJTY2hlZHVsZXMsIG9zID0+IHVucmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayhvcy5ob29rSWQpKVxyXG5cdH1cclxuXHJcblx0Y29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUmVhZG9ubHk8RXh0ZXJuYWxHcm91cHNBdHRhY2hQcm9wcz4pIHtcclxuXHRcdGNvbnN0IHsgZXh0ZXJuYWxUZXJtSWQ6IHByZXZFeHRlcm5hbFRlcm1JZCwgZ3JvdXBVc2VyUm9sZXM6IHByZXZHcm91cFVzZXJSb2xlcyB9ID0gcHJldlByb3BzXHJcblx0XHRjb25zdCB7IGV4dGVybmFsVGVybUlkLCBncm91cFVzZXJSb2xlcywgc2VsZWN0ZWRFeHRlcm5hbEdyb3VwcyB9ID0gdGhpcy5wcm9wc1xyXG5cdFx0Ly8gQXNzdW1lcyBncm91cCB1c2VyIHJvbGVzIGFyZSBjaGFuZ2luZyBvbmUgYXQgYSB0aW1lLiBDYW4gYmUgbWFkZSBmYW5jaWVyIGlmIHRoZSBuZWVkIGFyaXNlc1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRwcmV2RXh0ZXJuYWxUZXJtSWQgIT09IGV4dGVybmFsVGVybUlkIHx8XHJcblx0XHRcdE9iamVjdC5rZXlzKHByZXZHcm91cFVzZXJSb2xlcykubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhncm91cFVzZXJSb2xlcykubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5zZXRPd25lclNjaGVkdWxlcyhnZXRNb2RlbEFycmF5KGdyb3VwVXNlclJvbGVzKSwgZXh0ZXJuYWxUZXJtSWQsIHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMpXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZXRPd25lclNjaGVkdWxlcyA9IChcclxuXHRcdGdyb3VwVXNlclJvbGVzOiBHcm91cFVzZXJSb2xlW10sXHJcblx0XHRleHRlcm5hbFRlcm1JZDogbnVtYmVyLFxyXG5cdFx0c2VsZWN0ZWRFeHRlcm5hbEdyb3VwczogQXJyYXk8RXh0ZXJuYWxHcm91cCB8IEx0aUxhdW5jaCB8IFVuaVRpbWVHcm91cD5cclxuXHQpID0+IHtcclxuXHRcdGNvbnN0IHsgY2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzLCBjYW5Db25uZWN0T3duRXh0ZXJuYWxHcm91cHMsIHVzZXJJbmZvIH0gPSB0aGlzLnByb3BzXHJcblx0XHRjb25zdCBvd25lcnMgPSBncm91cFVzZXJSb2xlcy5maWx0ZXIoZ3JvdXBVc2VyUm9sZSA9PiB7XHJcblx0XHRcdHJldHVybiBncm91cFVzZXJSb2xlLnJvbGUgPT09IEJBU0VfUk9MRS5HUk9VUF9PV05FUlxyXG5cdFx0fSlcclxuXHJcblx0XHRjb25zdCBvd25lcnNJbml0aWFsU2NoZWR1bGVEYXRhOiBEaWN0aW9uYXJ5PE93bmVyU2NoZWR1bGU+ID0ge31cclxuXHRcdG93bmVycy5mb3JFYWNoKG93bmVyID0+IHtcclxuXHRcdFx0Y29uc3Qgb3duZXJEYXRhOiBPd25lclNjaGVkdWxlID0ge1xyXG5cdFx0XHRcdGhvb2tJZDogdXVpZHY0KCksXHJcblx0XHRcdFx0c3RhdHVzOlxyXG5cdFx0XHRcdFx0Y2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzIHx8ICh1c2VySW5mby5pZCA9PT0gb3duZXIuaWQgJiYgY2FuQ29ubmVjdE93bkV4dGVybmFsR3JvdXBzKVxyXG5cdFx0XHRcdFx0XHQ/IE1PREVMX1NUQVRVUy5VTklOSVRJQUxJWkVEXHJcblx0XHRcdFx0XHRcdDogTU9ERUxfU1RBVFVTLlJFQURZLFxyXG5cdFx0XHRcdG93bmVyLFxyXG5cdFx0XHRcdGV4dGVybmFsR3JvdXBzOiAhKFxyXG5cdFx0XHRcdFx0Y2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzIHx8XHJcblx0XHRcdFx0XHQodXNlckluZm8uaWQgPT09IG93bmVyLmlkICYmIGNhbkNvbm5lY3RPd25FeHRlcm5hbEdyb3VwcylcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHQ/IHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMuZmlsdGVyKHNlZyA9PiBzZWcudXNlcklkID09PSBvd25lci5pZClcclxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXHJcblx0XHRcdH1cclxuXHRcdFx0c2V0KG93bmVyc0luaXRpYWxTY2hlZHVsZURhdGEsIFtvd25lci51c2VySWRdLCBvd25lckRhdGEpXHJcblx0XHR9KVxyXG5cdFx0dGhpcy5zZXRTdGF0ZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG93bmVyU2NoZWR1bGVzOiBvd25lcnNJbml0aWFsU2NoZWR1bGVEYXRhLFxyXG5cdFx0XHRcdGlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmU6IGZhbHNlXHJcblx0XHRcdH0sXHJcblx0XHRcdCgpID0+XHJcblx0XHRcdFx0Zm9yRWFjaChvd25lcnNJbml0aWFsU2NoZWR1bGVEYXRhLCAob3duZXJTY2hlZHVsZSwgdXNlcklkKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmdldE93bmVyVW5pVGltZUdyb3Vwcyhvd25lclNjaGVkdWxlLCB1c2VySWQsIGV4dGVybmFsVGVybUlkKVxyXG5cdFx0XHRcdH0pXHJcblx0XHQpXHJcblx0fVxyXG5cclxuXHRoYW5kbGVTZWxlY3RFeHRlcm5hbEdyb3VwcyA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuXHRcdGNvbnN0IGV4dGVybmFsSWQgPSBldmVudC50YXJnZXQudmFsdWVcclxuXHRcdGNvbnN0IGNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZFxyXG5cdFx0Y29uc3QgeyBvcmlnaW5hbENvbm5lY3RlZEV4dGVybmFsR3JvdXBzLCBzZWxlY3RlZEV4dGVybmFsR3JvdXBzIH0gPSB0aGlzLnByb3BzXHJcblxyXG5cdFx0Y29uc3QgYWxsT3duZXJFeHRlcm5hbEdyb3VwcyA9IG1hcCh0aGlzLnN0YXRlLm93bmVyU2NoZWR1bGVzLCBvcyA9PiBvcy5leHRlcm5hbEdyb3VwcykucmVkdWNlKChhLCBiKSA9PlxyXG5cdFx0XHQoYSB8fCBbXSkuY29uY2F0KGIgfHwgW10pXHJcblx0XHQpXHJcblx0XHRjb25zdCBzZWxlY3RlZEV4dGVybmFsR3JvdXBzQ29weSA9IHNlbGVjdGVkRXh0ZXJuYWxHcm91cHMuc2xpY2UoKVxyXG5cclxuXHRcdGlmIChjaGVja2VkKSB7XHJcblx0XHRcdGNvbnN0IG9yaWdpbmFsQ29ubmVjdGVkRXh0ZXJuYWxHcm91cCA9IG9yaWdpbmFsQ29ubmVjdGVkRXh0ZXJuYWxHcm91cHMuZmluZChcclxuXHRcdFx0XHRvZWcgPT4gb2VnLmV4dGVybmFsSWQgPT09IGV4dGVybmFsSWRcclxuXHRcdFx0KVxyXG5cdFx0XHRjb25zdCBzZWxlY3RlZEV4dGVybmFsR3JvdXAgPSBvcmlnaW5hbENvbm5lY3RlZEV4dGVybmFsR3JvdXBcclxuXHRcdFx0XHQ/IG9yaWdpbmFsQ29ubmVjdGVkRXh0ZXJuYWxHcm91cFxyXG5cdFx0XHRcdDogYWxsT3duZXJFeHRlcm5hbEdyb3Vwcz8uZmluZChhbyA9PiBhby5leHRlcm5hbElkID09PSBleHRlcm5hbElkKVxyXG5cclxuXHRcdFx0aWYgKHNlbGVjdGVkRXh0ZXJuYWxHcm91cCkge1xyXG5cdFx0XHRcdHNlbGVjdGVkRXh0ZXJuYWxHcm91cHNDb3B5LnB1c2goc2VsZWN0ZWRFeHRlcm5hbEdyb3VwKVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZW1vdmUoc2VsZWN0ZWRFeHRlcm5hbEdyb3Vwc0NvcHksIHNlZyA9PiBzZWcuZXh0ZXJuYWxJZCA9PT0gZXh0ZXJuYWxJZClcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnByb3BzLmhhbmRsZVNlbGVjdGVkRXh0ZXJuYWxHcm91cHMoc2VsZWN0ZWRFeHRlcm5hbEdyb3Vwc0NvcHkpXHJcblx0fVxyXG5cclxuXHRnZXRPd25lclVuaVRpbWVHcm91cHMgPSAob3duZXJTY2hlZHVsZTogT3duZXJTY2hlZHVsZSwgdXNlcklkOiBzdHJpbmcsIGV4dGVybmFsVGVybUlkOiBudW1iZXIpID0+IHtcclxuXHRcdGlmIChpc1B1cmR1ZVNoYXJkKCkgJiYgb3duZXJTY2hlZHVsZS5zdGF0dXMgPT09IE1PREVMX1NUQVRVUy5VTklOSVRJQUxJWkVEICYmICFvd25lclNjaGVkdWxlLmV4dGVybmFsR3JvdXBzKSB7XHJcblx0XHRcdHJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2sob3duZXJTY2hlZHVsZS5ob29rSWQsIChkYXRhOiBJbnN0cnVjdG9yU2NoZWR1bGUgfCBGZXRjaEVycm9yRGF0YSB8IG51bGwpID0+IHtcclxuXHRcdFx0XHR1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2sob3duZXJTY2hlZHVsZS5ob29rSWQpXHJcblx0XHRcdFx0aWYgKCFkYXRhIHx8IGlzRmV0Y2hFcnJvckRhdGEoZGF0YSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBpc1Nob3dpbmdFcnJvckFsZXJ0OiB0cnVlLCBpc1VuaVRpbWVTY2hlZHVsZUxvYWRpbmdEb25lOiB0cnVlIH0pXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0VXNlclVuaVRpbWVHcm91cHModXNlcklkLCBkYXRhLmV4dGVybmFsR3JvdXBzKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdFx0ZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCh7XHJcblx0XHRcdFx0bW9kZWxOYW1lOiAndW5pVGltZUluc3RydWN0b3JTY2hlZHVsZScsXHJcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHtcclxuXHRcdFx0XHRcdGV4dGVybmFsVGVybUlkLFxyXG5cdFx0XHRcdFx0dXNlcklkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRub1N0b3JlOiB0cnVlLFxyXG5cdFx0XHRcdGd1aWQ6IG93bmVyU2NoZWR1bGUuaG9va0lkXHJcblx0XHRcdH0pXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZXRVc2VyVW5pVGltZUdyb3VwcyA9ICh1c2VySWQ6IHN0cmluZywgZXh0ZXJuYWxHcm91cHM6IFVuaVRpbWVHcm91cFtdKSA9PiB7XHJcblx0XHQvLyBTZXR0aW5nIHRoZSB1c2VyJ3MgY291cnNlIHNlY3Rpb25zIGxvYWQgc3RhdHVzIHRvIGJlIHJlYWR5XHJcblx0XHRjb25zdCBvd25lclNjaGVkdWxlcyA9IHRoaXMuc3RhdGUub3duZXJTY2hlZHVsZXMgfHwge31cclxuXHRcdG93bmVyU2NoZWR1bGVzW3VzZXJJZF0uc3RhdHVzID0gTU9ERUxfU1RBVFVTLlJFQURZXHJcblx0XHRvd25lclNjaGVkdWxlc1t1c2VySWRdLmV4dGVybmFsR3JvdXBzID0gZXh0ZXJuYWxHcm91cHNcclxuXHJcblx0XHRjb25zdCBpc1VuaVRpbWVTY2hlZHVsZUxvYWRpbmdEb25lID0gZXZlcnkob3duZXJTY2hlZHVsZXMsIG9zID0+IG9zLnN0YXR1cyA9PT0gTU9ERUxfU1RBVFVTLlJFQURZKVxyXG5cclxuXHRcdHRoaXMuc2V0U3RhdGUoe1xyXG5cdFx0XHRvd25lclNjaGVkdWxlcyxcclxuXHRcdFx0aXNVbmlUaW1lU2NoZWR1bGVMb2FkaW5nRG9uZVxyXG5cdFx0fSlcclxuXHR9XHJcblxyXG5cdGRpc3BsYXlPd25lclNjaGVkdWxlcyA9IChvd25lclNjaGVkdWxlczogRGljdGlvbmFyeTxPd25lclNjaGVkdWxlPikgPT4ge1xyXG5cdFx0cmV0dXJuIG1hcChvd25lclNjaGVkdWxlcywgb3MgPT4ge1xyXG5cdFx0XHRpZiAoISFvcy5leHRlcm5hbEdyb3VwcyAmJiBvcy5leHRlcm5hbEdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRcdDxkaXYga2V5PXtvcy5ob29rSWR9PlxyXG5cdFx0XHRcdFx0XHQ8aDQ+e2Rpc3BsYXlOYW1lKG9zLm93bmVyKX08L2g0PlxyXG5cdFx0XHRcdFx0XHR7dGhpcy5kaXNwbGF5VW5pVGltZUdyb3Vwcyhvcy5leHRlcm5hbEdyb3Vwcyl9XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQpXHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRkaXNwbGF5VW5pVGltZUdyb3VwcyA9IChleHRlcm5hbEdyb3VwczogQXJyYXk8RXh0ZXJuYWxHcm91cCB8IEx0aUxhdW5jaCB8IFVuaVRpbWVHcm91cD4pID0+IHtcclxuXHRcdGNvbnN0IHsgc2VsZWN0ZWRFeHRlcm5hbEdyb3VwcywgY2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzLCBjYW5Db25uZWN0T3duRXh0ZXJuYWxHcm91cHMsIHVzZXJJbmZvLCBkaXNhYmxlZCB9ID1cclxuXHRcdFx0dGhpcy5wcm9wc1xyXG5cclxuXHRcdHJldHVybiBvcmRlckJ5KGV4dGVybmFsR3JvdXBzLCBbJ2Rlc2NyaXB0aW9uJ10pLm1hcCgoZWcsIGluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IGlzQ29ubmVjdGVkID0gc2VsZWN0ZWRFeHRlcm5hbEdyb3Vwcy5zb21lKFxyXG5cdFx0XHRcdHNlZyA9PlxyXG5cdFx0XHRcdFx0c2VnLmV4dGVybmFsSWQgPT09IGVnLmV4dGVybmFsSWQgJiZcclxuXHRcdFx0XHRcdHNlZy5leHRlcm5hbFByb3ZpZGVySWQgPT09IGVnLmV4dGVybmFsUHJvdmlkZXJJZCAmJlxyXG5cdFx0XHRcdFx0c2VnLnVzZXJJZCA9PT0gZWcudXNlcklkXHJcblx0XHRcdClcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYW5Db25uZWN0QW55RXh0ZXJuYWxHcm91cHMgfHxcclxuXHRcdFx0XHQodXNlckluZm8uaWQgPT09IGVnLnVzZXJJZCAmJiBjYW5Db25uZWN0T3duRXh0ZXJuYWxHcm91cHMpIHx8XHJcblx0XHRcdFx0aXNDb25uZWN0ZWRcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRcdDxGb3JtQ2hlY2tcclxuXHRcdFx0XHRcdFx0aWQ9e2BleHRlcm5hbC1ncm91cC0ke2VnLmlkfWB9XHJcblx0XHRcdFx0XHRcdHR5cGU9XCJjaGVja2JveFwiXHJcblx0XHRcdFx0XHRcdGtleT17aW5kZXh9XHJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdEV4dGVybmFsR3JvdXBzfVxyXG5cdFx0XHRcdFx0XHR2YWx1ZT17ZWcuZXh0ZXJuYWxJZH1cclxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNDb25uZWN0ZWR9XHJcblx0XHRcdFx0XHRcdGRpc2FibGVkPXsodXNlckluZm8uaWQgIT09IGVnLnVzZXJJZCAmJiAhY2FuQ29ubmVjdEFueUV4dGVybmFsR3JvdXBzKSB8fCBkaXNhYmxlZH1cclxuXHRcdFx0XHRcdFx0bGFiZWw9e2Ake2VnLm5hbWV9ICR7ZWcuZGVzY3JpcHRpb24gPyBgKCR7ZWcuZGVzY3JpcHRpb259KWAgOiAnJ31gfVxyXG5cdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHQpXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG51bGxcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRyZW5kZXIoKSB7XHJcblx0XHRjb25zdCB7IGRpc2FibGVkSW5mb01lc3NhZ2UgfSA9IHRoaXMucHJvcHNcclxuXHRcdGNvbnN0IHsgb3duZXJTY2hlZHVsZXMsIGlzVW5pVGltZVNjaGVkdWxlTG9hZGluZ0RvbmUsIGlzU2hvd2luZ0Vycm9yQWxlcnQgfSA9IHRoaXMuc3RhdGVcclxuXHRcdGNvbnN0IGhhc0FueUV4dGVybmFsR3JvdXBzID0gc29tZShvd25lclNjaGVkdWxlcywgb3MgPT4gISFvcy5leHRlcm5hbEdyb3VwcyAmJiBvcy5leHRlcm5hbEdyb3Vwcy5sZW5ndGggPiAwKVxyXG5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdDxkaXY+XHJcblx0XHRcdFx0eyFpc1VuaVRpbWVTY2hlZHVsZUxvYWRpbmdEb25lICYmIDxMb2FkaW5nIC8+fVxyXG5cdFx0XHRcdHtpc1VuaVRpbWVTY2hlZHVsZUxvYWRpbmdEb25lICYmIChcclxuXHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdHshaGFzQW55RXh0ZXJuYWxHcm91cHMgJiYgKFxyXG5cdFx0XHRcdFx0XHRcdDxBbGVydFdpdGhJY29uIHZhcmlhbnQ9XCJpbmZvXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8cD5ObyBjb3Vyc2Ugc2VjdGlvbnMgZWxpZ2libGUgZm9yIHJvc3RlciBzeW5jLjwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8L0FsZXJ0V2l0aEljb24+XHJcblx0XHRcdFx0XHRcdCl9XHJcblx0XHRcdFx0XHRcdHshIWRpc2FibGVkSW5mb01lc3NhZ2UgJiYgaGFzQW55RXh0ZXJuYWxHcm91cHMgJiYgKFxyXG5cdFx0XHRcdFx0XHRcdDxBbGVydFdpdGhJY29uIHZhcmlhbnQ9XCJpbmZvXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8cD57ZGlzYWJsZWRJbmZvTWVzc2FnZX08L3A+XHJcblx0XHRcdFx0XHRcdFx0PC9BbGVydFdpdGhJY29uPlxyXG5cdFx0XHRcdFx0XHQpfVxyXG5cdFx0XHRcdFx0XHR7aXNTaG93aW5nRXJyb3JBbGVydCAmJiAoXHJcblx0XHRcdFx0XHRcdFx0PEFsZXJ0V2l0aEljb25cclxuXHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJ3YXJuaW5nXCJcclxuXHRcdFx0XHRcdFx0XHRcdG9uQ2xvc2U9eygpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTaG93aW5nRXJyb3JBbGVydDogZmFsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHRcdH19PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwibWEwXCI+T29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgbG9hZGluZy4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XHJcblx0XHRcdFx0XHRcdFx0PC9BbGVydFdpdGhJY29uPlxyXG5cdFx0XHRcdFx0XHQpfXsnICd9XHJcblx0XHRcdFx0XHRcdHtoYXNBbnlFeHRlcm5hbEdyb3VwcyAmJiAhIW93bmVyU2NoZWR1bGVzICYmIChcclxuXHRcdFx0XHRcdFx0XHQ8Rm9ybUdyb3VwIGNsYXNzTmFtZT1cIm1sNCBmNlwiPnt0aGlzLmRpc3BsYXlPd25lclNjaGVkdWxlcyhvd25lclNjaGVkdWxlcyl9PC9Gb3JtR3JvdXA+XHJcblx0XHRcdFx0XHRcdCl9XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQpfVxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdClcclxuXHR9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGNBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQVlBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLE1BQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLE1BQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLEtBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGNBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQUF1QyxJQUFBYyxXQUFBLEdBQUFkLE9BQUE7QUFBQSxTQUFBRSx3QkFBQWEsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQWYsdUJBQUEsWUFBQUEsQ0FBQWEsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFB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