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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/lib/components/ActionList.js +164 -37
  2. package/lib/components/AlertDialog.js +128 -12
  3. package/lib/components/AlertWithIcon.js +88 -29
  4. package/lib/components/ConnectedModal.js +35 -12
  5. package/lib/components/Dropdowns/GroupsDropdown.js +63 -45
  6. package/lib/components/Dropdowns/ManagedNavDropdown.js +92 -67
  7. package/lib/components/Dropdowns/UserDropdown.js +105 -24
  8. package/lib/components/Dropdowns/index.js +4 -10
  9. package/lib/components/EntityOwnerList.js +47 -21
  10. package/lib/components/Error.js +101 -12
  11. package/lib/components/ErrorBoundary.js +127 -38
  12. package/lib/components/ErrorMessage.js +39 -12
  13. package/lib/components/Forms/DateField.js +56 -45
  14. package/lib/components/Forms/TimeField.js +76 -45
  15. package/lib/components/Forms/index.js +3 -5
  16. package/lib/components/Groups/CreateEditCopySaveButtons.js +109 -14
  17. package/lib/components/Groups/ExternalGroups/Attach.js +206 -151
  18. package/lib/components/Groups/ExternalGroups/Table.js +176 -48
  19. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
  20. package/lib/components/Groups/RosterSyncInfo.js +142 -23
  21. package/lib/components/HOC/AccessibleAppComponent.js +88 -72
  22. package/lib/components/HOC/ActivityRequiredComponent.js +68 -33
  23. package/lib/components/HOC/AsyncComponent.js +49 -41
  24. package/lib/components/HOC/AuthenticatedComponent.js +55 -44
  25. package/lib/components/HOC/CollectionComponent.js +154 -104
  26. package/lib/components/HOC/CollectionFirstItemComponent.js +45 -40
  27. package/lib/components/HOC/CollectionItemComponent.js +152 -100
  28. package/lib/components/HOC/ConnectedModalComponent.js +87 -69
  29. package/lib/components/HOC/DataDependentComponent.js +26 -27
  30. package/lib/components/HOC/EntityComponent.js +57 -53
  31. package/lib/components/HOC/FullscreenModalComponent.js +139 -108
  32. package/lib/components/HOC/GroupActivityRequiredComponent.js +27 -20
  33. package/lib/components/HOC/GuidComponent.js +20 -20
  34. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +32 -29
  35. package/lib/components/HOC/ModelErrorRedirectComponent.js +37 -39
  36. package/lib/components/HOC/SearchPersistorComponent.js +237 -173
  37. package/lib/components/HOC/UnauthenticatedComponent.js +32 -30
  38. package/lib/components/HOC/UserComponent.js +6 -8
  39. package/lib/components/Icons/IconAlphaList.js +28 -8
  40. package/lib/components/Icons/IconExternalUser.js +28 -8
  41. package/lib/components/Icons/IconImpersonation.js +28 -8
  42. package/lib/components/Icons/IconStopImpersonating.js +28 -8
  43. package/lib/components/Icons/IconTable.js +29 -9
  44. package/lib/components/Icons/IconTableDeleteCol.js +28 -8
  45. package/lib/components/Icons/IconTableDeleteRow.js +28 -8
  46. package/lib/components/Icons/IconTableInsertCol.js +28 -8
  47. package/lib/components/Icons/IconTableInsertRow.js +28 -8
  48. package/lib/components/Impersonation/Button.js +71 -16
  49. package/lib/components/Impersonation/Link.js +72 -16
  50. package/lib/components/Impersonation/UserDetail.js +60 -11
  51. package/lib/components/Loading.js +23 -8
  52. package/lib/components/LockDownBrowser/Check.js +188 -51
  53. package/lib/components/LockDownBrowser/ExitButton.js +22 -13
  54. package/lib/components/LockDownBrowser/Launch.js +64 -64
  55. package/lib/components/Lti/Confirm.js +147 -14
  56. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +165 -36
  57. package/lib/components/Lti/Launch.js +99 -25
  58. package/lib/components/Lti/LaunchGroup.js +81 -16
  59. package/lib/components/ManageTable.js +304 -90
  60. package/lib/components/ManageTableNoDataComponent.js +38 -7
  61. package/lib/components/NewVersionAlert.js +76 -49
  62. package/lib/components/NotFound.js +81 -11
  63. package/lib/components/Notifications.js +179 -129
  64. package/lib/components/PaginationNextButton.js +28 -9
  65. package/lib/components/PaginationPreviousButton.js +28 -9
  66. package/lib/components/Quill/CustomToolbar.js +427 -222
  67. package/lib/components/Quill/Formats/Image.js +67 -67
  68. package/lib/components/Quill/Formats/List.js +38 -47
  69. package/lib/components/Quill/Formats/Video.js +23 -26
  70. package/lib/components/Quill/ImageDropModule.js +136 -114
  71. package/lib/components/Quill/ImageWarning.js +41 -12
  72. package/lib/components/Quill/ImageWithAltTextModal.js +420 -89
  73. package/lib/components/Quill/Specs/CustomImageSpec.js +32 -31
  74. package/lib/components/Quill/Specs/CustomVideoSpec.js +22 -23
  75. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +89 -97
  76. package/lib/components/Quill/TableModule/Blots/TableBlot.js +47 -50
  77. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +48 -51
  78. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +219 -224
  79. package/lib/components/Quill/TableModule/Blots/TableContainer.js +75 -86
  80. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +70 -73
  81. package/lib/components/Quill/TableModule/constants.js +40 -42
  82. package/lib/components/Quill/TableModule/index.js +357 -305
  83. package/lib/components/Quill/TableModule/utils.js +39 -48
  84. package/lib/components/Quill/accessibilityFix.js +219 -223
  85. package/lib/components/Quill/index.js +30 -33
  86. package/lib/components/RefreshIndicator/Bordered.js +44 -10
  87. package/lib/components/RefreshIndicator/Inline.js +43 -12
  88. package/lib/components/RefreshIndicator/index.js +257 -62
  89. package/lib/components/SearchControls.js +211 -14
  90. package/lib/components/SentryRoute.js +5 -7
  91. package/lib/components/Tables/RoleFilter.js +66 -38
  92. package/lib/components/Tables/TextFilter.js +58 -18
  93. package/lib/components/UserRoles/Add.js +193 -99
  94. package/lib/components/UserRoles/Context.js +3 -6
  95. package/lib/components/UserRoles/RoleCell.js +176 -75
  96. package/lib/components/UserRoles/Select.js +151 -20
  97. package/lib/components/UserRoles/Table.js +215 -82
  98. package/lib/components/UserRoles/index.js +526 -386
  99. package/lib/config/eslint/index.js +26 -29
  100. package/lib/config/eslint/lib/order.js +21 -28
  101. package/lib/config/eslint/lib/prettier.js +15 -19
  102. package/lib/config/eslint/lib/typescript.js +87 -113
  103. package/lib/config/eslint/react.js +18 -15
  104. package/lib/constants/baseActivity.js +26 -28
  105. package/lib/constants/baseRole.js +10 -12
  106. package/lib/constants/configuration.js +43 -55
  107. package/lib/constants/externalProviderType.js +6 -8
  108. package/lib/constants/fetchErrorData.js +10 -12
  109. package/lib/constants/index.js +13 -15
  110. package/lib/constants/lockDownBrowser.js +23 -25
  111. package/lib/constants/mockData.js +370 -300
  112. package/lib/constants/modelStatus.js +11 -13
  113. package/lib/constants/notificationType.js +8 -10
  114. package/lib/constants/operatingSystem.js +8 -10
  115. package/lib/constants/shard.js +7 -9
  116. package/lib/constants/table.js +18 -22
  117. package/lib/constants/tier.js +8 -10
  118. package/lib/constants/userRole.js +11 -8
  119. package/lib/endpointMappings.js +191 -182
  120. package/lib/hooks/useCollection.js +79 -65
  121. package/lib/hooks/useCollectionConfiguration.js +220 -80
  122. package/lib/hooks/useCollectionItem.js +151 -57
  123. package/lib/hooks/useGuid.js +16 -9
  124. package/lib/hooks/usePrevious.js +14 -13
  125. package/lib/index.js +11 -26
  126. package/lib/redux/actionCreator.js +44 -35
  127. package/lib/redux/actions/AuthAction.js +45 -32
  128. package/lib/redux/actions/ModalAction.js +6 -8
  129. package/lib/redux/actions/ModelAction.js +95 -43
  130. package/lib/redux/actions/NotificationAction.js +6 -8
  131. package/lib/redux/actions/SearchAction.js +5 -7
  132. package/lib/redux/actions/index.js +6 -8
  133. package/lib/redux/configureReducers.js +48 -46
  134. package/lib/redux/configureStore.js +77 -91
  135. package/lib/redux/helpers.js +2 -5
  136. package/lib/redux/reducers/authReducer.js +44 -43
  137. package/lib/redux/reducers/index.js +7 -14
  138. package/lib/redux/reducers/modalsReducer.js +43 -31
  139. package/lib/redux/reducers/modelsReducer.js +131 -137
  140. package/lib/redux/reducers/notificationsReducer.js +20 -20
  141. package/lib/redux/reducers/searchReducer.js +13 -13
  142. package/lib/redux/sagas/appInsightsSaga.js +19 -21
  143. package/lib/redux/sagas/authSaga.js +248 -234
  144. package/lib/redux/sagas/caliperSaga.js +142 -131
  145. package/lib/redux/sagas/clockOffsetSaga.js +29 -32
  146. package/lib/redux/sagas/configurationSaga.js +8 -10
  147. package/lib/redux/sagas/downtimeApiErrorSaga.js +16 -19
  148. package/lib/redux/sagas/errorSaga.js +23 -24
  149. package/lib/redux/sagas/googleAnalyticsSaga.js +24 -27
  150. package/lib/redux/sagas/identityProviderSaga.js +19 -21
  151. package/lib/redux/sagas/initialDataLoadSaga.js +34 -31
  152. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +25 -22
  153. package/lib/redux/sagas/modelFetchSaga.js +302 -286
  154. package/lib/redux/sagas/noStoreSaga.js +60 -61
  155. package/lib/redux/sagas/postLoginDataSaga.js +37 -32
  156. package/lib/redux/sagas/postLoginRedirectSaga.js +22 -27
  157. package/lib/redux/sagas/rootSaga.js +77 -60
  158. package/lib/redux/sagas/sentrySaga.js +25 -28
  159. package/lib/redux/sagas/userIdSaga.js +13 -15
  160. package/lib/services/codeProviderService.js +21 -21
  161. package/lib/services/dateService.js +6 -8
  162. package/lib/services/documentService.js +10 -11
  163. package/lib/services/fetchService.js +103 -95
  164. package/lib/services/persistenceService.js +27 -30
  165. package/lib/services/ticketProviderService.js +25 -25
  166. package/lib/services/tokenPersistenceService.js +8 -10
  167. package/lib/services/windowService.js +14 -16
  168. package/lib/startup.js +110 -101
  169. package/lib/types/AppConfiguration.js +2 -2
  170. package/lib/types/Artifact.js +7 -9
  171. package/lib/types/BaseReduxState.js +2 -2
  172. package/lib/types/Client.js +2 -2
  173. package/lib/types/Collection.js +2 -2
  174. package/lib/types/Configuration.js +2 -2
  175. package/lib/types/DeepLinkingResponseRequest.js +2 -2
  176. package/lib/types/DeletableModel.js +2 -2
  177. package/lib/types/Event.js +2 -2
  178. package/lib/types/ExternalGroup.js +2 -2
  179. package/lib/types/ExternalProvider.js +2 -2
  180. package/lib/types/ExternalTerm.js +2 -2
  181. package/lib/types/Group.js +2 -2
  182. package/lib/types/IdentityProvider.js +2 -2
  183. package/lib/types/LtiLaunch.js +2 -2
  184. package/lib/types/NameOnlyEntity.js +2 -2
  185. package/lib/types/Notification.js +2 -2
  186. package/lib/types/OptionalRecord.js +2 -2
  187. package/lib/types/OwnerSchedule.js +2 -2
  188. package/lib/types/PropertyOfType.js +2 -2
  189. package/lib/types/Quill.js +2 -2
  190. package/lib/types/RoleDescription.js +2 -2
  191. package/lib/types/Search.js +2 -2
  192. package/lib/types/SimpleLocation.js +2 -2
  193. package/lib/types/UniTime.js +2 -2
  194. package/lib/types/User.js +2 -2
  195. package/lib/types/UserRole.js +2 -2
  196. package/lib/types/auth/AuthState.js +2 -2
  197. package/lib/types/auth/CasV1LoginRequestBody.js +2 -2
  198. package/lib/types/auth/ClientCredentials.js +2 -2
  199. package/lib/types/auth/CodeProviderService.js +2 -2
  200. package/lib/types/auth/LocalLoginRequestBody.js +2 -2
  201. package/lib/types/auth/TicketProviderService.js +2 -2
  202. package/lib/types/auth/TokenPersistenceService.js +2 -2
  203. package/lib/types/auth/index.js +8 -10
  204. package/lib/types/externals.d.js +2 -0
  205. package/lib/types/index.js +29 -31
  206. package/lib/types/net/EndpointConfig.js +2 -2
  207. package/lib/types/net/EndpointMapping.js +2 -2
  208. package/lib/types/net/EndpointMappings.js +2 -2
  209. package/lib/types/net/ErrorHandler.js +2 -2
  210. package/lib/types/net/FetchConfig.js +2 -2
  211. package/lib/types/net/FetchErrorData.js +6 -8
  212. package/lib/types/net/FetchResult.js +2 -2
  213. package/lib/types/net/HTTPMethod.js +2 -2
  214. package/lib/types/net/HTTPStatusCode.js +12 -14
  215. package/lib/types/net/Metadata.js +2 -2
  216. package/lib/types/net/Model.js +2 -2
  217. package/lib/types/net/ModelCollection.js +2 -2
  218. package/lib/types/net/ModelsState.js +2 -2
  219. package/lib/types/net/OAuthToken.js +2 -2
  220. package/lib/types/net/OAuthTokenOrNull.js +2 -2
  221. package/lib/types/net/TokenAccessFunction.js +2 -2
  222. package/lib/types/net/index.js +17 -19
  223. package/lib/utils/baseActivity.js +83 -85
  224. package/lib/utils/baseRole.js +32 -36
  225. package/lib/utils/collection.js +403 -297
  226. package/lib/utils/cookies.js +19 -23
  227. package/lib/utils/date.js +188 -205
  228. package/lib/utils/dom.js +130 -131
  229. package/lib/utils/domainIdentifier.js +4 -8
  230. package/lib/utils/entityUserRole.js +2 -5
  231. package/lib/utils/error.js +14 -19
  232. package/lib/utils/events.js +32 -31
  233. package/lib/utils/externalGroup.js +20 -25
  234. package/lib/utils/externalProviders.js +4 -7
  235. package/lib/utils/externalTerms.js +6 -6
  236. package/lib/utils/fetch.js +168 -176
  237. package/lib/utils/group.js +14 -11
  238. package/lib/utils/groupDates.js +38 -46
  239. package/lib/utils/groupRoles.js +23 -32
  240. package/lib/utils/lockDownBrowser.js +12 -15
  241. package/lib/utils/logger.js +23 -28
  242. package/lib/utils/lti.js +4 -7
  243. package/lib/utils/model.js +28 -43
  244. package/lib/utils/number.js +9 -13
  245. package/lib/utils/promise.js +23 -26
  246. package/lib/utils/quill.js +55 -60
  247. package/lib/utils/route.js +52 -60
  248. package/lib/utils/search.js +72 -87
  249. package/lib/utils/shard.js +33 -42
  250. package/lib/utils/sort.js +47 -50
  251. package/lib/utils/string.js +10 -12
  252. package/lib/utils/table.js +29 -33
  253. package/lib/utils/timezone.js +7 -12
  254. package/lib/utils/url.js +130 -144
  255. package/lib/utils/user.js +54 -64
  256. package/lib/utils/userAgent.js +7 -14
  257. package/lib/utils/userRole.js +36 -39
  258. package/package.json +17 -3
