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,52 +1,79 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapStateToProps = exports.NewVersionAlert = void 0;
4
- const tslib_1 = require("tslib");
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- const core_1 = require("@material-ui/core");
7
- const Refresh_1 = tslib_1.__importDefault(require("@material-ui/icons/Refresh"));
8
- const Warning_1 = tslib_1.__importDefault(require("@material-ui/icons/Warning"));
9
- const compare_versions_1 = tslib_1.__importDefault(require("compare-versions"));
10
- const react_1 = require("react");
11
- const react_redux_1 = require("react-redux");
12
- const react_router_dom_1 = require("react-router-dom");
13
- const configuration_1 = require("../constants/configuration");
14
- class NewVersionAlert extends react_1.Component {
15
- constructor() {
16
- super(...arguments);
17
- this.hasVersionUpdate = () => {
18
- const { client } = this.props;
19
- const version = (0, configuration_1.getAppConfig)().VERSION;
20
- return (!!client && !!client.currentVersion && !!version && (0, compare_versions_1.default)(version, client.currentVersion) === -1);
21
- };
22
- this.refresh = () => {
23
- const { reload } = this.props;
24
- if (reload) {
25
- reload();
26
- }
27
- else {
28
- document.location.reload();
29
- }
30
- };
31
- }
32
- componentDidUpdate(prevProps) {
33
- if (this.props.location.pathname !== prevProps.location.pathname && this.hasVersionUpdate()) {
34
- this.refresh();
35
- }
36
- }
37
- render() {
38
- const appName = (0, configuration_1.getAppConfig)().APP_NAME;
39
- return ((0, jsx_runtime_1.jsx)(core_1.Snackbar, { id: "newVersionAlert", anchorOrigin: { vertical: 'top', horizontal: 'center' }, open: this.hasVersionUpdate(), children: (0, jsx_runtime_1.jsx)(core_1.SnackbarContent, { className: "bg-color-white color-dark-grey", "aria-describedby": "newVersionAlertMessage", message: (0, jsx_runtime_1.jsxs)("span", { id: "newVersionAlertMessage", children: [(0, jsx_runtime_1.jsxs)("h2", { children: [(0, jsx_runtime_1.jsx)(Warning_1.default, { className: "f3 fl mr2 v-mid fill-orange" }), " A new version of ", appName, " is available"] }), (0, jsx_runtime_1.jsx)("p", { className: "ma0", children: "Please click \"Refresh\" to get the new version. If you continue seeing this message, please clear your browser cache and try again." })] }), action: [
40
- (0, jsx_runtime_1.jsxs)(core_1.Button, { "aria-label": "Refresh", color: "primary", onClick: this.refresh, children: [(0, jsx_runtime_1.jsx)(Refresh_1.default, { className: "fill-black" }), " Refresh"] }, "refresh")
41
- ] }) }));
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { Button, Snackbar, SnackbarContent } from '@material-ui/core';
3
+ import Refresh from '@material-ui/icons/Refresh';
4
+ import WarningIcon from '@material-ui/icons/Warning';
5
+ import compareVersions from 'compare-versions';
6
+ import { Component } from 'react';
7
+ import { connect } from 'react-redux';
8
+ import { withRouter } from 'react-router-dom';
9
+ import { getAppConfig } from '../constants/configuration';
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ export class NewVersionAlert extends Component {
12
+ constructor() {
13
+ super(...arguments);
14
+ _defineProperty(this, "hasVersionUpdate", () => {
15
+ const {
16
+ client
17
+ } = this.props;
18
+ const version = getAppConfig().VERSION;
19
+ return !!client && !!client.currentVersion && !!version && compareVersions(version, client.currentVersion) === -1;
20
+ });
21
+ _defineProperty(this, "refresh", () => {
22
+ const {
23
+ reload
24
+ } = this.props;
25
+ if (reload) {
26
+ reload();
27
+ } else {
28
+ document.location.reload();
29
+ }
30
+ });
31
+ }
32
+ componentDidUpdate(prevProps) {
33
+ if (this.props.location.pathname !== prevProps.location.pathname && this.hasVersionUpdate()) {
34
+ this.refresh();
42
35
  }
36
+ }
37
+ render() {
38
+ const appName = getAppConfig().APP_NAME;
39
+ return /*#__PURE__*/_jsx(Snackbar, {
40
+ id: "newVersionAlert",
41
+ anchorOrigin: {
42
+ vertical: 'top',
43
+ horizontal: 'center'
44
+ },
45
+ open: this.hasVersionUpdate(),
46
+ children: /*#__PURE__*/_jsx(SnackbarContent, {
47
+ className: "bg-color-white color-dark-grey",
48
+ "aria-describedby": "newVersionAlertMessage",
49
+ message: /*#__PURE__*/_jsxs("span", {
50
+ id: "newVersionAlertMessage",
51
+ children: [/*#__PURE__*/_jsxs("h2", {
52
+ children: [/*#__PURE__*/_jsx(WarningIcon, {
53
+ className: "f3 fl mr2 v-mid fill-orange"
54
+ }), " A new version of ", appName, " is available"]
55
+ }), /*#__PURE__*/_jsx("p", {
56
+ className: "ma0",
57
+ children: "Please click \"Refresh\" to get the new version. If you continue seeing this message, please clear your browser cache and try again."
58
+ })]
59
+ }),
60
+ action: [/*#__PURE__*/_jsxs(Button, {
61
+ "aria-label": "Refresh",
62
+ color: "primary",
63
+ onClick: this.refresh,
64
+ children: [/*#__PURE__*/_jsx(Refresh, {
65
+ className: "fill-black"
66
+ }), " Refresh"]
67
+ }, "refresh")]
68
+ })
69
+ });
70
+ }
43
71
  }
44
- exports.NewVersionAlert = NewVersionAlert;
45
- const mapStateToProps = (state) => {
46
- return {
47
- client: state.models.client
48
- };
72
+ export const mapStateToProps = state => {
73
+ return {
74
+ client: state.models.client
75
+ };
49
76
  };
50
- exports.mapStateToProps = mapStateToProps;
51
- const connectedNewVersionAlert = (0, react_router_dom_1.withRouter)((0, react_redux_1.connect)(exports.mapStateToProps)(NewVersionAlert));
52
- exports.default = connectedNewVersionAlert;
77
+ const connectedNewVersionAlert = withRouter(connect(mapStateToProps)(NewVersionAlert));
78
+ export default connectedNewVersionAlert;
79
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b24iLCJTbmFja2JhciIsIlNuYWNrYmFyQ29udGVudCIsIlJlZnJlc2giLCJXYXJuaW5nSWNvbiIsImNvbXBhcmVWZXJzaW9ucyIsIkNvbXBvbmVudCIsImNvbm5lY3QiLCJ3aXRoUm91dGVyIiwiZ2V0QXBwQ29uZmlnIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIk5ld1ZlcnNpb25BbGVydCIsImNvbnN0cnVjdG9yIiwiYXJndW1lbnRzIiwiX2RlZmluZVByb3BlcnR5IiwiY2xpZW50IiwicHJvcHMiLCJ2ZXJzaW9uIiwiVkVSU0lPTiIsImN1cnJlbnRWZXJzaW9uIiwicmVsb2FkIiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInBhdGhuYW1lIiwiaGFzVmVyc2lvblVwZGF0ZSIsInJlZnJlc2giLCJyZW5kZXIiLCJhcHBOYW1lIiwiQVBQX05BTUUiLCJpZCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsIm9wZW4iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsIm1lc3NhZ2UiLCJhY3Rpb24iLCJjb2xvciIsIm9uQ2xpY2siLCJtYXBTdGF0ZVRvUHJvcHMiLCJzdGF0ZSIsIm1vZGVscyIsImNvbm5lY3RlZE5ld1ZlcnNpb25BbGVydCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL05ld1ZlcnNpb25BbGVydC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnV0dG9uLCBTbmFja2JhciwgU25hY2tiYXJDb250ZW50IH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnXG5pbXBvcnQgUmVmcmVzaCBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvUmVmcmVzaCdcbmltcG9ydCBXYXJuaW5nSWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvV2FybmluZydcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucydcbmltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50Q2xhc3MgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCdcbmltcG9ydCB7IFJvdXRlQ29tcG9uZW50UHJvcHMsIHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJ1xuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbmZpZ3VyYXRpb24nXG5pbXBvcnQgeyBCYXNlUmVkdXhTdGF0ZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vdHlwZXMvQ2xpZW50J1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ld1ZlcnNpb25BbGVydFByb3BzIHtcblx0Y2xpZW50PzogQ2xpZW50XG5cdC8qKiBDdXN0b20gcmVsb2FkIGZ1bmN0aW9uIGZvciB0ZXN0aW5nICovXG5cdHJlbG9hZD86ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNsYXNzIE5ld1ZlcnNpb25BbGVydCBleHRlbmRzIENvbXBvbmVudDxOZXdWZXJzaW9uQWxlcnRQcm9wcyAmIFJvdXRlQ29tcG9uZW50UHJvcHM+IHtcblx0Y29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogTmV3VmVyc2lvbkFsZXJ0UHJvcHMgJiBSb3V0ZUNvbXBvbmVudFByb3BzKSB7XG5cdFx0aWYgKHRoaXMucHJvcHMubG9jYXRpb24ucGF0aG5hbWUgIT09IHByZXZQcm9wcy5sb2NhdGlvbi5wYXRobmFtZSAmJiB0aGlzLmhhc1ZlcnNpb25VcGRhdGUoKSkge1xuXHRcdFx0dGhpcy5yZWZyZXNoKClcblx0XHR9XG5cdH1cblxuXHRoYXNWZXJzaW9uVXBkYXRlID0gKCkgPT4ge1xuXHRcdGNvbnN0IHsgY2xpZW50IH0gPSB0aGlzLnByb3BzXG5cdFx0Y29uc3QgdmVyc2lvbiA9IGdldEFwcENvbmZpZygpLlZFUlNJT05cblx0XHRyZXR1cm4gKFxuXHRcdFx0ISFjbGllbnQgJiYgISFjbGllbnQuY3VycmVudFZlcnNpb24gJiYgISF2ZXJzaW9uICYmIGNvbXBhcmVWZXJzaW9ucyh2ZXJzaW9uLCBjbGllbnQuY3VycmVudFZlcnNpb24pID09PSAtMVxuXHRcdClcblx0fVxuXG5cdHJlZnJlc2ggPSAoKSA9PiB7XG5cdFx0Y29uc3QgeyByZWxvYWQgfSA9IHRoaXMucHJvcHNcblx0XHRpZiAocmVsb2FkKSB7XG5cdFx0XHRyZWxvYWQoKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKVxuXHRcdH1cblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCBhcHBOYW1lID0gZ2V0QXBwQ29uZmlnKCkuQVBQX05BTUVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNuYWNrYmFyXG5cdFx0XHRcdGlkPVwibmV3VmVyc2lvbkFsZXJ0XCJcblx0XHRcdFx0YW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfX1cblx0XHRcdFx0b3Blbj17dGhpcy5oYXNWZXJzaW9uVXBkYXRlKCl9PlxuXHRcdFx0XHQ8U25hY2tiYXJDb250ZW50XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctY29sb3Itd2hpdGUgY29sb3ItZGFyay1ncmV5XCJcblx0XHRcdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PVwibmV3VmVyc2lvbkFsZXJ0TWVzc2FnZVwiXG5cdFx0XHRcdFx0bWVzc2FnZT17XG5cdFx0XHRcdFx0XHQ8c3BhbiBpZD1cIm5ld1ZlcnNpb25BbGVydE1lc3NhZ2VcIj5cblx0XHRcdFx0XHRcdFx0PGgyPlxuXHRcdFx0XHRcdFx0XHRcdDxXYXJuaW5nSWNvbiBjbGFzc05hbWU9XCJmMyBmbCBtcjIgdi1taWQgZmlsbC1vcmFuZ2VcIiAvPiBBIG5ldyB2ZXJzaW9uIG9mIHthcHBOYW1lfSBpc1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHQ8L2gyPlxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJtYTBcIj5cblx0XHRcdFx0XHRcdFx0XHRQbGVhc2UgY2xpY2sgXCJSZWZyZXNoXCIgdG8gZ2V0IHRoZSBuZXcgdmVyc2lvbi4gSWYgeW91IGNvbnRpbnVlIHNlZWluZyB0aGlzIG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0cGxlYXNlIGNsZWFyIHlvdXIgYnJvd3NlciBjYWNoZSBhbmQgdHJ5IGFnYWluLlxuXHRcdFx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFjdGlvbj17W1xuXHRcdFx0XHRcdFx0PEJ1dHRvbiBrZXk9XCJyZWZyZXNoXCIgYXJpYS1sYWJlbD1cIlJlZnJlc2hcIiBjb2xvcj1cInByaW1hcnlcIiBvbkNsaWNrPXt0aGlzLnJlZnJlc2h9PlxuXHRcdFx0XHRcdFx0XHQ8UmVmcmVzaCBjbGFzc05hbWU9XCJmaWxsLWJsYWNrXCIgLz4gUmVmcmVzaFxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XX1cblx0XHRcdFx0Lz5cblx0XHRcdDwvU25hY2tiYXI+XG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoc3RhdGU6IEJhc2VSZWR1eFN0YXRlKTogTmV3VmVyc2lvbkFsZXJ0UHJvcHMgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdGNsaWVudDogc3RhdGUubW9kZWxzLmNsaWVudFxuXHR9XG59XG5cbmNvbnN0IGNvbm5lY3RlZE5ld1ZlcnNpb25BbGVydDogQ29tcG9uZW50Q2xhc3MgPSB3aXRoUm91dGVyKGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKShOZXdWZXJzaW9uQWxlcnQpKVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0ZWROZXdWZXJzaW9uQWxlcnRcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxlQUFlLFFBQVEsbUJBQW1CO0FBQ3JFLE9BQU9DLE9BQU8sTUFBTSw0QkFBNEI7QUFDaEQsT0FBT0MsV0FBVyxNQUFNLDRCQUE0QjtBQUNwRCxPQUFPQyxlQUFlLE1BQU0sa0JBQWtCO0FBQzlDLFNBQVNDLFNBQVMsUUFBd0IsT0FBTztBQUNqRCxTQUFTQyxPQUFPLFFBQVEsYUFBYTtBQUNyQyxTQUE4QkMsVUFBVSxRQUFRLGtCQUFrQjtBQUNsRSxTQUFTQyxZQUFZLFFBQVEsNEJBQTRCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQVV6RCxPQUFPLE1BQU1DLGVBQWUsU0FBU1IsU0FBUyxDQUE2QztFQUFBUyxZQUFBO0lBQUEsU0FBQUMsU0FBQTtJQUFBQyxlQUFBLDJCQU92RSxNQUFNO01BQ3hCLE1BQU07UUFBRUM7TUFBTyxDQUFDLEdBQUcsSUFBSSxDQUFDQyxLQUFLO01BQzdCLE1BQU1DLE9BQU8sR0FBR1gsWUFBWSxDQUFDLENBQUMsQ0FBQ1ksT0FBTztNQUN0QyxPQUNDLENBQUMsQ0FBQ0gsTUFBTSxJQUFJLENBQUMsQ0FBQ0EsTUFBTSxDQUFDSSxjQUFjLElBQUksQ0FBQyxDQUFDRixPQUFPLElBQUlmLGVBQWUsQ0FBQ2UsT0FBTyxFQUFFRixNQUFNLENBQUNJLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1RyxDQUFDO0lBQUFMLGVBQUEsa0JBRVMsTUFBTTtNQUNmLE1BQU07UUFBRU07TUFBTyxDQUFDLEdBQUcsSUFBSSxDQUFDSixLQUFLO01BQzdCLElBQUlJLE1BQU0sRUFBRTtRQUNYQSxNQUFNLENBQUMsQ0FBQztNQUNULENBQUMsTUFBTTtRQUNOQyxRQUFRLENBQUNDLFFBQVEsQ0FBQ0YsTUFBTSxDQUFDLENBQUM7TUFDM0I7SUFDRCxDQUFDO0VBQUE7RUFyQkRHLGtCQUFrQkEsQ0FBQ0MsU0FBcUQsRUFBRTtJQUN6RSxJQUFJLElBQUksQ0FBQ1IsS0FBSyxDQUFDTSxRQUFRLENBQUNHLFFBQVEsS0FBS0QsU0FBUyxDQUFDRixRQUFRLENBQUNHLFFBQVEsSUFBSSxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUMsRUFBRTtNQUM1RixJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQ2Y7RUFDRDtFQW1CQUMsTUFBTUEsQ0FBQSxFQUFHO0lBQ1IsTUFBTUMsT0FBTyxHQUFHdkIsWUFBWSxDQUFDLENBQUMsQ0FBQ3dCLFFBQVE7SUFDdkMsb0JBQ0N0QixJQUFBLENBQUNWLFFBQVE7TUFDUmlDLEVBQUUsRUFBQyxpQkFBaUI7TUFDcEJDLFlBQVksRUFBRTtRQUFFQyxRQUFRLEVBQUUsS0FBSztRQUFFQyxVQUFVLEVBQUU7TUFBUyxDQUFFO01BQ3hEQyxJQUFJLEVBQUUsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQyxDQUFFO01BQUFVLFFBQUEsZUFDOUI1QixJQUFBLENBQUNULGVBQWU7UUFDZnNDLFNBQVMsRUFBQyxnQ0FBZ0M7UUFDMUMsb0JBQWlCLHdCQUF3QjtRQUN6Q0MsT0FBTyxlQUNONUIsS0FBQTtVQUFNcUIsRUFBRSxFQUFDLHdCQUF3QjtVQUFBSyxRQUFBLGdCQUNoQzFCLEtBQUE7WUFBQTBCLFFBQUEsZ0JBQ0M1QixJQUFBLENBQUNQLFdBQVc7Y0FBQ29DLFNBQVMsRUFBQztZQUE2QixDQUFFLENBQUMsc0JBQWtCLEVBQUNSLE9BQU8sRUFBQyxlQUVuRjtVQUFBLENBQUksQ0FBQyxlQUNMckIsSUFBQTtZQUFHNkIsU0FBUyxFQUFDLEtBQUs7WUFBQUQsUUFBQSxFQUFDO1VBR25CLENBQUcsQ0FBQztRQUFBLENBQ0MsQ0FDTjtRQUNERyxNQUFNLEVBQUUsY0FDUDdCLEtBQUEsQ0FBQ2IsTUFBTTtVQUFlLGNBQVcsU0FBUztVQUFDMkMsS0FBSyxFQUFDLFNBQVM7VUFBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ2QsT0FBUTtVQUFBUyxRQUFBLGdCQUNoRjVCLElBQUEsQ0FBQ1IsT0FBTztZQUFDcUMsU0FBUyxFQUFDO1VBQVksQ0FBRSxDQUFDLFlBQ25DO1FBQUEsR0FGWSxTQUVKLENBQUM7TUFDUixDQUNGO0lBQUMsQ0FDTyxDQUFDO0VBRWI7QUFDRDtBQUVBLE9BQU8sTUFBTUssZUFBZSxHQUFJQyxLQUFxQixJQUEyQjtFQUMvRSxPQUFPO0lBQ041QixNQUFNLEVBQUU0QixLQUFLLENBQUNDLE1BQU0sQ0FBQzdCO0VBQ3RCLENBQUM7QUFDRixDQUFDO0FBRUQsTUFBTThCLHdCQUF3QyxHQUFHeEMsVUFBVSxDQUFDRCxPQUFPLENBQUNzQyxlQUFlLENBQUMsQ0FBQy9CLGVBQWUsQ0FBQyxDQUFDO0FBRXRHLGVBQWVrQyx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,14 +1,84 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const query_string_1 = require("query-string");
5
- const react_bootstrap_1 = require("react-bootstrap");
6
- const react_helmet_1 = require("react-helmet");
7
- const react_router_1 = require("react-router");
1
+ import { c as _c } from "react-compiler-runtime";
2
+ import { parse } from 'query-string';
3
+ import { Col, Container, Row } from 'react-bootstrap';
4
+ import { Helmet } from 'react-helmet';
5
+ import { useLocation } from 'react-router';
6
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
8
7
  const NotFound = () => {
9
- const { search } = (0, react_router_1.useLocation)();
10
- const parsedSearch = (0, query_string_1.parse)(search);
11
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_helmet_1.Helmet, { title: "Page Not Found" }), (0, jsx_runtime_1.jsx)(react_bootstrap_1.Container, { children: (0, jsx_runtime_1.jsx)(react_bootstrap_1.Row, { children: (0, jsx_runtime_1.jsxs)(react_bootstrap_1.Col, { md: 8, children: [(0, jsx_runtime_1.jsx)("h1", { children: "Not Found" }), (0, jsx_runtime_1.jsxs)("p", { children: ["We could not find the requested page", parsedSearch.pathname && ` at "${parsedSearch.pathname}"`, "."] }), (0, jsx_runtime_1.jsxs)("p", { children: ["If you have any questions or concerns, please contact us at", ' ', (0, jsx_runtime_1.jsx)("a", { href: "mailto:tlt@purdue.edu", children: "tlt@purdue.edu" }), "."] })] }) }) })] }));
8
+ const $ = _c(9);
9
+ const {
10
+ search
11
+ } = useLocation();
12
+ let t0;
13
+ if ($[0] !== search) {
14
+ t0 = parse(search);
15
+ $[0] = search;
16
+ $[1] = t0;
17
+ } else {
18
+ t0 = $[1];
19
+ }
20
+ const parsedSearch = t0;
21
+ let t1;
22
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
23
+ t1 = /*#__PURE__*/_jsx(Helmet, {
24
+ title: "Page Not Found"
25
+ });
26
+ $[2] = t1;
27
+ } else {
28
+ t1 = $[2];
29
+ }
30
+ let t2;
31
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
32
+ t2 = /*#__PURE__*/_jsx("h1", {
33
+ children: "Not Found"
34
+ });
35
+ $[3] = t2;
36
+ } else {
37
+ t2 = $[3];
38
+ }
39
+ const t3 = parsedSearch.pathname && ` at "${parsedSearch.pathname}"`;
40
+ let t4;
41
+ if ($[4] !== t3) {
42
+ t4 = /*#__PURE__*/_jsxs("p", {
43
+ children: ["We could not find the requested page", t3, "."]
44
+ });
45
+ $[4] = t3;
46
+ $[5] = t4;
47
+ } else {
48
+ t4 = $[5];
49
+ }
50
+ let t5;
51
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
52
+ t5 = /*#__PURE__*/_jsxs("p", {
53
+ children: ["If you have any questions or concerns, please contact us at", " ", /*#__PURE__*/_jsx("a", {
54
+ href: "mailto:tlt@purdue.edu",
55
+ children: "tlt@purdue.edu"
56
+ }), "."]
57
+ });
58
+ $[6] = t5;
59
+ } else {
60
+ t5 = $[6];
61
+ }
62
+ let t6;
63
+ if ($[7] !== t4) {
64
+ t6 = /*#__PURE__*/_jsxs(_Fragment, {
65
+ children: [t1, /*#__PURE__*/_jsx(Container, {
66
+ children: /*#__PURE__*/_jsx(Row, {
67
+ children: /*#__PURE__*/_jsxs(Col, {
68
+ md: 8,
69
+ children: [t2, t4, t5]
70
+ })
71
+ })
72
+ })]
73
+ });
74
+ $[7] = t4;
75
+ $[8] = t6;
76
+ } else {
77
+ t6 = $[8];
78
+ }
79
+ return t6;
12
80
  };
