studiokit-scaffolding-js 4.3.20 → 4.3.21

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 (334) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +127 -127
  3. package/lib/components/ActionList.d.ts +20 -20
  4. package/lib/components/ActionList.js +94 -94
  5. package/lib/components/AlertDialog.d.ts +18 -18
  6. package/lib/components/AlertDialog.js +21 -21
  7. package/lib/components/AlertWithIcon.d.ts +7 -7
  8. package/lib/components/AlertWithIcon.js +57 -57
  9. package/lib/components/Blots/CustomImageSpec.d.ts +14 -14
  10. package/lib/components/Blots/CustomImageSpec.js +45 -45
  11. package/lib/components/Blots/CustomVideoSpec.d.ts +16 -16
  12. package/lib/components/Blots/CustomVideoSpec.js +47 -47
  13. package/lib/components/ConnectedModal.d.ts +6 -6
  14. package/lib/components/ConnectedModal.js +11 -11
  15. package/lib/components/Dropdowns/GroupsDropdown.d.ts +18 -18
  16. package/lib/components/Dropdowns/GroupsDropdown.js +90 -90
  17. package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +32 -32
  18. package/lib/components/Dropdowns/ManagedNavDropdown.js +118 -118
  19. package/lib/components/Dropdowns/UserDropdown.d.ts +6 -6
  20. package/lib/components/Dropdowns/UserDropdown.js +76 -76
  21. package/lib/components/Dropdowns/index.d.ts +3 -3
  22. package/lib/components/Dropdowns/index.js +12 -12
  23. package/lib/components/EntityOwnerList.d.ts +11 -11
  24. package/lib/components/EntityOwnerList.js +63 -63
  25. package/lib/components/ErrorBoundary.d.ts +11 -11
  26. package/lib/components/ErrorBoundary.js +74 -74
  27. package/lib/components/Forms/DateField.d.ts +13 -13
  28. package/lib/components/Forms/DateField.js +99 -99
  29. package/lib/components/Forms/TimeField.d.ts +11 -11
  30. package/lib/components/Forms/TimeField.js +112 -112
  31. package/lib/components/Forms/index.d.ts +2 -2
  32. package/lib/components/Forms/index.js +14 -14
  33. package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +10 -10
  34. package/lib/components/Groups/CreateEditCopySaveButtons.js +18 -18
  35. package/lib/components/Groups/GroupCreateOrEditCommonProps.d.ts +6 -6
  36. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
  37. package/lib/components/Groups/RosterSyncInfo.d.ts +5 -5
  38. package/lib/components/Groups/RosterSyncInfo.js +54 -54
  39. package/lib/components/HOC/AccessibleAppComponent.d.ts +15 -15
  40. package/lib/components/HOC/AccessibleAppComponent.js +135 -135
  41. package/lib/components/HOC/ActivityRequiredComponent.d.ts +105 -105
  42. package/lib/components/HOC/ActivityRequiredComponent.js +101 -101
  43. package/lib/components/HOC/AsyncComponent.d.ts +37 -37
  44. package/lib/components/HOC/AsyncComponent.js +136 -136
  45. package/lib/components/HOC/AuthenticatedComponent.d.ts +10 -10
  46. package/lib/components/HOC/AuthenticatedComponent.js +104 -104
  47. package/lib/components/HOC/CollectionComponent.d.ts +61 -61
  48. package/lib/components/HOC/CollectionComponent.js +175 -175
  49. package/lib/components/HOC/CollectionFirstItemComponent.d.ts +67 -67
  50. package/lib/components/HOC/CollectionFirstItemComponent.js +94 -94
  51. package/lib/components/HOC/CollectionItemComponent.d.ts +61 -61
  52. package/lib/components/HOC/CollectionItemComponent.js +172 -172
  53. package/lib/components/HOC/ConnectedModalComponent.d.ts +26 -26
  54. package/lib/components/HOC/ConnectedModalComponent.js +110 -110
  55. package/lib/components/HOC/DataDependentComponent.d.ts +61 -61
  56. package/lib/components/HOC/DataDependentComponent.js +90 -90
  57. package/lib/components/HOC/EntityComponent.d.ts +83 -83
  58. package/lib/components/HOC/EntityComponent.js +120 -120
  59. package/lib/components/HOC/FullscreenModalComponent.d.ts +74 -74
  60. package/lib/components/HOC/FullscreenModalComponent.js +173 -173
  61. package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +29 -29
  62. package/lib/components/HOC/GroupActivityRequiredComponent.js +49 -49
  63. package/lib/components/HOC/GuidComponent.d.ts +14 -14
  64. package/lib/components/HOC/GuidComponent.js +72 -72
  65. package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +172 -172
  66. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +72 -72
  67. package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +69 -69
  68. package/lib/components/HOC/ModelErrorRedirectComponent.js +101 -101
  69. package/lib/components/HOC/SearchPersistorComponent.d.ts +85 -85
  70. package/lib/components/HOC/SearchPersistorComponent.js +198 -198
  71. package/lib/components/HOC/UnauthenticatedComponent.d.ts +62 -62
  72. package/lib/components/HOC/UnauthenticatedComponent.js +90 -90
  73. package/lib/components/HOC/UserComponent.d.ts +3 -3
  74. package/lib/components/HOC/UserComponent.js +12 -12
  75. package/lib/components/Icons/IconExternalUser.d.ts +3 -3
  76. package/lib/components/Icons/IconExternalUser.js +24 -24
  77. package/lib/components/Icons/IconImpersonation.d.ts +3 -3
  78. package/lib/components/Icons/IconImpersonation.js +24 -24
  79. package/lib/components/Icons/IconStopImpersonating.d.ts +3 -3
  80. package/lib/components/Icons/IconStopImpersonating.js +24 -24
  81. package/lib/components/Impersonation/Button.d.ts +7 -7
  82. package/lib/components/Impersonation/Button.js +61 -61
  83. package/lib/components/Impersonation/Link.d.ts +7 -7
  84. package/lib/components/Impersonation/Link.js +58 -58
  85. package/lib/components/Impersonation/UserDetail.css +22 -22
  86. package/lib/components/Impersonation/UserDetail.d.ts +22 -22
  87. package/lib/components/Impersonation/UserDetail.js +23 -23
  88. package/lib/components/Loading.d.ts +4 -4
  89. package/lib/components/Loading.js +24 -24
  90. package/lib/components/Lti/Confirm.d.ts +8 -8
  91. package/lib/components/Lti/Confirm.js +37 -37
  92. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +15 -15
  93. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +83 -83
  94. package/lib/components/Lti/Launch.d.ts +21 -21
  95. package/lib/components/Lti/Launch.js +52 -52
  96. package/lib/components/Lti/LaunchGroup.d.ts +9 -9
  97. package/lib/components/Lti/LaunchGroup.js +45 -45
  98. package/lib/components/NewVersionAlert.d.ts +18 -18
  99. package/lib/components/NewVersionAlert.js +97 -97
  100. package/lib/components/NotFound.d.ts +3 -3
  101. package/lib/components/NotFound.js +28 -28
  102. package/lib/components/Notifications.d.ts +39 -39
  103. package/lib/components/Notifications.js +175 -175
  104. package/lib/components/RefreshIndicator/Bordered.d.ts +7 -7
  105. package/lib/components/RefreshIndicator/Bordered.js +35 -35
  106. package/lib/components/RefreshIndicator/Inline.d.ts +4 -4
  107. package/lib/components/RefreshIndicator/Inline.js +36 -36
  108. package/lib/components/RefreshIndicator/index.d.ts +21 -21
  109. package/lib/components/RefreshIndicator/index.js +116 -116
  110. package/lib/components/SearchControls.d.ts +14 -14
  111. package/lib/components/SearchControls.js +34 -34
  112. package/lib/components/SentryRoute.d.ts +3 -3
  113. package/lib/components/SentryRoute.js +25 -25
  114. package/lib/components/Tables/RoleFilter.d.ts +14 -14
  115. package/lib/components/Tables/RoleFilter.js +53 -53
  116. package/lib/components/Tables/TextFilter.d.ts +7 -7
  117. package/lib/components/Tables/TextFilter.js +26 -26
  118. package/lib/components/UserRoles/Add.d.ts +31 -31
  119. package/lib/components/UserRoles/Add.js +165 -165
  120. package/lib/components/UserRoles/RoleCell.d.ts +21 -21
  121. package/lib/components/UserRoles/RoleCell.js +53 -53
  122. package/lib/components/UserRoles/Select.d.ts +27 -27
  123. package/lib/components/UserRoles/Select.js +44 -44
  124. package/lib/components/UserRoles/Table.d.ts +16 -16
  125. package/lib/components/UserRoles/Table.js +99 -99
  126. package/lib/components/UserRoles/index.d.ts +76 -76
  127. package/lib/components/UserRoles/index.js +361 -361
  128. package/lib/constants/baseActivity.d.ts +25 -25
  129. package/lib/constants/baseActivity.js +29 -29
  130. package/lib/constants/baseRole.d.ts +9 -9
  131. package/lib/constants/baseRole.js +13 -13
  132. package/lib/constants/configuration.d.ts +8 -8
  133. package/lib/constants/configuration.js +39 -39
  134. package/lib/constants/externalProviderType.d.ts +5 -5
  135. package/lib/constants/externalProviderType.js +9 -9
  136. package/lib/constants/index.d.ts +8 -8
  137. package/lib/constants/index.js +20 -20
  138. package/lib/constants/mockData.d.ts +82 -84
  139. package/lib/constants/mockData.js +379 -379
  140. package/lib/constants/modelStatus.d.ts +10 -10
  141. package/lib/constants/modelStatus.js +14 -14
  142. package/lib/constants/notificationType.d.ts +7 -7
  143. package/lib/constants/notificationType.js +11 -11
  144. package/lib/constants/shard.d.ts +6 -6
  145. package/lib/constants/shard.js +10 -10
  146. package/lib/constants/tier.d.ts +6 -6
  147. package/lib/constants/tier.js +10 -10
  148. package/lib/constants/userRole.d.ts +2 -2
  149. package/lib/constants/userRole.js +21 -21
  150. package/lib/css/base/_base.css +98 -98
  151. package/lib/css/base/_typography.css +130 -130
  152. package/lib/css/components/_alert.css +85 -85
  153. package/lib/css/components/_bootstrap-grid.css +28 -28
  154. package/lib/css/components/_buttons.css +325 -325
  155. package/lib/css/components/_forms.css +91 -91
  156. package/lib/css/components/_menu.css +56 -56
  157. package/lib/css/components/_modals.css +41 -41
  158. package/lib/css/components/_tables.css +426 -426
  159. package/lib/css/components/_tags.css +12 -12
  160. package/lib/css/index-with-variables.css +14 -14
  161. package/lib/css/index.css +13 -13
  162. package/lib/css/utils/_border.css +463 -463
  163. package/lib/css/utils/_color.css +271 -271
  164. package/lib/css/utils/_display.css +312 -312
  165. package/lib/css/utils/_general.css +48 -48
  166. package/lib/css/utils/_icon.css +16 -16
  167. package/lib/css/utils/_text.css +24 -24
  168. package/lib/css/utils/_width.css +60 -60
  169. package/lib/css/variables.css +70 -70
  170. package/lib/endpointMappings.d.ts +4 -4
  171. package/lib/endpointMappings.js +173 -173
  172. package/lib/hooks/useCollection.d.ts +6 -6
  173. package/lib/hooks/useCollection.js +61 -61
  174. package/lib/hooks/useCollectionConfiguration.d.ts +27 -27
  175. package/lib/hooks/useCollectionConfiguration.js +67 -67
  176. package/lib/hooks/useCollectionItem.d.ts +6 -6
  177. package/lib/hooks/useCollectionItem.js +54 -54
  178. package/lib/hooks/useGuid.d.ts +4 -4
  179. package/lib/hooks/useGuid.js +14 -14
  180. package/lib/hooks/usePrevious.d.ts +5 -5
  181. package/lib/hooks/usePrevious.js +18 -18
  182. package/lib/index.d.ts +8 -8
  183. package/lib/index.js +30 -30
  184. package/lib/redux/actionCreator.d.ts +5 -5
  185. package/lib/redux/actionCreator.js +16 -16
  186. package/lib/redux/actions.d.ts +12 -12
  187. package/lib/redux/actions.js +30 -30
  188. package/lib/redux/configureReducers.d.ts +22 -22
  189. package/lib/redux/configureReducers.js +94 -94
  190. package/lib/redux/configureStore.d.ts +14 -14
  191. package/lib/redux/configureStore.js +118 -118
  192. package/lib/redux/helpers.d.ts +2 -2
  193. package/lib/redux/helpers.js +7 -7
  194. package/lib/redux/reducers/index.d.ts +4 -4
  195. package/lib/redux/reducers/index.js +12 -12
  196. package/lib/redux/reducers/modalsReducer.d.ts +8 -8
  197. package/lib/redux/reducers/modalsReducer.js +54 -54
  198. package/lib/redux/reducers/notificationsReducer.d.ts +9 -9
  199. package/lib/redux/reducers/notificationsReducer.js +27 -27
  200. package/lib/redux/reducers/searchReducer.d.ts +17 -17
  201. package/lib/redux/reducers/searchReducer.js +26 -26
  202. package/lib/redux/sagas/caliperSaga.d.ts +2 -2
  203. package/lib/redux/sagas/caliperSaga.js +296 -296
  204. package/lib/redux/sagas/clockOffsetSaga.d.ts +10 -10
  205. package/lib/redux/sagas/clockOffsetSaga.js +81 -81
  206. package/lib/redux/sagas/configurationSaga.d.ts +1 -1
  207. package/lib/redux/sagas/configurationSaga.js +48 -48
  208. package/lib/redux/sagas/errorSaga.d.ts +2 -2
  209. package/lib/redux/sagas/errorSaga.js +66 -66
  210. package/lib/redux/sagas/identityProviderSaga.d.ts +2 -2
  211. package/lib/redux/sagas/identityProviderSaga.js +91 -91
  212. package/lib/redux/sagas/initialDataLoadSaga.d.ts +1 -1
  213. package/lib/redux/sagas/initialDataLoadSaga.js +33 -33
  214. package/lib/redux/sagas/postLoginDataSaga.d.ts +9 -9
  215. package/lib/redux/sagas/postLoginDataSaga.js +87 -87
  216. package/lib/redux/sagas/postLoginRedirectSaga.d.ts +6 -6
  217. package/lib/redux/sagas/postLoginRedirectSaga.js +96 -96
  218. package/lib/redux/sagas/rootSaga.d.ts +5 -5
  219. package/lib/redux/sagas/rootSaga.js +144 -144
  220. package/lib/redux/sagas/sentrySaga.d.ts +1 -1
  221. package/lib/redux/sagas/sentrySaga.js +103 -103
  222. package/lib/services/codeProviderService.d.ts +3 -3
  223. package/lib/services/codeProviderService.js +36 -36
  224. package/lib/services/documentService.d.ts +10 -10
  225. package/lib/services/documentService.js +17 -17
  226. package/lib/services/persistenceService.d.ts +13 -13
  227. package/lib/services/persistenceService.js +45 -45
  228. package/lib/services/ticketProviderService.d.ts +3 -3
  229. package/lib/services/ticketProviderService.js +40 -40
  230. package/lib/services/windowService.d.ts +9 -9
  231. package/lib/services/windowService.js +15 -15
  232. package/lib/setupTests.d.ts +1 -1
  233. package/lib/setupTests.js +25 -25
  234. package/lib/startup.d.ts +29 -29
  235. package/lib/startup.js +128 -128
  236. package/lib/types/AppConfiguration.d.ts +32 -32
  237. package/lib/types/AppConfiguration.js +2 -2
  238. package/lib/types/Artifact.d.ts +14 -14
  239. package/lib/types/Artifact.js +9 -9
  240. package/lib/types/BaseReduxState.d.ts +57 -57
  241. package/lib/types/BaseReduxState.js +2 -2
  242. package/lib/types/Client.d.ts +6 -6
  243. package/lib/types/Client.js +2 -2
  244. package/lib/types/Collection.d.ts +175 -175
  245. package/lib/types/Collection.js +2 -2
  246. package/lib/types/Configuration.d.ts +12 -12
  247. package/lib/types/Configuration.js +2 -2
  248. package/lib/types/DeepLinkingResponseRequest.d.ts +4 -4
  249. package/lib/types/DeepLinkingResponseRequest.js +2 -2
  250. package/lib/types/DeletableModel.d.ts +4 -4
  251. package/lib/types/DeletableModel.js +2 -2
  252. package/lib/types/External.d.ts +31 -31
  253. package/lib/types/External.js +2 -2
  254. package/lib/types/Group.d.ts +19 -19
  255. package/lib/types/Group.js +2 -2
  256. package/lib/types/IdentityProvider.d.ts +11 -11
  257. package/lib/types/IdentityProvider.js +2 -2
  258. package/lib/types/LtiLaunch.d.ts +20 -20
  259. package/lib/types/LtiLaunch.js +2 -2
  260. package/lib/types/NameOnlyEntity.d.ts +3 -3
  261. package/lib/types/NameOnlyEntity.js +2 -2
  262. package/lib/types/Notification.d.ts +15 -15
  263. package/lib/types/Notification.js +2 -2
  264. package/lib/types/OptionalRecord.d.ts +4 -4
  265. package/lib/types/OptionalRecord.js +2 -2
  266. package/lib/types/OwnerSchedule.d.ts +9 -9
  267. package/lib/types/OwnerSchedule.js +2 -2
  268. package/lib/types/PropertyOfType.d.ts +12 -12
  269. package/lib/types/PropertyOfType.js +2 -2
  270. package/lib/types/RoleDescription.d.ts +4 -4
  271. package/lib/types/RoleDescription.js +2 -2
  272. package/lib/types/Search.d.ts +11 -11
  273. package/lib/types/Search.js +2 -2
  274. package/lib/types/SimpleLocation.d.ts +46 -46
  275. package/lib/types/SimpleLocation.js +2 -2
  276. package/lib/types/UniTime.d.ts +17 -17
  277. package/lib/types/UniTime.js +2 -2
  278. package/lib/types/User.d.ts +68 -68
  279. package/lib/types/User.js +2 -2
  280. package/lib/types/UserRole.d.ts +19 -19
  281. package/lib/types/UserRole.js +2 -2
  282. package/lib/types/index.d.ts +21 -21
  283. package/lib/types/index.js +33 -33
  284. package/lib/utils/baseActivity.d.ts +63 -63
  285. package/lib/utils/baseActivity.js +155 -155
  286. package/lib/utils/baseRole.d.ts +2 -2
  287. package/lib/utils/baseRole.js +38 -38
  288. package/lib/utils/collection.d.ts +43 -43
  289. package/lib/utils/collection.js +337 -337
  290. package/lib/utils/date.d.ts +162 -162
  291. package/lib/utils/date.js +401 -401
  292. package/lib/utils/domainIdentifier.d.ts +2 -2
  293. package/lib/utils/domainIdentifier.js +12 -12
  294. package/lib/utils/entityUserRole.d.ts +3 -3
  295. package/lib/utils/entityUserRole.js +7 -7
  296. package/lib/utils/externalGroup.d.ts +4 -4
  297. package/lib/utils/externalGroup.js +32 -32
  298. package/lib/utils/externalProviders.d.ts +2 -2
  299. package/lib/utils/externalProviders.js +11 -11
  300. package/lib/utils/externalTerms.d.ts +2 -2
  301. package/lib/utils/externalTerms.js +10 -10
  302. package/lib/utils/group.d.ts +15 -15
  303. package/lib/utils/group.js +15 -15
  304. package/lib/utils/groupDates.d.ts +9 -9
  305. package/lib/utils/groupDates.js +52 -52
  306. package/lib/utils/groupRoles.d.ts +8 -8
  307. package/lib/utils/groupRoles.js +42 -42
  308. package/lib/utils/logger.d.ts +10 -10
  309. package/lib/utils/logger.js +34 -34
  310. package/lib/utils/lti.d.ts +3 -3
  311. package/lib/utils/lti.js +9 -9
  312. package/lib/utils/model.d.ts +15 -15
  313. package/lib/utils/model.js +58 -58
  314. package/lib/utils/number.d.ts +13 -13
  315. package/lib/utils/number.js +32 -32
  316. package/lib/utils/promise.d.ts +5 -5
  317. package/lib/utils/promise.js +17 -17
  318. package/lib/utils/route.d.ts +5 -5
  319. package/lib/utils/route.js +69 -69
  320. package/lib/utils/shard.d.ts +3 -3
  321. package/lib/utils/shard.js +45 -45
  322. package/lib/utils/sort.d.ts +11 -11
  323. package/lib/utils/sort.js +69 -69
  324. package/lib/utils/string.d.ts +2 -2
  325. package/lib/utils/string.js +16 -16
  326. package/lib/utils/timezone.d.ts +2 -2
  327. package/lib/utils/timezone.js +32 -32
  328. package/lib/utils/url.d.ts +23 -23
  329. package/lib/utils/url.js +163 -163
  330. package/lib/utils/user.d.ts +8 -8
  331. package/lib/utils/user.js +73 -73
  332. package/lib/utils/userRole.d.ts +21 -21
  333. package/lib/utils/userRole.js +48 -48
  334. package/package.json +192 -192