@@ -1,101 +1,195 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UserRolesAdd = void 0;
4
- const tslib_1 = require("tslib");
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- const Button_1 = tslib_1.__importDefault(require("@material-ui/core/Button"));
7
- const AddCircle_1 = tslib_1.__importDefault(require("@material-ui/icons/AddCircle"));
8
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
9
- const react_1 = require("react");
10
- const react_bootstrap_1 = require("react-bootstrap");
11
- const AlertDialog_1 = require("../../components/AlertDialog");
12
- const Inline_1 = require("../../components/RefreshIndicator/Inline");
13
- const Select_1 = require("../../components/UserRoles/Select");
14
- const baseRole_1 = require("../../constants/baseRole");
15
- const configuration_1 = require("../../constants/configuration");
16
- const domainIdentifier_1 = require("../../utils/domainIdentifier");
17
- const shard_1 = require("../../utils/shard");
18
- const string_1 = require("../../utils/string");
19
- const AlertWithIcon_1 = require("../AlertWithIcon");
20
- const FERPA_ROLES = [baseRole_1.BASE_ROLE.SUPER_ADMIN, baseRole_1.BASE_ROLE.ADMIN, baseRole_1.BASE_ROLE.GROUP_OWNER, baseRole_1.BASE_ROLE.GROUP_GRADER];
21
- class UserRolesAdd extends react_1.Component {
22
- constructor(props) {
23
- super(props);
24
- this.updateRole = (role) => {
25
- this.setState({
26
- role
27
- });
28
- };
29
- this.handleSubmit = () => {
30
- const { identifiers, role } = this.state;
31
- const identifiersArray = identifiers
32
- .split(/\r\n|\r|\n/g)
33
- .map(id => id.trim())
34
- .filter(id => id !== ''); // filter identifiers that are empty
35
- const errorMessage = this.getValidationErrorMessage(identifiersArray);
36
- if (errorMessage) {
37
- this.setState({
38
- showErrorAlert: true,
39
- errorMessage
40
- });
41
- }
42
- else {
43
- this.props.addUserRoles(identifiersArray, role);
44
- }
45
- };
46
- this.closeErrorAlert = () => {
47
- this.setState({
48
- showErrorAlert: false,
49
- errorMessage: undefined
50
- });
51
- };
52
- this.updateIdentifiers = (e) => {
53
- this.setState({
54
- identifiers: e.target.value
55
- });
56
- };
57
- this.getValidationErrorMessage = (identifiers) => {
58
- if (!identifiers || identifiers.length === 0) {
59
- return `Please enter at least one ${(0, domainIdentifier_1.getDomainIdentifierTypeString)()}.`;
60
- }
61
- let invalidIdentifiers;
62
- if ((0, shard_1.isPurdueShard)() && !identifiers.every(id => (0, string_1.isPurdueAliasOrPuid)(id))) {
63
- invalidIdentifiers = identifiers.filter(id => !(0, string_1.isPurdueAliasOrPuid)(id));
64
- }
65
- if (!(0, shard_1.isPurdueShard)() && !identifiers.every(id => (0, string_1.isEmail)(id))) {
66
- invalidIdentifiers = identifiers.filter(id => !(0, string_1.isEmail)(id));
67
- }
68
- if (invalidIdentifiers) {
69
- return `Please enter valid ${(0, domainIdentifier_1.getDomainIdentifierTypePluralString)()}. The following are invalid:\r\n${invalidIdentifiers.join('\r\n')}`;
70
- }
71
- return undefined;
72
- };
73
- this.state = {
74
- identifiers: '',
75
- role: this.props.defaultRole,
76
- showErrorAlert: false,
77
- errorMessage: undefined
78
- };
79
- }
80
- componentDidUpdate(prevProps) {
81
- const { shouldReset: prevShouldReset } = prevProps;
82
- const { shouldReset } = this.props;
83
- if (!prevShouldReset && shouldReset) {
84
- this.setState({
85
- identifiers: '',
86
- role: this.props.defaultRole
87
- });
88
- }
89
- }
90
- render() {
91
- const { identifiers, role, showErrorAlert, errorMessage } = this.state;
92
- const { entityName, isAddingUsersToRole, roleDescriptions, renderAddDescription, disabled, textForRole } = this.props;
93
- const roles = lodash_1.default.keys(roleDescriptions);
94
- const rolePopover = ((0, jsx_runtime_1.jsxs)(react_bootstrap_1.Popover, { id: "role", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Role" }), roles.map(r => ((0, jsx_runtime_1.jsx)(react_1.Fragment, { children: roleDescriptions[r] }, r)))] }));
95
- const appConfig = (0, configuration_1.getAppConfig)();
96
- const appName = appConfig.APP_NAME;
97
- const gradableDescriptor = appConfig.GRADABLE_DESCRIPTOR;
98
- return ((0, jsx_runtime_1.jsxs)(react_bootstrap_1.Row, { children: [!!renderAddDescription && (0, jsx_runtime_1.jsx)(react_bootstrap_1.Col, { xs: 12, children: renderAddDescription(entityName) }), (0, jsx_runtime_1.jsx)(react_bootstrap_1.Col, { xs: 12, sm: 6, children: (0, jsx_runtime_1.jsxs)(react_bootstrap_1.FormGroup, { controlId: "UserEntry", children: [(0, jsx_runtime_1.jsxs)(react_bootstrap_1.FormLabel, { className: "f6", children: [(0, domainIdentifier_1.getDomainIdentifierTypePluralString)(), " (separated by a new line)"] }), (0, jsx_runtime_1.jsx)(react_bootstrap_1.FormControl, { type: "text", as: "textarea", name: "account", "aria-label": "The account names to add", onChange: this.updateIdentifiers, value: identifiers, placeholder: (0, domainIdentifier_1.getDomainIdentifierTypeString)(), disabled: disabled })] }) }), (0, jsx_runtime_1.jsx)(react_bootstrap_1.Col, { xs: 12, sm: 4, children: (0, jsx_runtime_1.jsx)(Select_1.RoleSelect, { options: roles, value: role, onChange: this.updateRole, labelVisible: true, popoverContentComponent: rolePopover, textForRole: textForRole }) }), (0, jsx_runtime_1.jsxs)(react_bootstrap_1.Col, { xs: 12, sm: 2, className: "mt3-ns pt2-ns", children: [isAddingUsersToRole && (0, jsx_runtime_1.jsx)(Inline_1.RefreshIndicatorInline, { className: "mr3" }), !isAddingUsersToRole && ((0, jsx_runtime_1.jsxs)(Button_1.default, { id: "userRolesAddButton", color: "primary", className: "btn-primary w-100-lt-xs", disabled: !identifiers || disabled, onClick: this.handleSubmit, children: [(0, jsx_runtime_1.jsx)(AddCircle_1.default, { className: "v-mid" }), "Add"] })), (0, jsx_runtime_1.jsx)(AlertDialog_1.AlertDialog, { isOpen: showErrorAlert, title: `Error Adding People to the ${entityName}`, description: (0, jsx_runtime_1.jsx)("div", { className: "pre-wrap", children: errorMessage }), proceedText: "Got it. Thanks!", onProceed: this.closeErrorAlert, onCancel: this.closeErrorAlert })] }), lodash_1.default.includes(FERPA_ROLES, role) && ((0, jsx_runtime_1.jsx)(react_bootstrap_1.Col, { xs: 12, children: (0, jsx_runtime_1.jsx)(AlertWithIcon_1.AlertWithIcon, { id: "ferpaWarning", variant: "warning", children: (0, jsx_runtime_1.jsxs)("p", { children: ["This role includes ", gradableDescriptor, " scores in ", appName, ". Please consider whether", ' ', (0, jsx_runtime_1.jsx)("a", { href: "https://www.purdue.edu/registrar/FERPA/index.html", target: "_blank", rel: "noopener noreferrer", children: "FERPA" }), ' ', "certification is needed."] }) }) }))] }));
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import Button from '@material-ui/core/Button';
3
+ import AddCircle from '@material-ui/icons/AddCircle';
4
+ import _ from 'lodash';
5
+ import React, { Component, Fragment } from 'react';
6
+ import { Col, FormControl, FormGroup, FormLabel, Popover, Row } from 'react-bootstrap';
7
+ import { AlertDialog } from '../../components/AlertDialog';
8
+ import { RefreshIndicatorInline } from '../../components/RefreshIndicator/Inline';
9
+ import { RoleSelect } from '../../components/UserRoles/Select';
10
+ import { BASE_ROLE } from '../../constants/baseRole';
11
+ import { getAppConfig } from '../../constants/configuration';
12
+ import { getDomainIdentifierTypePluralString, getDomainIdentifierTypeString } from '../../utils/domainIdentifier';
13
+ import { isPurdueShard } from '../../utils/shard';
14
+ import { isEmail, isPurdueAliasOrPuid } from '../../utils/string';
15
+ import { AlertWithIcon } from '../AlertWithIcon';
16
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
17
+ const FERPA_ROLES = [BASE_ROLE.SUPER_ADMIN, BASE_ROLE.ADMIN, BASE_ROLE.GROUP_OWNER, BASE_ROLE.GROUP_GRADER];
18
+ export class UserRolesAdd extends Component {
19
+ constructor(props) {
20
+ super(props);
21
+ _defineProperty(this, "updateRole", role => {
22
+ this.setState({
23
+ role
24
+ });
25
+ });
26
+ _defineProperty(this, "handleSubmit", () => {
27
+ const {
28
+ identifiers,
29
+ role
30
+ } = this.state;
31
+ const identifiersArray = identifiers.split(/\r\n|\r|\n/g).map(id => id.trim()).filter(id => id !== ''); // filter identifiers that are empty
32
+ const errorMessage = this.getValidationErrorMessage(identifiersArray);
33
+ if (errorMessage) {
34
+ this.setState({
35
+ showErrorAlert: true,
36
+ errorMessage
37
+ });
38
+ } else {
39
+ this.props.addUserRoles(identifiersArray, role);
40
+ }
41
+ });
42
+ _defineProperty(this, "closeErrorAlert", () => {
43
+ this.setState({
44
+ showErrorAlert: false,
45
+ errorMessage: undefined
46
+ });
47
+ });
48
+ _defineProperty(this, "updateIdentifiers", e => {
49
+ this.setState({
50
+ identifiers: e.target.value
51
+ });
52
+ });
53
+ _defineProperty(this, "getValidationErrorMessage", identifiers => {
54
+ if (!identifiers || identifiers.length === 0) {
55
+ return `Please enter at least one ${getDomainIdentifierTypeString()}.`;
56
+ }
57
+ let invalidIdentifiers;
58
+ if (isPurdueShard() && !identifiers.every(id => isPurdueAliasOrPuid(id))) {
59
+ invalidIdentifiers = identifiers.filter(id => !isPurdueAliasOrPuid(id));
60
+ }
61
+ if (!isPurdueShard() && !identifiers.every(id => isEmail(id))) {
62
+ invalidIdentifiers = identifiers.filter(id => !isEmail(id));
63
+ }
64
+ if (invalidIdentifiers) {
65
+ return `Please enter valid ${getDomainIdentifierTypePluralString()}. The following are invalid:\r\n${invalidIdentifiers.join('\r\n')}`;
66
+ }
67
+ return undefined;
68
+ });
69
+ this.state = {
70
+ identifiers: '',
71
+ role: this.props.defaultRole,
72
+ showErrorAlert: false,
73
+ errorMessage: undefined
74
+ };
75
+ }
76
+ componentDidUpdate(prevProps) {
77
+ const {
78
+ shouldReset: prevShouldReset
79
+ } = prevProps;
80
+ const {
81
+ shouldReset
82
+ } = this.props;
83
+ if (!prevShouldReset && shouldReset) {
84
+ this.setState({
85
+ identifiers: '',
86
+ role: this.props.defaultRole
87
+ });
99
88
  }
89
+ }
90
+ render() {
91
+ const {
92
+ identifiers,
93
+ role,
94
+ showErrorAlert,
95
+ errorMessage
96
+ } = this.state;
97
+ const {
98
+ entityName,
99
+ isAddingUsersToRole,
100
+ roleDescriptions,
101
+ renderAddDescription,
102
+ disabled,
103
+ textForRole
104
+ } = this.props;
105
+ const roles = _.keys(roleDescriptions);
106
+ const rolePopover = /*#__PURE__*/_jsxs(Popover, {
107
+ id: "role",
108
+ children: [/*#__PURE__*/_jsx("h3", {
109
+ children: "Role"
110
+ }), roles.map(r => /*#__PURE__*/_jsx(Fragment, {
111
+ children: roleDescriptions[r]
112
+ }, r))]
113
+ });
114
+ const appConfig = getAppConfig();
115
+ const appName = appConfig.APP_NAME;
116
+ const gradableDescriptor = appConfig.GRADABLE_DESCRIPTOR;
117
+ return /*#__PURE__*/_jsxs(Row, {
118
+ children: [!!renderAddDescription && /*#__PURE__*/_jsx(Col, {
119
+ xs: 12,
120
+ children: renderAddDescription(entityName)
121
+ }), /*#__PURE__*/_jsx(Col, {
122
+ xs: 12,
123
+ sm: 6,
124
+ children: /*#__PURE__*/_jsxs(FormGroup, {
125
+ controlId: "UserEntry",
126
+ children: [/*#__PURE__*/_jsxs(FormLabel, {
127
+ className: "f6",
128
+ children: [getDomainIdentifierTypePluralString(), " (separated by a new line)"]
129
+ }), /*#__PURE__*/_jsx(FormControl, {
130
+ type: "text",
131
+ as: "textarea",
132
+ name: "account",
133
+ "aria-label": "The account names to add",
134
+ onChange: this.updateIdentifiers,
135
+ value: identifiers,
136
+ placeholder: getDomainIdentifierTypeString(),
137
+ disabled: disabled
138
+ })]
139
+ })
140
+ }), /*#__PURE__*/_jsx(Col, {
141
+ xs: 12,
142
+ sm: 4,
143
+ children: /*#__PURE__*/_jsx(RoleSelect, {
144
+ options: roles,
145
+ value: role,
146
+ onChange: this.updateRole,
147
+ labelVisible: true,
148
+ popoverContentComponent: rolePopover,
149
+ textForRole: textForRole
150
+ })
151
+ }), /*#__PURE__*/_jsxs(Col, {
152
+ xs: 12,
153
+ sm: 2,
154
+ className: "mt3-ns pt2-ns",
155
+ children: [isAddingUsersToRole && /*#__PURE__*/_jsx(RefreshIndicatorInline, {
156
+ className: "mr3"
157
+ }), !isAddingUsersToRole && /*#__PURE__*/_jsxs(Button, {
158
+ id: "userRolesAddButton",
159
+ color: "primary",
160
+ className: "btn-primary w-100-lt-xs",
161
+ disabled: !identifiers || disabled,
162
+ onClick: this.handleSubmit,
163
+ children: [/*#__PURE__*/_jsx(AddCircle, {
164
+ className: "v-mid"
165
+ }), "Add"]
166
+ }), /*#__PURE__*/_jsx(AlertDialog, {
167
+ isOpen: showErrorAlert,
168
+ title: `Error Adding People to the ${entityName}`,
169
+ description: /*#__PURE__*/_jsx("div", {
170
+ className: "pre-wrap",
171
+ children: errorMessage
172
+ }),
173
+ proceedText: "Got it. Thanks!",
174
+ onProceed: this.closeErrorAlert,
175
+ onCancel: this.closeErrorAlert
176
+ })]
177
+ }), _.includes(FERPA_ROLES, role) && /*#__PURE__*/_jsx(Col, {
178
+ xs: 12,
179
+ children: /*#__PURE__*/_jsx(AlertWithIcon, {
180
+ id: "ferpaWarning",
181
+ variant: "warning",
182
+ children: /*#__PURE__*/_jsxs("p", {
183
+ children: ["This role includes ", gradableDescriptor, " scores in ", appName, ". Please consider whether", ' ', /*#__PURE__*/_jsx("a", {
184
+ href: "https://www.purdue.edu/registrar/FERPA/index.html",
185
+ target: "_blank",
186
+ rel: "noopener noreferrer",
187
+ children: "FERPA"
188
+ }), ' ', "certification is needed."]
189
+ })
190
+ })
191
+ })]
192
+ });
193
+ }
100
194
  }
101
- exports.UserRolesAdd = UserRolesAdd;
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b24iLCJBZGRDaXJjbGUiLCJfIiwiUmVhY3QiLCJDb21wb25lbnQiLCJGcmFnbWVudCIsIkNvbCIsIkZvcm1Db250cm9sIiwiRm9ybUdyb3VwIiwiRm9ybUxhYmVsIiwiUG9wb3ZlciIsIlJvdyIsIkFsZXJ0RGlhbG9nIiwiUmVmcmVzaEluZGljYXRvcklubGluZSIsIlJvbGVTZWxlY3QiLCJCQVNFX1JPTEUiLCJnZXRBcHBDb25maWciLCJnZXREb21haW5JZGVudGlmaWVyVHlwZVBsdXJhbFN0cmluZyIsImdldERvbWFpbklkZW50aWZpZXJUeXBlU3RyaW5nIiwiaXNQdXJkdWVTaGFyZCIsImlzRW1haWwiLCJpc1B1cmR1ZUFsaWFzT3JQdWlkIiwiQWxlcnRXaXRoSWNvbiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGRVJQQV9ST0xFUyIsIlNVUEVSX0FETUlOIiwiQURNSU4iLCJHUk9VUF9PV05FUiIsIkdST1VQX0dSQURFUiIsIlVzZXJSb2xlc0FkZCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfZGVmaW5lUHJvcGVydHkiLCJyb2xlIiwic2V0U3RhdGUiLCJpZGVudGlmaWVycyIsInN0YXRlIiwiaWRlbnRpZmllcnNBcnJheSIsInNwbGl0IiwibWFwIiwiaWQiLCJ0cmltIiwiZmlsdGVyIiwiZXJyb3JNZXNzYWdlIiwiZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSIsInNob3dFcnJvckFsZXJ0IiwiYWRkVXNlclJvbGVzIiwidW5kZWZpbmVkIiwiZSIsInRhcmdldCIsInZhbHVlIiwibGVuZ3RoIiwiaW52YWxpZElkZW50aWZpZXJzIiwiZXZlcnkiLCJqb2luIiwiZGVmYXVsdFJvbGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJzaG91bGRSZXNldCIsInByZXZTaG91bGRSZXNldCIsInJlbmRlciIsImVudGl0eU5hbWUiLCJpc0FkZGluZ1VzZXJzVG9Sb2xlIiwicm9sZURlc2NyaXB0aW9ucyIsInJlbmRlckFkZERlc2NyaXB0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0Rm9yUm9sZSIsInJvbGVzIiwia2V5cyIsInJvbGVQb3BvdmVyIiwiY2hpbGRyZW4iLCJyIiwiYXBwQ29uZmlnIiwiYXBwTmFtZSIsIkFQUF9OQU1FIiwiZ3JhZGFibGVEZXNjcmlwdG9yIiwiR1JBREFCTEVfREVTQ1JJUFRPUiIsInhzIiwic20iLCJjb250cm9sSWQiLCJjbGFzc05hbWUiLCJ0eXBlIiwiYXMiLCJuYW1lIiwib25DaGFuZ2UiLCJ1cGRhdGVJZGVudGlmaWVycyIsInBsYWNlaG9sZGVyIiwib3B0aW9ucyIsInVwZGF0ZVJvbGUiLCJsYWJlbFZpc2libGUiLCJwb3BvdmVyQ29udGVudENvbXBvbmVudCIsImNvbG9yIiwib25DbGljayIsImhhbmRsZVN1Ym1pdCIsImlzT3BlbiIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJwcm9jZWVkVGV4dCIsIm9uUHJvY2VlZCIsImNsb3NlRXJyb3JBbGVydCIsIm9uQ2FuY2VsIiwiaW5jbHVkZXMiLCJ2YXJpYW50IiwiaHJlZiIsInJlbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1VzZXJSb2xlcy9BZGQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdXR0b24gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvQnV0dG9uJ1xuaW1wb3J0IEFkZENpcmNsZSBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvQWRkQ2lyY2xlJ1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUxhYmVsLCBQb3BvdmVyLCBSb3cgfSBmcm9tICdyZWFjdC1ib290c3RyYXAnXG5pbXBvcnQgeyBBbGVydERpYWxvZyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQWxlcnREaWFsb2cnXG5pbXBvcnQgeyBSZWZyZXNoSW5kaWNhdG9ySW5saW5lIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9SZWZyZXNoSW5kaWNhdG9yL0lubGluZSdcbmltcG9ydCB7IFJvbGVTZWxlY3QgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1VzZXJSb2xlcy9TZWxlY3QnXG5pbXBvcnQgeyBCQVNFX1JPTEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYmFzZVJvbGUnXG5pbXBvcnQgeyBnZXRBcHBDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlndXJhdGlvbidcbmltcG9ydCB7IFJvbGVEZXNjcmlwdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGdldERvbWFpbklkZW50aWZpZXJUeXBlUGx1cmFsU3RyaW5nLCBnZXREb21haW5JZGVudGlmaWVyVHlwZVN0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2RvbWFpbklkZW50aWZpZXInXG5pbXBvcnQgeyBpc1B1cmR1ZVNoYXJkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hhcmQnXG5pbXBvcnQgeyBpc0VtYWlsLCBpc1B1cmR1ZUFsaWFzT3JQdWlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyaW5nJ1xuaW1wb3J0IHsgQWxlcnRXaXRoSWNvbiB9IGZyb20gJy4uL0FsZXJ0V2l0aEljb24nXG5cbmNvbnN0IEZFUlBBX1JPTEVTID0gW0JBU0VfUk9MRS5TVVBFUl9BRE1JTiwgQkFTRV9ST0xFLkFETUlOLCBCQVNFX1JPTEUuR1JPVVBfT1dORVIsIEJBU0VfUk9MRS5HUk9VUF9HUkFERVJdXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJvbGVzQWRkUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdGVudGl0eU5hbWU/OiBzdHJpbmdcblx0ZGVmYXVsdFJvbGU6IHN0cmluZ1xuXHRyb2xlRGVzY3JpcHRpb25zOiBSb2xlRGVzY3JpcHRpb25zXG5cdHJlbmRlckFkZERlc2NyaXB0aW9uPzogKGVudGl0eU5hbWU/OiBzdHJpbmcpID0+IFJlYWN0LkpTWC5FbGVtZW50XG5cdHRleHRGb3JSb2xlPzogKHJvbGU6IHN0cmluZykgPT4gc3RyaW5nXG5cblx0aXNBZGRpbmdVc2Vyc1RvUm9sZTogYm9vbGVhblxuXHRzaG91bGRSZXNldDogYm9vbGVhblxuXHRhZGRVc2VyUm9sZXM6IChpZGVudGlmaWVyczogc3RyaW5nW10sIHJvbGU6IHN0cmluZykgPT4gdm9pZFxufVxuXG5pbnRlcmZhY2UgVXNlclJvbGVzQWRkU3RhdGUge1xuXHRpZGVudGlmaWVyczogc3RyaW5nXG5cdHJvbGU6IHN0cmluZ1xuXHRzaG93RXJyb3JBbGVydDogYm9vbGVhblxuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFVzZXJSb2xlc0FkZCBleHRlbmRzIENvbXBvbmVudDxVc2VyUm9sZXNBZGRQcm9wcywgVXNlclJvbGVzQWRkU3RhdGU+IHtcblx0Y29uc3RydWN0b3IocHJvcHM6IFVzZXJSb2xlc0FkZFByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpXG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlkZW50aWZpZXJzOiAnJyxcblx0XHRcdHJvbGU6IHRoaXMucHJvcHMuZGVmYXVsdFJvbGUsXG5cdFx0XHRzaG93RXJyb3JBbGVydDogZmFsc2UsXG5cdFx0XHRlcnJvck1lc3NhZ2U6IHVuZGVmaW5lZFxuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZVJvbGUgPSAocm9sZTogc3RyaW5nKSA9PiB7XG5cdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRyb2xlXG5cdFx0fSlcblx0fVxuXG5cdGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFVzZXJSb2xlc0FkZFByb3BzKSB7XG5cdFx0Y29uc3QgeyBzaG91bGRSZXNldDogcHJldlNob3VsZFJlc2V0IH0gPSBwcmV2UHJvcHNcblx0XHRjb25zdCB7IHNob3VsZFJlc2V0IH0gPSB0aGlzLnByb3BzXG5cdFx0aWYgKCFwcmV2U2hvdWxkUmVzZXQgJiYgc2hvdWxkUmVzZXQpIHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRpZGVudGlmaWVyczogJycsXG5cdFx0XHRcdHJvbGU6IHRoaXMucHJvcHMuZGVmYXVsdFJvbGVcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHsgaWRlbnRpZmllcnMsIHJvbGUgfSA9IHRoaXMuc3RhdGVcblx0XHRjb25zdCBpZGVudGlmaWVyc0FycmF5ID0gaWRlbnRpZmllcnNcblx0XHRcdC5zcGxpdCgvXFxyXFxufFxccnxcXG4vZylcblx0XHRcdC5tYXAoaWQgPT4gaWQudHJpbSgpKVxuXHRcdFx0LmZpbHRlcihpZCA9PiBpZCAhPT0gJycpIC8vIGZpbHRlciBpZGVudGlmaWVycyB0aGF0IGFyZSBlbXB0eVxuXHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShpZGVudGlmaWVyc0FycmF5KVxuXHRcdGlmIChlcnJvck1lc3NhZ2UpIHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRzaG93RXJyb3JBbGVydDogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JNZXNzYWdlXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnByb3BzLmFkZFVzZXJSb2xlcyhpZGVudGlmaWVyc0FycmF5LCByb2xlKVxuXHRcdH1cblx0fVxuXG5cdGNsb3NlRXJyb3JBbGVydCA9ICgpID0+IHtcblx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdHNob3dFcnJvckFsZXJ0OiBmYWxzZSxcblx0XHRcdGVycm9yTWVzc2FnZTogdW5kZWZpbmVkXG5cdFx0fSlcblx0fVxuXG5cdHVwZGF0ZUlkZW50aWZpZXJzID0gKGU6IGFueSkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0aWRlbnRpZmllcnM6IGUudGFyZ2V0LnZhbHVlIGFzIHN0cmluZ1xuXHRcdH0pXG5cdH1cblxuXHRnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlID0gKGlkZW50aWZpZXJzPzogc3RyaW5nW10pID0+IHtcblx0XHRpZiAoIWlkZW50aWZpZXJzIHx8IGlkZW50aWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIGBQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lICR7Z2V0RG9tYWluSWRlbnRpZmllclR5cGVTdHJpbmcoKX0uYFxuXHRcdH1cblxuXHRcdGxldCBpbnZhbGlkSWRlbnRpZmllcnNcblx0XHRpZiAoaXNQdXJkdWVTaGFyZCgpICYmICFpZGVudGlmaWVycy5ldmVyeShpZCA9PiBpc1B1cmR1ZUFsaWFzT3JQdWlkKGlkKSkpIHtcblx0XHRcdGludmFsaWRJZGVudGlmaWVycyA9IGlkZW50aWZpZXJzLmZpbHRlcihpZCA9PiAhaXNQdXJkdWVBbGlhc09yUHVpZChpZCkpXG5cdFx0fVxuXHRcdGlmICghaXNQdXJkdWVTaGFyZCgpICYmICFpZGVudGlmaWVycy5ldmVyeShpZCA9PiBpc0VtYWlsKGlkKSkpIHtcblx0XHRcdGludmFsaWRJZGVudGlmaWVycyA9IGlkZW50aWZpZXJzLmZpbHRlcihpZCA9PiAhaXNFbWFpbChpZCkpXG5cdFx0fVxuXHRcdGlmIChpbnZhbGlkSWRlbnRpZmllcnMpIHtcblx0XHRcdHJldHVybiBgUGxlYXNlIGVudGVyIHZhbGlkICR7Z2V0RG9tYWluSWRlbnRpZmllclR5cGVQbHVyYWxTdHJpbmcoKX0uIFRoZSBmb2xsb3dpbmcgYXJlIGludmFsaWQ6XFxyXFxuJHtpbnZhbGlkSWRlbnRpZmllcnMuam9pbihcblx0XHRcdFx0J1xcclxcbidcblx0XHRcdCl9YFxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyBpZGVudGlmaWVycywgcm9sZSwgc2hvd0Vycm9yQWxlcnQsIGVycm9yTWVzc2FnZSB9ID0gdGhpcy5zdGF0ZVxuXHRcdGNvbnN0IHsgZW50aXR5TmFtZSwgaXNBZGRpbmdVc2Vyc1RvUm9sZSwgcm9sZURlc2NyaXB0aW9ucywgcmVuZGVyQWRkRGVzY3JpcHRpb24sIGRpc2FibGVkLCB0ZXh0Rm9yUm9sZSB9ID1cblx0XHRcdHRoaXMucHJvcHNcblx0XHRjb25zdCByb2xlcyA9IF8ua2V5cyhyb2xlRGVzY3JpcHRpb25zKVxuXHRcdGNvbnN0IHJvbGVQb3BvdmVyID0gKFxuXHRcdFx0PFBvcG92ZXIgaWQ9XCJyb2xlXCI+XG5cdFx0XHRcdDxoMz5Sb2xlPC9oMz5cblx0XHRcdFx0e3JvbGVzLm1hcChyID0+IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQga2V5PXtyfT57cm9sZURlc2NyaXB0aW9uc1tyXX08L0ZyYWdtZW50PlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpXG5cblx0XHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRcdGNvbnN0IGFwcE5hbWUgPSBhcHBDb25maWcuQVBQX05BTUVcblx0XHRjb25zdCBncmFkYWJsZURlc2NyaXB0b3IgPSBhcHBDb25maWcuR1JBREFCTEVfREVTQ1JJUFRPUlxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxSb3c+XG5cdFx0XHRcdHshIXJlbmRlckFkZERlc2NyaXB0aW9uICYmIDxDb2wgeHM9ezEyfT57cmVuZGVyQWRkRGVzY3JpcHRpb24oZW50aXR5TmFtZSl9PC9Db2w+fVxuXHRcdFx0XHQ8Q29sIHhzPXsxMn0gc209ezZ9PlxuXHRcdFx0XHRcdDxGb3JtR3JvdXAgY29udHJvbElkPVwiVXNlckVudHJ5XCI+XG5cdFx0XHRcdFx0XHQ8Rm9ybUxhYmVsIGNsYXNzTmFtZT1cImY2XCI+XG5cdFx0XHRcdFx0XHRcdHtnZXREb21haW5JZGVudGlmaWVyVHlwZVBsdXJhbFN0cmluZygpfSAoc2VwYXJhdGVkIGJ5IGEgbmV3IGxpbmUpXG5cdFx0XHRcdFx0XHQ8L0Zvcm1MYWJlbD5cblx0XHRcdFx0XHRcdDxGb3JtQ29udHJvbFxuXHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRcdGFzPVwidGV4dGFyZWFcIlxuXHRcdFx0XHRcdFx0XHRuYW1lPVwiYWNjb3VudFwiXG5cdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJUaGUgYWNjb3VudCBuYW1lcyB0byBhZGRcIlxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17dGhpcy51cGRhdGVJZGVudGlmaWVyc31cblx0XHRcdFx0XHRcdFx0dmFsdWU9e2lkZW50aWZpZXJzfVxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17Z2V0RG9tYWluSWRlbnRpZmllclR5cGVTdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L0Zvcm1Hcm91cD5cblx0XHRcdFx0PC9Db2w+XG5cdFx0XHRcdDxDb2wgeHM9ezEyfSBzbT17NH0+XG5cdFx0XHRcdFx0PFJvbGVTZWxlY3Rcblx0XHRcdFx0XHRcdG9wdGlvbnM9e3JvbGVzfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3JvbGV9XG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17dGhpcy51cGRhdGVSb2xlfVxuXHRcdFx0XHRcdFx0bGFiZWxWaXNpYmxlXG5cdFx0XHRcdFx0XHRwb3BvdmVyQ29udGVudENvbXBvbmVudD17cm9sZVBvcG92ZXJ9XG5cdFx0XHRcdFx0XHR0ZXh0Rm9yUm9sZT17dGV4dEZvclJvbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Db2w+XG5cdFx0XHRcdDxDb2wgeHM9ezEyfSBzbT17Mn0gY2xhc3NOYW1lPVwibXQzLW5zIHB0Mi1uc1wiPlxuXHRcdFx0XHRcdHtpc0FkZGluZ1VzZXJzVG9Sb2xlICYmIDxSZWZyZXNoSW5kaWNhdG9ySW5saW5lIGNsYXNzTmFtZT1cIm1yM1wiIC8+fVxuXHRcdFx0XHRcdHshaXNBZGRpbmdVc2Vyc1RvUm9sZSAmJiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPVwidXNlclJvbGVzQWRkQnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0Y29sb3I9XCJwcmltYXJ5XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYnRuLXByaW1hcnkgdy0xMDAtbHQteHNcIlxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17IWlkZW50aWZpZXJzIHx8IGRpc2FibGVkfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXt0aGlzLmhhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdFx0XHRcdDxBZGRDaXJjbGUgY2xhc3NOYW1lPVwidi1taWRcIiAvPlxuXHRcdFx0XHRcdFx0XHRBZGRcblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PEFsZXJ0RGlhbG9nXG5cdFx0XHRcdFx0XHRpc09wZW49e3Nob3dFcnJvckFsZXJ0fVxuXHRcdFx0XHRcdFx0dGl0bGU9e2BFcnJvciBBZGRpbmcgUGVvcGxlIHRvIHRoZSAke2VudGl0eU5hbWV9YH1cblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXs8ZGl2IGNsYXNzTmFtZT1cInByZS13cmFwXCI+e2Vycm9yTWVzc2FnZX08L2Rpdj59XG5cdFx0XHRcdFx0XHRwcm9jZWVkVGV4dD1cIkdvdCBpdC4gVGhhbmtzIVwiXG5cdFx0XHRcdFx0XHRvblByb2NlZWQ9e3RoaXMuY2xvc2VFcnJvckFsZXJ0fVxuXHRcdFx0XHRcdFx0b25DYW5jZWw9e3RoaXMuY2xvc2VFcnJvckFsZXJ0fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvQ29sPlxuXHRcdFx0XHR7Xy5pbmNsdWRlcyhGRVJQQV9ST0xFUywgcm9sZSkgJiYgKFxuXHRcdFx0XHRcdDxDb2wgeHM9ezEyfT5cblx0XHRcdFx0XHRcdDxBbGVydFdpdGhJY29uIGlkPVwiZmVycGFXYXJuaW5nXCIgdmFyaWFudD1cIndhcm5pbmdcIj5cblx0XHRcdFx0XHRcdFx0PHA+XG5cdFx0XHRcdFx0XHRcdFx0VGhpcyByb2xlIGluY2x1ZGVzIHtncmFkYWJsZURlc2NyaXB0b3J9IHNjb3JlcyBpbiB7YXBwTmFtZX0uIFBsZWFzZSBjb25zaWRlciB3aGV0aGVyeycgJ31cblx0XHRcdFx0XHRcdFx0XHQ8YVxuXHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cImh0dHBzOi8vd3d3LnB1cmR1ZS5lZHUvcmVnaXN0cmFyL0ZFUlBBL2luZGV4Lmh0bWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCJcblx0XHRcdFx0XHRcdFx0XHRcdHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdEZFUlBBXG5cdFx0XHRcdFx0XHRcdFx0PC9hPnsnICd9XG5cdFx0XHRcdFx0XHRcdFx0Y2VydGlmaWNhdGlvbiBpcyBuZWVkZWQuXG5cdFx0XHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0XHRcdDwvQWxlcnRXaXRoSWNvbj5cblx0XHRcdFx0XHQ8L0NvbD5cblx0XHRcdFx0KX1cblx0XHRcdDwvUm93PlxuXHRcdClcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsTUFBTSxNQUFNLDBCQUEwQjtBQUM3QyxPQUFPQyxTQUFTLE1BQU0sOEJBQThCO0FBQ3BELE9BQU9DLENBQUMsTUFBTSxRQUFRO0FBQ3RCLE9BQU9DLEtBQUssSUFBSUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNsRCxTQUFTQyxHQUFHLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsR0FBRyxRQUFRLGlCQUFpQjtBQUN0RixTQUFTQyxXQUFXLFFBQVEsOEJBQThCO0FBQzFELFNBQVNDLHNCQUFzQixRQUFRLDBDQUEwQztBQUNqRixTQUFTQyxVQUFVLFFBQVEsbUNBQW1DO0FBQzlELFNBQVNDLFNBQVMsUUFBUSwwQkFBMEI7QUFDcEQsU0FBU0MsWUFBWSxRQUFRLCtCQUErQjtBQUU1RCxTQUFTQyxtQ0FBbUMsRUFBRUMsNkJBQTZCLFFBQVEsOEJBQThCO0FBQ2pILFNBQVNDLGFBQWEsUUFBUSxtQkFBbUI7QUFDakQsU0FBU0MsT0FBTyxFQUFFQyxtQkFBbUIsUUFBUSxvQkFBb0I7QUFDakUsU0FBU0MsYUFBYSxRQUFRLGtCQUFrQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7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
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UserRolesContext = void 0;
4
- const tslib_1 = require("tslib");
5
- const react_1 = tslib_1.__importDefault(require("react"));
1
+ import React from 'react';
6
2
  /*
7
3
  * Context provided to the children of UserRoles. Default values should be initialized
8
4
  * by the context provider.
9
5
  */
10
6
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
11
- exports.UserRolesContext = react_1.default.createContext(undefined);
7
+ export const UserRolesContext = /*#__PURE__*/React.createContext(undefined);
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlVzZXJSb2xlc0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvVXNlclJvbGVzL0NvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFVzZXJSb2xlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJvbGVzQ29udGV4dFR5cGUge1xuXHQvKiogZGlzYWJsZSBhbGwgdXNlciByb2xlIHNlbGVjdCBkcm9wZG93bnMsIGlmIGFueSAqL1xuXHRpc1VwZGF0ZURpc2FibGVkPzogYm9vbGVhblxuXHQvKiogZGlzYWJsZSBhbGwgdXNlciByb2xlIGRlbGV0ZSBidXR0b25zICovXG5cdGlzRGVsZXRlRGlzYWJsZWQ/OiBib29sZWFuXG5cdC8qKiBJcyB0aGUgY3VycmVudCB1c2VyIGFsbG93ZWQgdG8gYWRkLCB1cGRhdGUsIGFuZCBkZWxldGUgdXNlciByb2xlcz8gKi9cblx0Y2FuTW9kaWZ5PzogYm9vbGVhblxuXHQvKiogSXMgdGhlIGN1cnJlbnQgdXNlciBhbGxvd2VkIHRvIGRlbGV0ZSB0aGVpciBvd24gdXNlciByb2xlPyAqL1xuXHRjYW5EZWxldGVTZWxmPzogYm9vbGVhblxuXHQvKiogSWYgbXVsdGlwbGUgcm9sZXMgYWxsb3dlZCwgZWFjaCByb2xlIGlzIGRpc3BsYXllZCBwZXIgdXNlciwgb3RoZXJ3aXNlIGEgc2VsZWN0IGRyb3Bkb3duIGlzIGRpc3BsYXllZC4gKi9cblx0YWxsb3dNdWx0aXBsZVJvbGVzPzogYm9vbGVhblxuXHRyb2xlczogc3RyaW5nW11cblx0LyoqIChPcHRpb25hbCkgSWYgcHJvdmlkZWQsIHRoZSBsYXN0IHVzZXIgcm9sZSB3aXRoIHRoZSByZXF1aXJlZCByb2xlIHdpbGwgYmUgcHJldmVudGVkIGZyb20gYmVpbmcgcmVtb3ZlZC4gKi9cblx0cmVxdWlyZWRSb2xlPzogc3RyaW5nXG5cdC8qKiAoT3B0aW9uYWwpIFByb3ZpZGUgY3VzdG9tIHVzZXItZnJpZW5kbHkgbmFtZXMgZm9yIGRpc3BsYXllZCByb2xlcyAqL1xuXHR0ZXh0Rm9yUm9sZT86IChyb2xlOiBzdHJpbmcpID0+IHN0cmluZ1xuXHQvKiogVGhlIHVzZXIgcm9sZSBiZWluZyB1cGRhdGVkICovXG5cdHVzZXJSb2xlVG9VcGRhdGU/OiBVc2VyUm9sZVxuXHQvKiogSWYgYSB1c2VyIHJvbGUgaXMgYmVpbmcgdXBkYXRlZCAqL1xuXHRpc1VwZGF0aW5nOiBib29sZWFuXG5cdC8qKiBNZXRob2QgdG8gdXBkYXRlIGEgdXNlciByb2xlICovXG5cdHVwZGF0ZVVzZXJSb2xlOiAodXNlclJvbGVUb1VwZGF0ZTogVXNlclJvbGUsIG5ld1JvbGU6IHN0cmluZykgPT4gdm9pZFxuXHQvKiogVGhlIHVzZXIgcm9sZSBiZWluZyByZW1vdmVkICovXG5cdHVzZXJSb2xlVG9SZW1vdmU/OiBVc2VyUm9sZVxuXHQvKiogSWYgYSB1c2VyIHJvbGUgaXMgYmVpbmcgcmVtb3ZlZCAqL1xuXHRpc1JlbW92aW5nOiBib29sZWFuXG5cdC8qKiBNZXRob2QgdG8gcmVtb3ZlIGEgdXNlciByb2xlICovXG5cdHJlbW92ZVVzZXJSb2xlOiAodXNlclJvbGVUb1JlbW92ZTogVXNlclJvbGUpID0+IHZvaWRcbn1cblxuLypcbiAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIGNoaWxkcmVuIG9mIFVzZXJSb2xlcy4gIERlZmF1bHQgdmFsdWVzIHNob3VsZCBiZSBpbml0aWFsaXplZFxuICogYnkgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG5leHBvcnQgY29uc3QgVXNlclJvbGVzQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8VXNlclJvbGVzQ29udGV4dFR5cGU+KHVuZGVmaW5lZCEpXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEtBQUssTUFBTSxPQUFPO0FBaUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNQyxnQkFBZ0IsZ0JBQUdELEtBQUssQ0FBQ0UsYUFBYSxDQUF1QkMsU0FBVSxDQUFDIiwiaWdub3JlTGlzdCI6W119