81
+
13
82
  // required for use in Routes / AsyncComponent
14
- exports.default = NotFound;
83
+ export default NotFound;
84
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZSIsIkNvbCIsIkNvbnRhaW5lciIsIlJvdyIsIkhlbG1ldCIsInVzZUxvY2F0aW9uIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTm90Rm91bmQiLCIkIiwiX2MiLCJzZWFyY2giLCJ0MCIsInBhcnNlZFNlYXJjaCIsInQxIiwiU3ltYm9sIiwiZm9yIiwidGl0bGUiLCJ0MiIsImNoaWxkcmVuIiwidDMiLCJwYXRobmFtZSIsInQ0IiwidDUiLCJocmVmIiwidDYiLCJtZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZSB9IGZyb20gJ3F1ZXJ5LXN0cmluZydcbmltcG9ydCB7IEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb2wsIENvbnRhaW5lciwgUm93IH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJ1xuaW1wb3J0IHsgSGVsbWV0IH0gZnJvbSAncmVhY3QtaGVsbWV0J1xuaW1wb3J0IHsgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXInXG5cbmNvbnN0IE5vdEZvdW5kOiBGdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IHtcblx0Y29uc3QgeyBzZWFyY2ggfSA9IHVzZUxvY2F0aW9uKClcblx0Y29uc3QgcGFyc2VkU2VhcmNoID0gcGFyc2Uoc2VhcmNoKVxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8SGVsbWV0IHRpdGxlPVwiUGFnZSBOb3QgRm91bmRcIiAvPlxuXHRcdFx0PENvbnRhaW5lcj5cblx0XHRcdFx0PFJvdz5cblx0XHRcdFx0XHQ8Q29sIG1kPXs4fT5cblx0XHRcdFx0XHRcdDxoMT5Ob3QgRm91bmQ8L2gxPlxuXHRcdFx0XHRcdFx0PHA+XG5cdFx0XHRcdFx0XHRcdFdlIGNvdWxkIG5vdCBmaW5kIHRoZSByZXF1ZXN0ZWQgcGFnZVxuXHRcdFx0XHRcdFx0XHR7cGFyc2VkU2VhcmNoLnBhdGhuYW1lICYmIGAgYXQgXCIke3BhcnNlZFNlYXJjaC5wYXRobmFtZX1cImB9LlxuXHRcdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHRcdFx0PHA+XG5cdFx0XHRcdFx0XHRcdElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMsIHBsZWFzZSBjb250YWN0IHVzIGF0eycgJ31cblx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cIm1haWx0bzp0bHRAcHVyZHVlLmVkdVwiPnRsdEBwdXJkdWUuZWR1PC9hPi5cblx0XHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0XHQ8L0NvbD5cblx0XHRcdFx0PC9Sb3c+XG5cdFx0XHQ8L0NvbnRhaW5lcj5cblx0XHQ8Lz5cblx0KVxufVxuXG4vLyByZXF1aXJlZCBmb3IgdXNlIGluIFJvdXRlcyAvIEFzeW5jQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBOb3RGb3VuZFxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsS0FBSyxRQUFRLGNBQWM7QUFFcEMsU0FBU0MsR0FBRyxFQUFFQyxTQUFTLEVBQUVDLEdBQUcsUUFBUSxpQkFBaUI7QUFDckQsU0FBU0MsTUFBTSxRQUFRLGNBQWM7QUFDckMsU0FBU0MsV0FBVyxRQUFRLGNBQWM7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUUxQyxNQUFNQyxRQUEyQixHQUFHQSxDQUFBO0VBQUEsTUFBQUMsQ0FBQSxHQUFBQyxFQUFBO0VBQ25DO0lBQUFDO0VBQUEsSUFBbUJWLFdBQVcsQ0FBQyxDQUFDO0VBQUEsSUFBQVcsRUFBQTtFQUFBLElBQUFILENBQUEsUUFBQUUsTUFBQTtJQUNYQyxFQUFBLEdBQUFoQixLQUFLLENBQUNlLE1BQU0sQ0FBQztJQUFBRixDQUFBLE1BQUFFLE1BQUE7SUFBQUYsQ0FBQSxNQUFBRyxFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBSCxDQUFBO0VBQUE7RUFBbEMsTUFBQUksWUFBQSxHQUFxQkQsRUFBYTtFQUFBLElBQUFFLEVBQUE7RUFBQSxJQUFBTCxDQUFBLFFBQUFNLE1BQUEsQ0FBQUMsR0FBQTtJQUdoQ0YsRUFBQSxnQkFBQVgsSUFBQSxDQUFDSCxNQUFNO01BQU9pQixLQUFnQixFQUFoQjtJQUFnQixDQUFFLENBQUM7SUFBQVIsQ0FBQSxNQUFBSyxFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBTCxDQUFBO0VBQUE7RUFBQSxJQUFBUyxFQUFBO0VBQUEsSUFBQVQsQ0FBQSxRQUFBTSxNQUFBLENBQUFDLEdBQUE7SUFJOUJFLEVBQUEsZ0JBQUFmLElBQUE7TUFBQWdCLFFBQUEsRUFBSTtJQUFTLENBQUksQ0FBQztJQUFBVixDQUFBLE1BQUFTLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFULENBQUE7RUFBQTtFQUdoQixNQUFBVyxFQUFBLEdBQUFQLFlBQVksQ0FBQVEsUUFBNkMsSUFBekQsUUFBaUNSLFlBQVksQ0FBQVEsUUFBUyxHQUFHO0VBQUEsSUFBQUMsRUFBQTtFQUFBLElBQUFiLENBQUEsUUFBQVcsRUFBQTtJQUYzREUsRUFBQSxnQkFBQWpCLEtBQUE7TUFBQWMsUUFBQSxHQUFHLHNDQUVGLEVBQUNDLEVBQXlELEVBQUMsR0FDNUQ7SUFBQSxDQUFHLENBQUM7SUFBQVgsQ0FBQSxNQUFBVyxFQUFBO0lBQUFYLENBQUEsTUFBQWEsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQWIsQ0FBQTtFQUFBO0VBQUEsSUFBQWMsRUFBQTtFQUFBLElBQUFkLENBQUEsUUFBQU0sTUFBQSxDQUFBQyxHQUFBO0lBQ0pPLEVBQUEsZ0JBQUFsQixLQUFBO01BQUFjLFFBQUEsR0FBRyw2REFDeUQsRUFBQyxHQUFHLGVBQy9EaEIsSUFBQTtRQUFRcUIsSUFBdUIsRUFBdkIsdUJBQXVCO1FBQUFMLFFBQUEsRUFBQztNQUFjLENBQUcsQ0FBQyxLQUNuRDtJQUFBLENBQUcsQ0FBQztJQUFBVixDQUFBLE1BQUFjLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFkLENBQUE7RUFBQTtFQUFBLElBQUFnQixFQUFBO0VBQUEsSUFBQWhCLENBQUEsUUFBQWEsRUFBQTtJQWJSRyxFQUFBLGdCQUFBcEIsS0FBQSxDQUFBRSxTQUFBO01BQUFZLFFBQUEsR0FDQ0wsRUFBaUMsZUFDakNYLElBQUEsQ0FBQ0wsU0FBUztRQUFBcUIsUUFBQSxlQUNUaEIsSUFBQSxDQUFDSixHQUFHO1VBQUFvQixRQUFBLGVBQ0hkLEtBQUEsQ0FBQ1IsR0FBRztZQUFLNkIsRUFBQyxFQUFELENBQUM7WUFBQVAsUUFBQSxHQUNURCxFQUFrQixFQUNsQkksRUFHSSxFQUNKQyxFQUdJO1VBQUEsQ0FDQTtRQUFDLENBQ0Y7TUFBQyxDQUNJLENBQUM7SUFBQSxDQUNYLENBQUM7SUFBQWQsQ0FBQSxNQUFBYSxFQUFBO0lBQUFiLENBQUEsTUFBQWdCLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFoQixDQUFBO0VBQUE7RUFBQSxPQWpCSGdCLEVBaUJHO0FBQUEsQ0FFSjs7QUFFRDtBQUNBLGVBQWVqQixRQUFRIiwiaWdub3JlTGlzdCI6W119
@@ -1,135 +1,185 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapStateToProps = exports.Notifications = void 0;
4
- const tslib_1 = require("tslib");
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- const core_1 = require("@material-ui/core");
7
- const Close_1 = tslib_1.__importDefault(require("@material-ui/icons/Close"));
8
- const react_1 = require("react");
9
- const react_redux_1 = require("react-redux");
10
- const uuid_1 = require("uuid");
11
- const constants_1 = require("../constants");
12
- const actionCreator_1 = require("../redux/actionCreator");
13
- const actions_1 = require("../redux/actions");
14
- class Notifications extends react_1.Component {
15
- constructor(props) {
16
- super(props);
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { Button, Snackbar, SnackbarContent } from '@material-ui/core';
3
+ import IconClose from '@material-ui/icons/Close';
4
+ import { Component } from 'react';
5
+ import { connect } from 'react-redux';
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { NOTIFICATION_TYPE } from '../constants';
8
+ import { dispatchAction } from '../redux/actionCreator';
9
+ import { NOTIFICATION_ACTION_TYPE } from '../redux/actions';
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ export class Notifications extends Component {
12
+ constructor(props) {
13
+ super(props);
14
+ _defineProperty(this, "afterCloseTimeout", undefined);
15
+ _defineProperty(this, "clearAfterCloseTimeout", () => {
16
+ if (this.afterCloseTimeout) {
17
+ clearTimeout(this.afterCloseTimeout);
17
18
  this.afterCloseTimeout = undefined;
18
- this.clearAfterCloseTimeout = () => {
19
- if (this.afterCloseTimeout) {
20
- clearTimeout(this.afterCloseTimeout);
21
- this.afterCloseTimeout = undefined;
22
- }
23
- };
24
- this.updateNotification = () => {
25
- const { openModalIds, notifications } = this.props;
26
- const { isOpen, notification: currentNotification } = this.state;
27
- // find next notification, if any
28
- const notification = notifications.length > 0 ? notifications[0] : undefined;
29
- // react to the last notification being removed, and close the alert
30
- if (isOpen && !notification) {
31
- this.closeNotification();
32
- return;
33
- }
34
- // exit early if there is no notification
35
- if (!notification) {
36
- return;
37
- }
38
- const shouldShowNotification =
39
- // the notification is different from the current, if any
40
- notification.id !== (currentNotification === null || currentNotification === void 0 ? void 0 : currentNotification.id) &&
41
- // the alert is not open
42
- !isOpen &&
43
- // show immediately, ignoring modals
44
- (notification.modalId === null ||
45
- // show after all modals are closed
46
- (notification.modalId === undefined && openModalIds.length === 0) ||
47
- // show after a specific modal is closed
48
- (!!notification.modalId && !openModalIds.includes(notification.modalId)));
49
- if (shouldShowNotification) {
50
- this.setState({
51
- notification,
52
- className: this.classNameForType(notification.type),
53
- isOpen: true
54
- });
55
- }
56
- };
57
- this.closeNotification = () => {
58
- const { notifications } = this.props;
19
+ }
20
+ });
21
+ _defineProperty(this, "updateNotification", () => {
22
+ const {
23
+ openModalIds,
24
+ notifications
25
+ } = this.props;
26
+ const {
27
+ isOpen,
28
+ notification: currentNotification
29
+ } = this.state;
30
+
31
+ // find next notification, if any
32
+ const notification = notifications.length > 0 ? notifications[0] : undefined;
33
+
34
+ // react to the last notification being removed, and close the alert
35
+ if (isOpen && !notification) {
36
+ this.closeNotification();
37
+ return;
38
+ }
39
+
40
+ // exit early if there is no notification
41
+ if (!notification) {
42
+ return;
43
+ }
44
+ const shouldShowNotification =
45
+ // the notification is different from the current, if any
46
+ notification.id !== currentNotification?.id &&
47
+ // the alert is not open
48
+ !isOpen && (
49
+ // show immediately, ignoring modals
50
+ notification.modalId === null ||
51
+ // show after all modals are closed
52
+ notification.modalId === undefined && openModalIds.length === 0 ||
53
+ // show after a specific modal is closed
54
+ !!notification.modalId && !openModalIds.includes(notification.modalId));
55
+ if (shouldShowNotification) {
56
+ this.setState({
57
+ notification,
58
+ className: this.classNameForType(notification.type),
59
+ isOpen: true
60
+ });
61
+ }
62
+ });
63
+ _defineProperty(this, "closeNotification", () => {
64
+ const {
65
+ notifications
66
+ } = this.props;
67
+ this.setState({
68
+ isOpen: false
69
+ }, () => {
70
+ // wait until after Snackbar hide animation to clear the UI
71
+ this.afterCloseTimeout = setTimeout(() => {
72
+ this.removeNotification();
73
+ this.clearAfterCloseTimeout();
74
+ // removing the last notification, clear state
75
+ if (notifications.length <= 1) {
59
76
  this.setState({
60
- isOpen: false
61
- }, () => {
62
- // wait until after Snackbar hide animation to clear the UI
63
- this.afterCloseTimeout = setTimeout(() => {
64
- this.removeNotification();
65
- this.clearAfterCloseTimeout();
66
- // removing the last notification, clear state
67
- if (notifications.length <= 1) {
68
- this.setState({
69
- notification: undefined,
70
- className: ''
71
- });
72
- }
73
- }, 300);
77
+ notification: undefined,
78
+ className: ''
74
79
  });
75
- };
76
- this.removeNotification = () => {
77
- const { notification } = this.state;
78
- if (!notification) {
79
- return;
80
- }
81
- (0, actionCreator_1.dispatchAction)({
82
- type: actions_1.NOTIFICATION_ACTION_TYPE.REMOVE_NOTIFICATION,
83
- notification
84
- });
85
- };
86
- this.classNameForType = (type) => {
87
- switch (type) {
88
- case constants_1.NOTIFICATION_TYPE.INFO:
89
- return 'alert-info';
90
- case constants_1.NOTIFICATION_TYPE.SUCCESS:
91
- return 'alert-success';
92
- case constants_1.NOTIFICATION_TYPE.WARNING:
93
- return 'alert-warning';
94
- case constants_1.NOTIFICATION_TYPE.ERROR:
95
- return 'alert-danger';
96
- }
97
- };
98
- this.state = {
99
- guid: (0, uuid_1.v4)(),
100
- notification: undefined,
101
- className: '',
102
- isOpen: false // use to handle animation separate from existence of notification
103
- };
104
- }
105
- componentDidMount() {
106
- this.updateNotification();
107
- }
108
- componentDidUpdate() {
109
- this.updateNotification();
110
- }
111
- componentWillUnmount() {
112
- const { notifications } = this.props;
113
- const { isOpen } = this.state;
114
- if (isOpen && notifications.length > 0) {
115
- this.removeNotification();
116
- }
117
- this.clearAfterCloseTimeout();
118
- }
119
- render() {
120
- const { guid, notification, className, isOpen } = this.state;
121
- const id = `notifications-${guid}`;
122
- return ((0, jsx_runtime_1.jsx)("div", { id: id, "aria-live": "polite", children: (0, jsx_runtime_1.jsx)(core_1.Snackbar, { anchorOrigin: { vertical: 'bottom', horizontal: 'center' }, open: isOpen, autoHideDuration: 5000, onClose: this.closeNotification, className: "mh2 alert notification-alert", children: (0, jsx_runtime_1.jsx)(core_1.SnackbarContent, { className: className, "aria-describedby": `${id}-alert-message`, message: (0, jsx_runtime_1.jsx)("span", { id: `${id}-alert-message`, className: "notification-alert-message", children: (0, jsx_runtime_1.jsx)("h4", { className: "normal pt2", children: !!notification && notification.text }) }), action: [
123
- (0, jsx_runtime_1.jsxs)(core_1.Button, { className: "notification-close-button", "aria-label": "Close", color: "inherit", onClick: this.removeNotification, children: [(0, jsx_runtime_1.jsx)(Close_1.default, { className: "v-mid" }), "Close"] }, "close")
124
- ] }) }) }));
80
+ }
81
+ }, 300);
82
+ });
83
+ });
84
+ _defineProperty(this, "removeNotification", () => {
85
+ const {
86
+ notification
87
+ } = this.state;
88
+ if (!notification) {
89
+ return;
90
+ }
91
+ dispatchAction({
92
+ type: NOTIFICATION_ACTION_TYPE.REMOVE_NOTIFICATION,
93
+ notification
94
+ });
95
+ });
96
+ _defineProperty(this, "classNameForType", type => {
97
+ switch (type) {
98
+ case NOTIFICATION_TYPE.INFO:
99
+ return 'alert-info';
100
+ case NOTIFICATION_TYPE.SUCCESS:
101
+ return 'alert-success';
102
+ case NOTIFICATION_TYPE.WARNING:
103
+ return 'alert-warning';
104
+ case NOTIFICATION_TYPE.ERROR:
105
+ return 'alert-danger';
106
+ }
107
+ });
108
+ this.state = {
109
+ guid: uuidv4(),
110
+ notification: undefined,
111
+ className: '',
112
+ isOpen: false // use to handle animation separate from existence of notification
113
+ };
114
+ }
115
+ componentDidMount() {
116
+ this.updateNotification();
117
+ }
118
+ componentDidUpdate() {
119
+ this.updateNotification();
120
+ }
121
+ componentWillUnmount() {
122
+ const {
123
+ notifications
124
+ } = this.props;
125
+ const {
126
+ isOpen
127
+ } = this.state;
128
+ if (isOpen && notifications.length > 0) {
129
+ this.removeNotification();
125
130
  }
131
+ this.clearAfterCloseTimeout();
132
+ }
133
+ render() {
134
+ const {
135
+ guid,
136
+ notification,
137
+ className,
138
+ isOpen
139
+ } = this.state;
140
+ const id = `notifications-${guid}`;
141
+ return /*#__PURE__*/_jsx("div", {
142
+ id: id,
143
+ "aria-live": "polite",
144
+ children: /*#__PURE__*/_jsx(Snackbar, {
145
+ anchorOrigin: {
146
+ vertical: 'bottom',
147
+ horizontal: 'center'
148
+ },
149
+ open: isOpen,
150
+ autoHideDuration: 5000,
151
+ onClose: this.closeNotification,
152
+ className: "mh2 alert notification-alert",
153
+ children: /*#__PURE__*/_jsx(SnackbarContent, {
154
+ className: className,
155
+ "aria-describedby": `${id}-alert-message`,
156
+ message: /*#__PURE__*/_jsx("span", {
157
+ id: `${id}-alert-message`,
158
+ className: "notification-alert-message",
159
+ children: /*#__PURE__*/_jsx("h4", {
160
+ className: "normal pt2",
161
+ children: !!notification && notification.text
162
+ })
163
+ }),
164
+ action: [/*#__PURE__*/_jsxs(Button, {
165
+ className: "notification-close-button",
166
+ "aria-label": "Close",
167
+ color: "inherit",
168
+ onClick: this.removeNotification,
169
+ children: [/*#__PURE__*/_jsx(IconClose, {
170
+ className: "v-mid"
171
+ }), "Close"]
172
+ }, "close")]
173
+ })
174
+ })
175
+ });
176
+ }
126
177
  }
127
- exports.Notifications = Notifications;
128
- const mapStateToProps = (state) => {
129
- return {
130
- notifications: state.notifications.queue,
131
- openModalIds: Object.keys(state.modals)
132
- };
178
+ export const mapStateToProps = state => {
179
+ return {
180
+ notifications: state.notifications.queue,
181
+ openModalIds: Object.keys(state.modals)
182
+ };
133
183
  };
134
- exports.mapStateToProps = mapStateToProps;
135
- exports.default = (0, react_redux_1.connect)(exports.mapStateToProps)(Notifications);
184
+ export default connect(mapStateToProps)(Notifications);
185
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b24iLCJTbmFja2JhciIsIlNuYWNrYmFyQ29udGVudCIsIkljb25DbG9zZSIsIkNvbXBvbmVudCIsImNvbm5lY3QiLCJ2NCIsInV1aWR2NCIsIk5PVElGSUNBVElPTl9UWVBFIiwiZGlzcGF0Y2hBY3Rpb24iLCJOT1RJRklDQVRJT05fQUNUSU9OX1RZUEUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiTm90aWZpY2F0aW9ucyIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfZGVmaW5lUHJvcGVydHkiLCJ1bmRlZmluZWQiLCJhZnRlckNsb3NlVGltZW91dCIsImNsZWFyVGltZW91dCIsIm9wZW5Nb2RhbElkcyIsIm5vdGlmaWNhdGlvbnMiLCJpc09wZW4iLCJub3RpZmljYXRpb24iLCJjdXJyZW50Tm90aWZpY2F0aW9uIiwic3RhdGUiLCJsZW5ndGgiLCJjbG9zZU5vdGlmaWNhdGlvbiIsInNob3VsZFNob3dOb3RpZmljYXRpb24iLCJpZCIsIm1vZGFsSWQiLCJpbmNsdWRlcyIsInNldFN0YXRlIiwiY2xhc3NOYW1lIiwiY2xhc3NOYW1lRm9yVHlwZSIsInR5cGUiLCJzZXRUaW1lb3V0IiwicmVtb3ZlTm90aWZpY2F0aW9uIiwiY2xlYXJBZnRlckNsb3NlVGltZW91dCIsIlJFTU9WRV9OT1RJRklDQVRJT04iLCJJTkZPIiwiU1VDQ0VTUyIsIldBUk5JTkciLCJFUlJPUiIsImd1aWQiLCJjb21wb25lbnREaWRNb3VudCIsInVwZGF0ZU5vdGlmaWNhdGlvbiIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJhbmNob3JPcmlnaW4iLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJvcGVuIiwiYXV0b0hpZGVEdXJhdGlvbiIsIm9uQ2xvc2UiLCJtZXNzYWdlIiwidGV4dCIsImFjdGlvbiIsImNvbG9yIiwib25DbGljayIsIm1hcFN0YXRlVG9Qcm9wcyIsInF1ZXVlIiwiT2JqZWN0Iiwia2V5cyIsIm1vZGFscyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL05vdGlmaWNhdGlvbnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbiwgU25hY2tiYXIsIFNuYWNrYmFyQ29udGVudCB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJ1xuaW1wb3J0IEljb25DbG9zZSBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvQ2xvc2UnXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyBOT1RJRklDQVRJT05fVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IGRpc3BhdGNoQWN0aW9uIH0gZnJvbSAnLi4vcmVkdXgvYWN0aW9uQ3JlYXRvcidcbmltcG9ydCB7IE5PVElGSUNBVElPTl9BQ1RJT05fVFlQRSwgTm90aWZpY2F0aW9uQWN0aW9uIH0gZnJvbSAnLi4vcmVkdXgvYWN0aW9ucydcbmltcG9ydCB7IE1vZGFsc1N0YXRlIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvbW9kYWxzUmVkdWNlcidcbmltcG9ydCB7IE5vdGlmaWNhdGlvblN0YXRlIH0gZnJvbSAnLi4vcmVkdXgvcmVkdWNlcnMvbm90aWZpY2F0aW9uc1JlZHVjZXInXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25zUHJvcHMge1xuXHQvKiogVGhlIHF1ZXVlIG9mIG5vdGlmaWNhdGlvbnMsIEZJRk8gKi9cblx0bm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW11cblx0LyoqIFRoZSBpZGVudGlmaWVycyBmb3IgYWxsIGN1cnJlbnRseSBvcGVuIG1vZGFscywgdXNlZCB0byBjb3JyZWxhdGUgd2l0aCBgbm90aWZpY2F0aW9uLm1vZGFsSWRgICovXG5cdG9wZW5Nb2RhbElkczogc3RyaW5nW11cbn1cblxuaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cdGd1aWQ6IHN0cmluZ1xuXHRub3RpZmljYXRpb24/OiBOb3RpZmljYXRpb25cblx0Y2xhc3NOYW1lOiBzdHJpbmdcblx0aXNPcGVuOiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zIGV4dGVuZHMgQ29tcG9uZW50PE5vdGlmaWNhdGlvbnNQcm9wcywgTm90aWZpY2F0aW9uc1N0YXRlPiB7XG5cdGFmdGVyQ2xvc2VUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBOb3RpZmljYXRpb25zUHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcylcblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0Z3VpZDogdXVpZHY0KCksXG5cdFx0XHRub3RpZmljYXRpb246IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogJycsXG5cdFx0XHRpc09wZW46IGZhbHNlIC8vIHVzZSB0byBoYW5kbGUgYW5pbWF0aW9uIHNlcGFyYXRlIGZyb20gZXhpc3RlbmNlIG9mIG5vdGlmaWNhdGlvblxuXHRcdH1cblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdHRoaXMudXBkYXRlTm90aWZpY2F0aW9uKClcblx0fVxuXG5cdGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcblx0XHR0aGlzLnVwZGF0ZU5vdGlmaWNhdGlvbigpXG5cdH1cblxuXHRjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblx0XHRjb25zdCB7IG5vdGlmaWNhdGlvbnMgfSA9IHRoaXMucHJvcHNcblx0XHRjb25zdCB7IGlzT3BlbiB9ID0gdGhpcy5zdGF0ZVxuXHRcdGlmIChpc09wZW4gJiYgbm90aWZpY2F0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnJlbW92ZU5vdGlmaWNhdGlvbigpXG5cdFx0fVxuXHRcdHRoaXMuY2xlYXJBZnRlckNsb3NlVGltZW91dCgpXG5cdH1cblxuXHRjbGVhckFmdGVyQ2xvc2VUaW1lb3V0ID0gKCkgPT4ge1xuXHRcdGlmICh0aGlzLmFmdGVyQ2xvc2VUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5hZnRlckNsb3NlVGltZW91dClcblx0XHRcdHRoaXMuYWZ0ZXJDbG9zZVRpbWVvdXQgPSB1bmRlZmluZWRcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVOb3RpZmljYXRpb24gPSAoKSA9PiB7XG5cdFx0Y29uc3QgeyBvcGVuTW9kYWxJZHMsIG5vdGlmaWNhdGlvbnMgfSA9IHRoaXMucHJvcHNcblx0XHRjb25zdCB7IGlzT3Blbiwgbm90aWZpY2F0aW9uOiBjdXJyZW50Tm90aWZpY2F0aW9uIH0gPSB0aGlzLnN0YXRlXG5cblx0XHQvLyBmaW5kIG5leHQgbm90aWZpY2F0aW9uLCBpZiBhbnlcblx0XHRjb25zdCBub3RpZmljYXRpb24gPSBub3RpZmljYXRpb25zLmxlbmd0aCA+IDAgPyBub3RpZmljYXRpb25zWzBdIDogdW5kZWZpbmVkXG5cblx0XHQvLyByZWFjdCB0byB0aGUgbGFzdCBub3RpZmljYXRpb24gYmVpbmcgcmVtb3ZlZCwgYW5kIGNsb3NlIHRoZSBhbGVydFxuXHRcdGlmIChpc09wZW4gJiYgIW5vdGlmaWNhdGlvbikge1xuXHRcdFx0dGhpcy5jbG9zZU5vdGlmaWNhdGlvbigpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHQvLyBleGl0IGVhcmx5IGlmIHRoZXJlIGlzIG5vIG5vdGlmaWNhdGlvblxuXHRcdGlmICghbm90aWZpY2F0aW9uKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBzaG91bGRTaG93Tm90aWZpY2F0aW9uID1cblx0XHRcdC8vIHRoZSBub3RpZmljYXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQsIGlmIGFueVxuXHRcdFx0bm90aWZpY2F0aW9uLmlkICE9PSBjdXJyZW50Tm90aWZpY2F0aW9uPy5pZCAmJlxuXHRcdFx0Ly8gdGhlIGFsZXJ0IGlzIG5vdCBvcGVuXG5cdFx0XHQhaXNPcGVuICYmXG5cdFx0XHQvLyBzaG93IGltbWVkaWF0ZWx5LCBpZ25vcmluZyBtb2RhbHNcblx0XHRcdChub3RpZmljYXRpb24ubW9kYWxJZCA9PT0gbnVsbCB8fFxuXHRcdFx0XHQvLyBzaG93IGFmdGVyIGFsbCBtb2RhbHMgYXJlIGNsb3NlZFxuXHRcdFx0XHQobm90aWZpY2F0aW9uLm1vZGFsSWQgPT09IHVuZGVmaW5lZCAmJiBvcGVuTW9kYWxJZHMubGVuZ3RoID09PSAwKSB8fFxuXHRcdFx0XHQvLyBzaG93IGFmdGVyIGEgc3BlY2lmaWMgbW9kYWwgaXMgY2xvc2VkXG5cdFx0XHRcdCghIW5vdGlmaWNhdGlvbi5tb2RhbElkICYmICFvcGVuTW9kYWxJZHMuaW5jbHVkZXMobm90aWZpY2F0aW9uLm1vZGFsSWQpKSlcblxuXHRcdGlmIChzaG91bGRTaG93Tm90aWZpY2F0aW9uKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0bm90aWZpY2F0aW9uLFxuXHRcdFx0XHRjbGFzc05hbWU6IHRoaXMuY2xhc3NOYW1lRm9yVHlwZShub3RpZmljYXRpb24udHlwZSksXG5cdFx0XHRcdGlzT3BlbjogdHJ1ZVxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRjbG9zZU5vdGlmaWNhdGlvbiA9ICgpID0+IHtcblx0XHRjb25zdCB7IG5vdGlmaWNhdGlvbnMgfSA9IHRoaXMucHJvcHNcblx0XHR0aGlzLnNldFN0YXRlKFxuXHRcdFx0e1xuXHRcdFx0XHRpc09wZW46IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQvLyB3YWl0IHVudGlsIGFmdGVyIFNuYWNrYmFyIGhpZGUgYW5pbWF0aW9uIHRvIGNsZWFyIHRoZSBVSVxuXHRcdFx0XHR0aGlzLmFmdGVyQ2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVOb3RpZmljYXRpb24oKVxuXHRcdFx0XHRcdHRoaXMuY2xlYXJBZnRlckNsb3NlVGltZW91dCgpXG5cdFx0XHRcdFx0Ly8gcmVtb3ZpbmcgdGhlIGxhc3Qgbm90aWZpY2F0aW9uLCBjbGVhciBzdGF0ZVxuXHRcdFx0XHRcdGlmIChub3RpZmljYXRpb25zLmxlbmd0aCA8PSAxKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRcdFx0bm90aWZpY2F0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZTogJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAzMDApXG5cdFx0XHR9XG5cdFx0KVxuXHR9XG5cblx0cmVtb3ZlTm90aWZpY2F0aW9uID0gKCkgPT4ge1xuXHRcdGNvbnN0IHsgbm90aWZpY2F0aW9uIH0gPSB0aGlzLnN0YXRlXG5cdFx0aWYgKCFub3RpZmljYXRpb24pIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRkaXNwYXRjaEFjdGlvbjxOb3RpZmljYXRpb25BY3Rpb24+KHtcblx0XHRcdHR5cGU6IE5PVElGSUNBVElPTl9BQ1RJT05fVFlQRS5SRU1PVkVfTk9USUZJQ0FUSU9OLFxuXHRcdFx0bm90aWZpY2F0aW9uXG5cdFx0fSlcblx0fVxuXG5cdGNsYXNzTmFtZUZvclR5cGUgPSAodHlwZTogTk9USUZJQ0FUSU9OX1RZUEUpID0+IHtcblx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdGNhc2UgTk9USUZJQ0FUSU9OX1RZUEUuSU5GTzpcblx0XHRcdFx0cmV0dXJuICdhbGVydC1pbmZvJ1xuXHRcdFx0Y2FzZSBOT1RJRklDQVRJT05fVFlQRS5TVUNDRVNTOlxuXHRcdFx0XHRyZXR1cm4gJ2FsZXJ0LXN1Y2Nlc3MnXG5cdFx0XHRjYXNlIE5PVElGSUNBVElPTl9UWVBFLldBUk5JTkc6XG5cdFx0XHRcdHJldHVybiAnYWxlcnQtd2FybmluZydcblx0XHRcdGNhc2UgTk9USUZJQ0FUSU9OX1RZUEUuRVJST1I6XG5cdFx0XHRcdHJldHVybiAnYWxlcnQtZGFuZ2VyJ1xuXHRcdH1cblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IGd1aWQsIG5vdGlmaWNhdGlvbiwgY2xhc3NOYW1lLCBpc09wZW4gfSA9IHRoaXMuc3RhdGVcblx0XHRjb25zdCBpZCA9IGBub3RpZmljYXRpb25zLSR7Z3VpZH1gXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgaWQ9e2lkfSBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cblx0XHRcdFx0PFNuYWNrYmFyXG5cdFx0XHRcdFx0YW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfX1cblx0XHRcdFx0XHRvcGVuPXtpc09wZW59XG5cdFx0XHRcdFx0YXV0b0hpZGVEdXJhdGlvbj17NTAwMH1cblx0XHRcdFx0XHRvbkNsb3NlPXt0aGlzLmNsb3NlTm90aWZpY2F0aW9ufVxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1oMiBhbGVydCBub3RpZmljYXRpb24tYWxlcnRcIj5cblx0XHRcdFx0XHQ8U25hY2tiYXJDb250ZW50XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9e2Ake2lkfS1hbGVydC1tZXNzYWdlYH1cblx0XHRcdFx0XHRcdG1lc3NhZ2U9e1xuXHRcdFx0XHRcdFx0XHQ8c3BhbiBpZD17YCR7aWR9LWFsZXJ0LW1lc3NhZ2VgfSBjbGFzc05hbWU9XCJub3RpZmljYXRpb24tYWxlcnQtbWVzc2FnZVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxoNCBjbGFzc05hbWU9XCJub3JtYWwgcHQyXCI+eyEhbm90aWZpY2F0aW9uICYmIG5vdGlmaWNhdGlvbi50ZXh0fTwvaDQ+XG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFjdGlvbj17W1xuXHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibm90aWZpY2F0aW9uLWNsb3NlLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD1cIkNsb3NlXCJcblx0XHRcdFx0XHRcdFx0XHRjb2xvcj1cImluaGVyaXRcIlxuXHRcdFx0XHRcdFx0XHRcdGtleT1cImNsb3NlXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXt0aGlzLnJlbW92ZU5vdGlmaWNhdGlvbn0+XG5cdFx0XHRcdFx0XHRcdFx0PEljb25DbG9zZSBjbGFzc05hbWU9XCJ2LW1pZFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0Q2xvc2Vcblx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRdfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvU25hY2tiYXI+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogeyBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25TdGF0ZTsgbW9kYWxzOiBNb2RhbHNTdGF0ZSB9KSA9PiB7XG5cdHJldHVybiB7XG5cdFx0bm90aWZpY2F0aW9uczogc3RhdGUubm90aWZpY2F0aW9ucy5xdWV1ZSxcblx0XHRvcGVuTW9kYWxJZHM6IE9iamVjdC5rZXlzKHN0YXRlLm1vZGFscylcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcykoTm90aWZpY2F0aW9ucylcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxlQUFlLFFBQVEsbUJBQW1CO0FBQ3JFLE9BQU9DLFNBQVMsTUFBTSwwQkFBMEI7QUFDaEQsU0FBU0MsU0FBUyxRQUFRLE9BQU87QUFDakMsU0FBU0MsT0FBTyxRQUFRLGFBQWE7QUFDckMsU0FBU0MsRUFBRSxJQUFJQyxNQUFNLFFBQVEsTUFBTTtBQUNuQyxTQUFTQyxpQkFBaUIsUUFBUSxjQUFjO0FBQ2hELFNBQVNDLGNBQWMsUUFBUSx3QkFBd0I7QUFDdkQsU0FBU0Msd0JBQXdCLFFBQTRCLGtCQUFrQjtB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TUFBTUksRUFBRSxHQUFHLGlCQUFpQmUsSUFBSSxFQUFFO0lBQ2xDLG9CQUNDbEMsSUFBQTtNQUFLbUIsRUFBRSxFQUFFQSxFQUFHO01BQUMsYUFBVSxRQUFRO01BQUFxQixRQUFBLGVBQzlCeEMsSUFBQSxDQUFDWCxRQUFRO1FBQ1JvRCxZQUFZLEVBQUU7VUFBRUMsUUFBUSxFQUFFLFFBQVE7VUFBRUMsVUFBVSxFQUFFO1FBQVMsQ0FBRTtRQUMzREMsSUFBSSxFQUFFaEMsTUFBTztRQUNiaUMsZ0JBQWdCLEVBQUUsSUFBSztRQUN2QkMsT0FBTyxFQUFFLElBQUksQ0FBQzdCLGlCQUFrQjtRQUNoQ00sU0FBUyxFQUFDLDhCQUE4QjtRQUFBaUIsUUFBQSxlQUN4Q3hDLElBQUEsQ0FBQ1YsZUFBZTtVQUNmaUMsU0FBUyxFQUFFQSxTQUFVO1VBQ3JCLG9CQUFrQixHQUFHSixFQUFFLGdCQUFpQjtVQUN4QzRCLE9BQU8sZUFDTi9DLElBQUE7WUFBTW1CLEVBQUUsRUFBRSxHQUFHQSxFQUFFLGdCQUFpQjtZQUFDSSxTQUFTLEVBQUMsNEJBQTRCO1lBQUFpQixRQUFBLGVBQ3RFeEMsSUFBQTtjQUFJdUIsU0FBUyxFQUFDLFlBQVk7Y0FBQWlCLFFBQUEsRUFBRSxDQUFDLENBQUMzQixZQUFZLElBQUlBLFlBQVksQ0FBQ21DO1lBQUksQ0FBSztVQUFDLENBQ2hFLENBQ047VUFDREMsTUFBTSxFQUFFLGNBQ1AvQyxLQUFBLENBQUNkLE1BQU07WUFDTm1DLFNBQVMsRUFBQywyQkFBMkI7WUFDckMsY0FBVyxPQUFPO1lBQ2xCMkIsS0FBSyxFQUFDLFNBQVM7WUFFZkMsT0FBTyxFQUFFLElBQUksQ0FBQ3hCLGtCQUFtQjtZQUFBYSxRQUFBLGdCQUNqQ3hDLElBQUEsQ0FBQ1QsU0FBUztjQUFDZ0MsU0FBUyxFQUFDO1lBQU8sQ0FBRSxDQUFDLFNBRWhDO1VBQUEsR0FKSyxPQUlHLENBQUM7UUFDUixDQUNGO01BQUMsQ0FDTztJQUFDLENBQ1AsQ0FBQztFQUVSO0FBQ0Q7QUFFQSxPQUFPLE1BQU02QixlQUFlLEdBQUlyQyxLQUFnRSxJQUFLO0VBQ3BHLE9BQU87SUFDTkosYUFBYSxFQUFFSSxLQUFLLENBQUNKLGFBQWEsQ0FBQzBDLEtBQUs7SUFDeEMzQyxZQUFZLEVBQUU0QyxNQUFNLENBQUNDLElBQUksQ0FBQ3hDLEtBQUssQ0FBQ3lDLE1BQU07RUFDdkMsQ0FBQztBQUNGLENBQUM7QUFFRCxlQUFlL0QsT0FBTyxDQUFDMkQsZUFBZSxDQUFDLENBQUNqRCxhQUFhLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=