@@ -1,361 +1,361 @@
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
18
- }) : (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- o[k2] = m[k];
21
- }));
22
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
- Object.defineProperty(o, "default", { enumerable: true, value: v });
24
- }) : function(o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = (this && this.__importStar) || function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.mapStateToProps = exports.UserRoles = void 0;
39
- var lodash_1 = require("lodash");
40
- var react_1 = __importStar(require("react"));
41
- var react_bootstrap_1 = require("react-bootstrap");
42
- var react_redux_1 = require("react-redux");
43
- var studiokit_net_js_1 = require("studiokit-net-js");
44
- var uuid_1 = require("uuid");
45
- var AlertDialog_1 = __importDefault(require("../../components/AlertDialog"));
46
- var Loading_1 = __importDefault(require("../../components/Loading"));
47
- var Add_1 = __importDefault(require("../../components/UserRoles/Add"));
48
- var Table_1 = require("../../components/UserRoles/Table");
49
- var baseRole_1 = __importDefault(require("../../constants/baseRole"));
50
- var modelStatus_1 = __importDefault(require("../../constants/modelStatus"));
51
- var actionCreator_1 = require("../../redux/actionCreator");
52
- var baseActivity_1 = require("../../utils/baseActivity");
53
- var baseRole_2 = require("../../utils/baseRole");
54
- var domainIdentifier_1 = require("../../utils/domainIdentifier");
55
- var entityUserRole_1 = require("../../utils/entityUserRole");
56
- var sort_1 = require("../../utils/sort");
57
- var user_1 = require("../../utils/user");
58
- var AlertWithIcon_1 = __importDefault(require("../AlertWithIcon"));
59
- /**
60
- * Component used to manage either UserRoles (global roles) or EntityUserRoles.
61
- */
62
- var UserRoles = /** @class */ (function (_super) {
63
- __extends(UserRoles, _super);
64
- function UserRoles() {
65
- var _this = _super !== null && _super.apply(this, arguments) || this;
66
- _this.state = {
67
- sortedUsers: [],
68
- // add
69
- addUsersHookId: uuid_1.v4(),
70
- isAddingUsers: false,
71
- identifiersToAdd: undefined,
72
- roleForAdd: undefined,
73
- shouldResetAddForm: false,
74
- // remove
75
- shouldShowRemoveDialog: false,
76
- userToRemove: undefined,
77
- roleForRemove: undefined,
78
- // messages
79
- successMessage: undefined,
80
- existingUsersMessage: undefined,
81
- failMessage: undefined
82
- };
83
- _this.setStateFromProps = function (props) {
84
- var userRoles = props.modelArray, filterUsers = props.filterUsers;
85
- _this.setState({
86
- sortedUsers: filterUsers(userRoles).sort(sort_1.sortByNames)
87
- });
88
- };
89
- _this.textForRole = function (role) {
90
- return _this.props.textForRole ? _this.props.textForRole(role) : baseRole_2.textForBaseRole(role);
91
- };
92
- _this.singularArticleForRole = function (role) {
93
- return _this.props.singularArticleForRole
94
- ? _this.props.singularArticleForRole(role)
95
- : baseRole_2.singularArticleForBaseRole(role);
96
- };
97
- //#region Add Users
98
- _this.addUsers = function (ids, role) {
99
- var entity = _this.props.entity;
100
- _this.setState({
101
- identifiersToAdd: ids,
102
- roleForAdd: role,
103
- successMessage: undefined,
104
- failMessage: undefined,
105
- shouldResetAddForm: false,
106
- isAddingUsers: true
107
- });
108
- var addUsersHookId = _this.state.addUsersHookId;
109
- studiokit_net_js_1.hooks.registerNoStoreActionHook(addUsersHookId, function (data) {
110
- studiokit_net_js_1.hooks.unregisterNoStoreActionHook(addUsersHookId);
111
- _this.didAdd(data);
112
- });
113
- var rootModelName = entityUserRole_1.getRootModelName(_this.props);
114
- actionCreator_1.dispatchAction(studiokit_net_js_1.NET_ACTION.DATA_REQUESTED, {
115
- modelName: (rootModelName ? rootModelName + "." : '') + "addUserRoles",
116
- pathParams: entity ? [entity.id] : undefined,
117
- body: {
118
- entityId: entity ? entity.id : undefined,
119
- identifiers: ids,
120
- roleName: role
121
- },
122
- noStore: true,
123
- guid: addUsersHookId
124
- });
125
- };
126
- _this.didAdd = function (data) {
127
- var _a = _this.props, entityName = _a.entityName, load = _a.load, onChange = _a.onChange;
128
- var _b = _this.state, roleForAdd = _b.roleForAdd, identifiersToAdd = _b.identifiersToAdd;
129
- if (!roleForAdd || !identifiersToAdd || identifiersToAdd.length === 0) {
130
- throw new Error('didAdd was called in the incorrect state');
131
- }
132
- if (!data || data.errorData) {
133
- // tslint:disable-next-line: no-shadowed-variable
134
- var failMessage_1 = "The following identifiers were not added" + (entityName ? " to your " + entityName : '') + ":\r\n" + identifiersToAdd.join('\r\n');
135
- _this.setState({
136
- shouldResetAddForm: true,
137
- isAddingUsers: false,
138
- identifiersToAdd: undefined,
139
- roleForAdd: undefined,
140
- failMessage: failMessage_1
141
- });
142
- return;
143
- }
144
- var _c = data, addedUsers = _c.addedUsers, existingUsers = _c.existingUsers, invalidIdentifiers = _c.invalidIdentifiers, allowedDomains = _c.allowedDomains, invalidDomainIdentifiers = _c.invalidDomainIdentifiers;
145
- var roleString = _this.textForRole(roleForAdd).toLowerCase();
146
- var singularArticleString = _this.singularArticleForRole(roleForAdd);
147
- var addedNames = !!addedUsers && addedUsers.length > 0
148
- ? addedUsers
149
- .map(function (au) {
150
- return "" + user_1.displayName(au) + (au.uid ? " (" + au.uid + ")" : '');
151
- })
152
- .join('\r\n')
153
- : undefined;
154
- var successMessage = addedNames
155
- ? "The following " + roleString + (addedUsers.length > 1 ? 's were' : ' was') + " successfully added" + (entityName ? " to your " + entityName : '') + ":\r\n" + addedNames
156
- : undefined;
157
- var unchangedNames = !!existingUsers && existingUsers.length > 0
158
- ? existingUsers.map(function (eu) { return "" + user_1.displayName(eu) + (eu.uid ? " (" + eu.uid + ")" : ''); }).join('\r\n')
159
- : undefined;
160
- var hasMultipleExistingUsers = existingUsers.length > 1;
161
- var existingUsersMessage = unchangedNames
162
- ? "The following " + (hasMultipleExistingUsers ? 'people were' : 'person was') + " already " + (entityName
163
- ? "in your " + entityName + " as " + (hasMultipleExistingUsers ? '' : singularArticleString + " ")
164
- : hasMultipleExistingUsers
165
- ? ''
166
- : singularArticleString + " ") + roleString + (hasMultipleExistingUsers ? 's' : '') + ":\r\n" + unchangedNames
167
- : undefined;
168
- var failMessage = !!invalidIdentifiers && invalidIdentifiers.length > 0
169
- ? "The following " + domainIdentifier_1.getDomainIdentifierTypePluralString() + " are invalid:\r\n" + invalidIdentifiers.join('\r\n')
170
- : undefined;
171
- if (!!invalidDomainIdentifiers && invalidDomainIdentifiers.length > 0) {
172
- failMessage = (failMessage ? failMessage + "\r\n" : '') + "The following " + domainIdentifier_1.getDomainIdentifierTypePluralString() + " do not match the allowed domains of " + allowedDomains.replace(',', ', ') + ":\r\n" + invalidDomainIdentifiers.join('\r\n');
173
- }
174
- _this.setState({
175
- shouldResetAddForm: true,
176
- isAddingUsers: false,
177
- identifiersToAdd: undefined,
178
- roleForAdd: undefined,
179
- successMessage: successMessage,
180
- existingUsersMessage: existingUsersMessage,
181
- failMessage: failMessage
182
- });
183
- // only reload if we had some successful adds
184
- if (addedNames) {
185
- load();
186
- if (onChange) {
187
- onChange();
188
- }
189
- }
190
- };
191
- //#endregion Add Users
192
- //#region Remove User
193
- _this.alertRemoveUser = function (userToRemove, roleForRemove) {
194
- _this.setState({
195
- userToRemove: userToRemove,
196
- shouldShowRemoveDialog: true,
197
- roleForRemove: roleForRemove
198
- });
199
- };
200
- _this.removeUserTitle = function (roleForRemove) {
201
- return "Remove " + _this.textForRole(roleForRemove);
202
- };
203
- _this.renderRemoveUserDescription = function (userToRemove, role, warning) {
204
- var _a = _this.props, entity = _a.entity, externalProviders = _a.externalProviders;
205
- var group = entity && entity.externalGroups ? entity : undefined;
206
- var roleString = _this.textForRole(role).toLowerCase();
207
- var singularArticleString = _this.singularArticleForRole(role);
208
- var defaultWarning = warning !== null && warning !== void 0 ? warning : (react_1.default.createElement("p", { className: "ma0" },
209
- "Are you sure you want to ",
210
- react_1.default.createElement("strong", null,
211
- "remove ",
212
- user_1.displayName(userToRemove)),
213
- " as ",
214
- singularArticleString,
215
- ' ',
216
- roleString,
217
- "?"));
218
- var externalGroupsToRemove = group === null || group === void 0 ? void 0 : group.externalGroups.filter(function (eg) { return eg.userId === userToRemove.id; });
219
- if (!externalGroupsToRemove || externalGroupsToRemove.length === 0 || role !== baseRole_1.default.GROUP_OWNER) {
220
- return defaultWarning;
221
- }
222
- var externalGroupsToRemoveWithRosterSync = externalGroupsToRemove.filter(function (eg) { var _a; return (_a = externalProviders === null || externalProviders === void 0 ? void 0 : externalProviders[eg.externalProviderId]) === null || _a === void 0 ? void 0 : _a.rosterSyncEnabled; });
223
- return (react_1.default.createElement("div", null,
224
- react_1.default.createElement("p", null,
225
- "The following course sections will be ",
226
- react_1.default.createElement("strong", null, "disconnected"),
227
- ".",
228
- ' ',
229
- externalGroupsToRemoveWithRosterSync.length > 0 && (react_1.default.createElement("span", null,
230
- "Any automatically added students will be ",
231
- react_1.default.createElement("strong", null, "removed"),
232
- "."))),
233
- react_1.default.createElement("ul", null, externalGroupsToRemove.map(function (eg) { return (react_1.default.createElement("li", { key: eg.id }, eg.description)); })),
234
- defaultWarning));
235
- };
236
- _this.removeUser = function (shouldRemove) {
237
- var entity = _this.props.entity;
238
- var _a = _this.state, userToRemove = _a.userToRemove, roleForRemove = _a.roleForRemove;
239
- if (userToRemove === undefined) {
240
- throw new Error('removeUser was called without setting userToRemove in state');
241
- }
242
- if (roleForRemove === undefined) {
243
- throw new Error('removeUser was called without setting rollForRemove in state');
244
- }
245
- _this.setState({
246
- shouldShowRemoveDialog: false,
247
- successMessage: undefined,
248
- failMessage: undefined,
249
- // clear if cancelled
250
- userToRemove: shouldRemove ? userToRemove : undefined
251
- });
252
- if (!shouldRemove) {
253
- return;
254
- }
255
- _this.props.delete({
256
- id: userToRemove.id,
257
- body: entity ? { roleName: roleForRemove, entityId: entity.id } : undefined
258
- });
259
- };
260
- _this.didRemove = function (isSuccess) {
261
- var _a = _this.props, entityName = _a.entityName, load = _a.load, onChange = _a.onChange;
262
- var userToRemove = _this.state.userToRemove;
263
- if (userToRemove === undefined) {
264
- throw new Error('didRemove was called without setting state correctly');
265
- }
266
- var name = user_1.displayName(userToRemove);
267
- if (!isSuccess) {
268
- var failMessage = "Oops! There was an error removing " + name + (entityName ? " from your " + entityName : '') + ". Please try again.";
269
- _this.setState({
270
- userToRemove: undefined,
271
- failMessage: failMessage
272
- });
273
- return;
274
- }
275
- var successMessage = name + " was successfully removed" + (entityName ? " from your " + entityName : '') + ".";
276
- _this.setState({
277
- userToRemove: undefined,
278
- successMessage: successMessage
279
- });
280
- load();
281
- if (onChange) {
282
- onChange();
283
- }
284
- };
285
- return _this;
286
- }
287
- UserRoles.prototype.componentDidMount = function () {
288
- this.setStateFromProps(this.props);
289
- var addUsersHookId = this.state.addUsersHookId;
290
- studiokit_net_js_1.hooks.unregisterNoStoreActionHook(addUsersHookId);
291
- };
292
- UserRoles.prototype.componentDidUpdate = function (prevProps) {
293
- var prevModelArray = prevProps.modelArray, prevModelStatus = prevProps.modelStatus;
294
- var _a = this.props, modelArray = _a.modelArray, modelStatus = _a.modelStatus, entityName = _a.entityName;
295
- if (!lodash_1.isEqual(prevModelArray, modelArray)) {
296
- this.setStateFromProps(this.props);
297
- }
298
- // loading error
299
- if ((prevModelStatus === modelStatus_1.default.UNINITIALIZED || prevModelStatus === modelStatus_1.default.LOADING) &&
300
- modelStatus === modelStatus_1.default.ERROR) {
301
- this.setState({
302
- failMessage: "Oops! There was an error loading" + (entityName ? " the people for your " + entityName : '') + ".\r\nPlease try again."
303
- });
304
- }
305
- // removing
306
- if (prevModelStatus === modelStatus_1.default.DELETING && modelStatus !== modelStatus_1.default.DELETING) {
307
- this.didRemove(modelStatus === modelStatus_1.default.READY);
308
- }
309
- };
310
- //#endregion Remove User
311
- UserRoles.prototype.render = function () {
312
- var _this = this;
313
- var _a = this.props, modelStatus = _a.modelStatus, canModify = _a.canModify, canModifySelf = _a.canModifySelf, entityName = _a.entityName, renderTableDescription = _a.renderTableDescription, defaultRole = _a.defaultRole, roleDescriptions = _a.roleDescriptions, renderAddDescription = _a.renderAddDescription, disabled = _a.disabled, isDeleteDisabled = _a.isDeleteDisabled, addRoleBlacklist = _a.addRoleBlacklist;
314
- var _b = this.state, isAddingUsers = _b.isAddingUsers, sortedUsers = _b.sortedUsers, shouldResetAddForm = _b.shouldResetAddForm, shouldShowRemoveDialog = _b.shouldShowRemoveDialog, userToRemove = _b.userToRemove, roleForRemove = _b.roleForRemove, successMessage = _b.successMessage, existingUsersMessage = _b.existingUsersMessage, failMessage = _b.failMessage;
315
- var addableRoleDescriptions = addRoleBlacklist
316
- ? lodash_1.pickBy(roleDescriptions, function (_, key) { return !addRoleBlacklist.includes(key); })
317
- : roleDescriptions;
318
- var roles = Object.keys(roleDescriptions);
319
- return (react_1.default.createElement(react_1.default.Fragment, null,
320
- !!successMessage && (react_1.default.createElement(AlertWithIcon_1.default, { id: "successMessageAlert", variant: "success", dismissible: true, onClose: function () {
321
- return _this.setState({
322
- successMessage: undefined
323
- });
324
- } },
325
- react_1.default.createElement("p", { className: "pre-wrap" }, successMessage))),
326
- !!existingUsersMessage && (react_1.default.createElement(AlertWithIcon_1.default, { id: "existingUsersMessageAlert", variant: "info", dismissible: true, onClose: function () {
327
- return _this.setState({
328
- existingUsersMessage: undefined
329
- });
330
- } },
331
- react_1.default.createElement("p", { className: "pre-wrap" }, existingUsersMessage))),
332
- !!failMessage && (react_1.default.createElement(AlertWithIcon_1.default, { id: "failMessageAlert", variant: "warning", dismissible: true, onClose: function () {
333
- return _this.setState({
334
- failMessage: undefined
335
- });
336
- } },
337
- react_1.default.createElement("p", { className: "pre-wrap" }, failMessage))),
338
- canModify && (react_1.default.createElement(Add_1.default, { id: "entityUserRolesAdd", entityName: entityName, addUsersToRole: this.addUsers, shouldReset: shouldResetAddForm, isAddingUsersToRole: isAddingUsers, defaultRole: defaultRole, roleDescriptions: addableRoleDescriptions, renderAddDescription: renderAddDescription, disabled: disabled, textForRole: this.textForRole })),
339
- !!renderTableDescription && renderTableDescription(canModify),
340
- react_1.default.createElement(react_bootstrap_1.Row, { className: "mt3" },
341
- react_1.default.createElement(react_bootstrap_1.Col, { xs: 12 }, modelStatus === modelStatus_1.default.LOADING ? (react_1.default.createElement(Loading_1.default, null)) : sortedUsers.length > 0 ? (react_1.default.createElement(Table_1.UserRolesTable, { id: "entityUserRolesTable", users: sortedUsers, readOnly: !canModify || isDeleteDisabled, roles: roles,
342
- // Assumes the default is the groupOwner, assignment/assessmentOwner, rubricOwner, problemOwner etc.
343
- entityOwnerRole: defaultRole, canModifySelf: canModifySelf, removeUserFromRole: this.alertRemoveUser, textForRole: this.textForRole })) : null)),
344
- !!userToRemove && !!roleForRemove && (react_1.default.createElement(AlertDialog_1.default, { id: "removeUserAlert", isOpen: shouldShowRemoveDialog, title: this.removeUserTitle(roleForRemove), description: this.renderRemoveUserDescription(userToRemove, roleForRemove), onDestroy: function () { return _this.removeUser(true); }, destroyText: "Yes, remove the user", onCancel: function () { return _this.removeUser(false); }, cancelText: "No, I changed my mind" }))));
345
- };
346
- return UserRoles;
347
- }(react_1.Component));
348
- exports.UserRoles = UserRoles;
349
- var mapStateToProps = function (state, ownProps) {
350
- var canModifyGlobally = baseActivity_1.canPerformActivityGlobally(ownProps.modifyUserRoleActivityName, baseActivity_1.defaultOptions(state));
351
- return {
352
- canModifySelf: Object.prototype.hasOwnProperty.call(ownProps, 'canModifySelf')
353
- ? ownProps.canModifySelf
354
- : canModifyGlobally,
355
- canModify: ownProps.entity
356
- ? baseActivity_1.canPerformActivityGloballyOrOnEntity(ownProps.modifyUserRoleActivityName, baseActivity_1.defaultOptions(state, ownProps, 'entity'))
357
- : canModifyGlobally
358
- };
359
- };
360
- exports.mapStateToProps = mapStateToProps;
361
- exports.default = react_redux_1.connect(exports.mapStateToProps)(UserRoles);
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.mapStateToProps = exports.UserRoles = void 0;
39
+ var lodash_1 = require("lodash");
40
+ var react_1 = __importStar(require("react"));
41
+ var react_bootstrap_1 = require("react-bootstrap");
42
+ var react_redux_1 = require("react-redux");
43
+ var studiokit_net_js_1 = require("studiokit-net-js");
44
+ var uuid_1 = require("uuid");
45
+ var AlertDialog_1 = __importDefault(require("../../components/AlertDialog"));
46
+ var Loading_1 = __importDefault(require("../../components/Loading"));
47
+ var Add_1 = __importDefault(require("../../components/UserRoles/Add"));
48
+ var Table_1 = require("../../components/UserRoles/Table");
49
+ var baseRole_1 = __importDefault(require("../../constants/baseRole"));
50
+ var modelStatus_1 = __importDefault(require("../../constants/modelStatus"));
51
+ var actionCreator_1 = require("../../redux/actionCreator");
52
+ var baseActivity_1 = require("../../utils/baseActivity");
53
+ var baseRole_2 = require("../../utils/baseRole");
54
+ var domainIdentifier_1 = require("../../utils/domainIdentifier");
55
+ var entityUserRole_1 = require("../../utils/entityUserRole");
56
+ var sort_1 = require("../../utils/sort");
57
+ var user_1 = require("../../utils/user");
58
+ var AlertWithIcon_1 = __importDefault(require("../AlertWithIcon"));
59
+ /**
60
+ * Component used to manage either UserRoles (global roles) or EntityUserRoles.
61
+ */
62
+ var UserRoles = /** @class */ (function (_super) {
63
+ __extends(UserRoles, _super);
64
+ function UserRoles() {
65
+ var _this = _super !== null && _super.apply(this, arguments) || this;
66
+ _this.state = {
67
+ sortedUsers: [],
68
+ // add
69
+ addUsersHookId: uuid_1.v4(),
70
+ isAddingUsers: false,
71
+ identifiersToAdd: undefined,
72
+ roleForAdd: undefined,
73
+ shouldResetAddForm: false,
74
+ // remove
75
+ shouldShowRemoveDialog: false,
76
+ userToRemove: undefined,
77
+ roleForRemove: undefined,
78
+ // messages
79
+ successMessage: undefined,
80
+ existingUsersMessage: undefined,
81
+ failMessage: undefined
82
+ };
83
+ _this.setStateFromProps = function (props) {
84
+ var userRoles = props.modelArray, filterUsers = props.filterUsers;
85
+ _this.setState({
86
+ sortedUsers: filterUsers(userRoles).sort(sort_1.sortByNames)
87
+ });
88
+ };
89
+ _this.textForRole = function (role) {
90
+ return _this.props.textForRole ? _this.props.textForRole(role) : baseRole_2.textForBaseRole(role);
91
+ };
92
+ _this.singularArticleForRole = function (role) {
93
+ return _this.props.singularArticleForRole
94
+ ? _this.props.singularArticleForRole(role)
95
+ : baseRole_2.singularArticleForBaseRole(role);
96
+ };
97
+ //#region Add Users
98
+ _this.addUsers = function (ids, role) {
99
+ var entity = _this.props.entity;
100
+ _this.setState({
101
+ identifiersToAdd: ids,
102
+ roleForAdd: role,
103
+ successMessage: undefined,
104
+ failMessage: undefined,
105
+ shouldResetAddForm: false,
106
+ isAddingUsers: true
107
+ });
108
+ var addUsersHookId = _this.state.addUsersHookId;
109
+ studiokit_net_js_1.hooks.registerNoStoreActionHook(addUsersHookId, function (data) {
110
+ studiokit_net_js_1.hooks.unregisterNoStoreActionHook(addUsersHookId);
111
+ _this.didAdd(data);
112
+ });
113
+ var rootModelName = entityUserRole_1.getRootModelName(_this.props);
114
+ actionCreator_1.dispatchAction(studiokit_net_js_1.NET_ACTION.DATA_REQUESTED, {
115
+ modelName: (rootModelName ? rootModelName + "." : '') + "addUserRoles",
116
+ pathParams: entity ? [entity.id] : undefined,
117
+ body: {
118
+ entityId: entity ? entity.id : undefined,
119
+ identifiers: ids,
120
+ roleName: role
121
+ },
122
+ noStore: true,
123
+ guid: addUsersHookId
124
+ });
125
+ };
126
+ _this.didAdd = function (data) {
127
+ var _a = _this.props, entityName = _a.entityName, load = _a.load, onChange = _a.onChange;
128
+ var _b = _this.state, roleForAdd = _b.roleForAdd, identifiersToAdd = _b.identifiersToAdd;
129
+ if (!roleForAdd || !identifiersToAdd || identifiersToAdd.length === 0) {
130
+ throw new Error('didAdd was called in the incorrect state');
131
+ }
132
+ if (!data || data.errorData) {
133
+ // tslint:disable-next-line: no-shadowed-variable
134
+ var failMessage_1 = "The following identifiers were not added" + (entityName ? " to your " + entityName : '') + ":\r\n" + identifiersToAdd.join('\r\n');
135
+ _this.setState({
136
+ shouldResetAddForm: true,
137
+ isAddingUsers: false,
138
+ identifiersToAdd: undefined,
139
+ roleForAdd: undefined,
140
+ failMessage: failMessage_1
141
+ });
142
+ return;
143
+ }
144
+ var _c = data, addedUsers = _c.addedUsers, existingUsers = _c.existingUsers, invalidIdentifiers = _c.invalidIdentifiers, allowedDomains = _c.allowedDomains, invalidDomainIdentifiers = _c.invalidDomainIdentifiers;
145
+ var roleString = _this.textForRole(roleForAdd).toLowerCase();
146
+ var singularArticleString = _this.singularArticleForRole(roleForAdd);
147
+ var addedNames = !!addedUsers && addedUsers.length > 0
148
+ ? addedUsers
149
+ .map(function (au) {
150
+ return "" + user_1.displayName(au) + (au.uid ? " (" + au.uid + ")" : '');
151
+ })
152
+ .join('\r\n')
153
+ : undefined;
154
+ var successMessage = addedNames
155
+ ? "The following " + roleString + (addedUsers.length > 1 ? 's were' : ' was') + " successfully added" + (entityName ? " to your " + entityName : '') + ":\r\n" + addedNames
156
+ : undefined;
157
+ var unchangedNames = !!existingUsers && existingUsers.length > 0
158
+ ? existingUsers.map(function (eu) { return "" + user_1.displayName(eu) + (eu.uid ? " (" + eu.uid + ")" : ''); }).join('\r\n')
159
+ : undefined;
160
+ var hasMultipleExistingUsers = existingUsers.length > 1;
161
+ var existingUsersMessage = unchangedNames
162
+ ? "The following " + (hasMultipleExistingUsers ? 'people were' : 'person was') + " already " + (entityName
163
+ ? "in your " + entityName + " as " + (hasMultipleExistingUsers ? '' : singularArticleString + " ")
164
+ : hasMultipleExistingUsers
165
+ ? ''
166
+ : singularArticleString + " ") + roleString + (hasMultipleExistingUsers ? 's' : '') + ":\r\n" + unchangedNames
167
+ : undefined;
168
+ var failMessage = !!invalidIdentifiers && invalidIdentifiers.length > 0
169
+ ? "The following " + domainIdentifier_1.getDomainIdentifierTypePluralString() + " are invalid:\r\n" + invalidIdentifiers.join('\r\n')
170
+ : undefined;
171
+ if (!!invalidDomainIdentifiers && invalidDomainIdentifiers.length > 0) {
172
+ failMessage = (failMessage ? failMessage + "\r\n" : '') + "The following " + domainIdentifier_1.getDomainIdentifierTypePluralString() + " do not match the allowed domains of " + allowedDomains.replace(',', ', ') + ":\r\n" + invalidDomainIdentifiers.join('\r\n');
173
+ }
174
+ _this.setState({
175
+ shouldResetAddForm: true,
176
+ isAddingUsers: false,
177
+ identifiersToAdd: undefined,
178
+ roleForAdd: undefined,
179
+ successMessage: successMessage,
180
+ existingUsersMessage: existingUsersMessage,
181
+ failMessage: failMessage
182
+ });
183
+ // only reload if we had some successful adds
184
+ if (addedNames) {
185
+ load();
186
+ if (onChange) {
187
+ onChange();
188
+ }
189
+ }
190
+ };
191
+ //#endregion Add Users
192
+ //#region Remove User
193
+ _this.alertRemoveUser = function (userToRemove, roleForRemove) {
194
+ _this.setState({
195
+ userToRemove: userToRemove,
196
+ shouldShowRemoveDialog: true,
197
+ roleForRemove: roleForRemove
198
+ });
199
+ };
200
+ _this.removeUserTitle = function (roleForRemove) {
201
+ return "Remove " + _this.textForRole(roleForRemove);
202
+ };
203
+ _this.renderRemoveUserDescription = function (userToRemove, role, warning) {
204
+ var _a = _this.props, entity = _a.entity, externalProviders = _a.externalProviders;
205
+ var group = entity && entity.externalGroups ? entity : undefined;
206
+ var roleString = _this.textForRole(role).toLowerCase();
207
+ var singularArticleString = _this.singularArticleForRole(role);
208
+ var defaultWarning = warning !== null && warning !== void 0 ? warning : (react_1.default.createElement("p", { className: "ma0" },
209
+ "Are you sure you want to ",
210
+ react_1.default.createElement("strong", null,
211
+ "remove ",
212
+ user_1.displayName(userToRemove)),
213
+ " as ",
214
+ singularArticleString,
215
+ ' ',
216
+ roleString,
217
+ "?"));
218
+ var externalGroupsToRemove = group === null || group === void 0 ? void 0 : group.externalGroups.filter(function (eg) { return eg.userId === userToRemove.id; });
219
+ if (!externalGroupsToRemove || externalGroupsToRemove.length === 0 || role !== baseRole_1.default.GROUP_OWNER) {
220
+ return defaultWarning;
221
+ }
222
+ var externalGroupsToRemoveWithRosterSync = externalGroupsToRemove.filter(function (eg) { var _a; return (_a = externalProviders === null || externalProviders === void 0 ? void 0 : externalProviders[eg.externalProviderId]) === null || _a === void 0 ? void 0 : _a.rosterSyncEnabled; });
223
+ return (react_1.default.createElement("div", null,
224
+ react_1.default.createElement("p", null,
225
+ "The following course sections will be ",
226
+ react_1.default.createElement("strong", null, "disconnected"),
227
+ ".",
228
+ ' ',
229
+ externalGroupsToRemoveWithRosterSync.length > 0 && (react_1.default.createElement("span", null,
230
+ "Any automatically added students will be ",
231
+ react_1.default.createElement("strong", null, "removed"),
232
+ "."))),
233
+ react_1.default.createElement("ul", null, externalGroupsToRemove.map(function (eg) { return (react_1.default.createElement("li", { key: eg.id }, eg.description)); })),
234
+ defaultWarning));
235
+ };
236
+ _this.removeUser = function (shouldRemove) {
237
+ var entity = _this.props.entity;
238
+ var _a = _this.state, userToRemove = _a.userToRemove, roleForRemove = _a.roleForRemove;
239
+ if (userToRemove === undefined) {
240
+ throw new Error('removeUser was called without setting userToRemove in state');
241
+ }
242
+ if (roleForRemove === undefined) {
243
+ throw new Error('removeUser was called without setting rollForRemove in state');
244
+ }
245
+ _this.setState({
246
+ shouldShowRemoveDialog: false,
247
+ successMessage: undefined,
248
+ failMessage: undefined,
249
+ // clear if cancelled
250
+ userToRemove: shouldRemove ? userToRemove : undefined
251
+ });
252
+ if (!shouldRemove) {
253
+ return;
254
+ }
255
+ _this.props.delete({
256
+ id: userToRemove.id,
257
+ body: entity ? { roleName: roleForRemove, entityId: entity.id } : undefined
258
+ });
259
+ };
260
+ _this.didRemove = function (isSuccess) {
261
+ var _a = _this.props, entityName = _a.entityName, load = _a.load, onChange = _a.onChange;
262
+ var userToRemove = _this.state.userToRemove;
263
+ if (userToRemove === undefined) {
264
+ throw new Error('didRemove was called without setting state correctly');
265
+ }
266
+ var name = user_1.displayName(userToRemove);
267
+ if (!isSuccess) {
268
+ var failMessage = "Oops! There was an error removing " + name + (entityName ? " from your " + entityName : '') + ". Please try again.";
269
+ _this.setState({
270
+ userToRemove: undefined,
271
+ failMessage: failMessage
272
+ });
273
+ return;
274
+ }
275
+ var successMessage = name + " was successfully removed" + (entityName ? " from your " + entityName : '') + ".";
276
+ _this.setState({
277
+ userToRemove: undefined,
278
+ successMessage: successMessage
279
+ });
280
+ load();
281
+ if (onChange) {
282
+ onChange();
283
+ }
284
+ };
285
+ return _this;
286
+ }
287
+ UserRoles.prototype.componentDidMount = function () {
288
+ this.setStateFromProps(this.props);
289
+ var addUsersHookId = this.state.addUsersHookId;
290
+ studiokit_net_js_1.hooks.unregisterNoStoreActionHook(addUsersHookId);
291
+ };
292
+ UserRoles.prototype.componentDidUpdate = function (prevProps) {
293
+ var prevModelArray = prevProps.modelArray, prevModelStatus = prevProps.modelStatus;
294
+ var _a = this.props, modelArray = _a.modelArray, modelStatus = _a.modelStatus, entityName = _a.entityName;
295
+ if (!lodash_1.isEqual(prevModelArray, modelArray)) {
296
+ this.setStateFromProps(this.props);
297
+ }
298
+ // loading error
299
+ if ((prevModelStatus === modelStatus_1.default.UNINITIALIZED || prevModelStatus === modelStatus_1.default.LOADING) &&
300
+ modelStatus === modelStatus_1.default.ERROR) {
301
+ this.setState({
302
+ failMessage: "Oops! There was an error loading" + (entityName ? " the people for your " + entityName : '') + ".\r\nPlease try again."
303
+ });
304
+ }
305
+ // removing
306
+ if (prevModelStatus === modelStatus_1.default.DELETING && modelStatus !== modelStatus_1.default.DELETING) {
307
+ this.didRemove(modelStatus === modelStatus_1.default.READY);
308
+ }
309
+ };
310
+ //#endregion Remove User
311
+ UserRoles.prototype.render = function () {
312
+ var _this = this;
313
+ var _a = this.props, modelStatus = _a.modelStatus, canModify = _a.canModify, canModifySelf = _a.canModifySelf, entityName = _a.entityName, renderTableDescription = _a.renderTableDescription, defaultRole = _a.defaultRole, roleDescriptions = _a.roleDescriptions, renderAddDescription = _a.renderAddDescription, disabled = _a.disabled, isDeleteDisabled = _a.isDeleteDisabled, addRoleBlacklist = _a.addRoleBlacklist;
314
+ var _b = this.state, isAddingUsers = _b.isAddingUsers, sortedUsers = _b.sortedUsers, shouldResetAddForm = _b.shouldResetAddForm, shouldShowRemoveDialog = _b.shouldShowRemoveDialog, userToRemove = _b.userToRemove, roleForRemove = _b.roleForRemove, successMessage = _b.successMessage, existingUsersMessage = _b.existingUsersMessage, failMessage = _b.failMessage;
315
+ var addableRoleDescriptions = addRoleBlacklist
316
+ ? lodash_1.pickBy(roleDescriptions, function (_, key) { return !addRoleBlacklist.includes(key); })
317
+ : roleDescriptions;
318
+ var roles = Object.keys(roleDescriptions);
319
+ return (react_1.default.createElement(react_1.default.Fragment, null,
320
+ !!successMessage && (react_1.default.createElement(AlertWithIcon_1.default, { id: "successMessageAlert", variant: "success", dismissible: true, onClose: function () {
321
+ return _this.setState({
322
+ successMessage: undefined
323
+ });
324
+ } },
325
+ react_1.default.createElement("p", { className: "pre-wrap" }, successMessage))),
326
+ !!existingUsersMessage && (react_1.default.createElement(AlertWithIcon_1.default, { id: "existingUsersMessageAlert", variant: "info", dismissible: true, onClose: function () {
327
+ return _this.setState({
328
+ existingUsersMessage: undefined
329
+ });
330
+ } },
331
+ react_1.default.createElement("p", { className: "pre-wrap" }, existingUsersMessage))),
332
+ !!failMessage && (react_1.default.createElement(AlertWithIcon_1.default, { id: "failMessageAlert", variant: "warning", dismissible: true, onClose: function () {
333
+ return _this.setState({
334
+ failMessage: undefined
335
+ });
336
+ } },
337
+ react_1.default.createElement("p", { className: "pre-wrap" }, failMessage))),
338
+ canModify && (react_1.default.createElement(Add_1.default, { id: "entityUserRolesAdd", entityName: entityName, addUsersToRole: this.addUsers, shouldReset: shouldResetAddForm, isAddingUsersToRole: isAddingUsers, defaultRole: defaultRole, roleDescriptions: addableRoleDescriptions, renderAddDescription: renderAddDescription, disabled: disabled, textForRole: this.textForRole })),
339
+ !!renderTableDescription && renderTableDescription(canModify),
340
+ react_1.default.createElement(react_bootstrap_1.Row, { className: "mt3" },
341
+ react_1.default.createElement(react_bootstrap_1.Col, { xs: 12 }, modelStatus === modelStatus_1.default.LOADING ? (react_1.default.createElement(Loading_1.default, null)) : sortedUsers.length > 0 ? (react_1.default.createElement(Table_1.UserRolesTable, { id: "entityUserRolesTable", users: sortedUsers, readOnly: !canModify || isDeleteDisabled, roles: roles,
342
+ // Assumes the default is the groupOwner, assignment/assessmentOwner, rubricOwner, problemOwner etc.
343
+ entityOwnerRole: defaultRole, canModifySelf: canModifySelf, removeUserFromRole: this.alertRemoveUser, textForRole: this.textForRole })) : null)),
344
+ !!userToRemove && !!roleForRemove && (react_1.default.createElement(AlertDialog_1.default, { id: "removeUserAlert", isOpen: shouldShowRemoveDialog, title: this.removeUserTitle(roleForRemove), description: this.renderRemoveUserDescription(userToRemove, roleForRemove), onDestroy: function () { return _this.removeUser(true); }, destroyText: "Yes, remove the user", onCancel: function () { return _this.removeUser(false); }, cancelText: "No, I changed my mind" }))));
345
+ };
346
+ return UserRoles;
347
+ }(react_1.Component));
348
+ exports.UserRoles = UserRoles;
349
+ var mapStateToProps = function (state, ownProps) {
350
+ var canModifyGlobally = baseActivity_1.canPerformActivityGlobally(ownProps.modifyUserRoleActivityName, baseActivity_1.defaultOptions(state));
351
+ return {
352
+ canModifySelf: Object.prototype.hasOwnProperty.call(ownProps, 'canModifySelf')
353
+ ? ownProps.canModifySelf
354
+ : canModifyGlobally,
355
+ canModify: ownProps.entity
356
+ ? baseActivity_1.canPerformActivityGloballyOrOnEntity(ownProps.modifyUserRoleActivityName, baseActivity_1.defaultOptions(state, ownProps, 'entity'))
357
+ : canModifyGlobally
358
+ };
359
+ };
360
+ exports.mapStateToProps = mapStateToProps;
361
+ exports.default = react_redux_1.connect(exports.mapStateToProps)(UserRoles);