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.
- package/lib/components/ActionList.js +164 -37
- package/lib/components/AlertDialog.js +128 -12
- package/lib/components/AlertWithIcon.js +88 -29
- package/lib/components/ConnectedModal.js +35 -12
- package/lib/components/Dropdowns/GroupsDropdown.js +63 -45
- package/lib/components/Dropdowns/ManagedNavDropdown.js +92 -67
- package/lib/components/Dropdowns/UserDropdown.js +105 -24
- package/lib/components/Dropdowns/index.js +4 -10
- package/lib/components/EntityOwnerList.js +47 -21
- package/lib/components/Error.js +101 -12
- package/lib/components/ErrorBoundary.js +127 -38
- package/lib/components/ErrorMessage.js +39 -12
- package/lib/components/Forms/DateField.js +56 -45
- package/lib/components/Forms/TimeField.js +76 -45
- package/lib/components/Forms/index.js +3 -5
- package/lib/components/Groups/CreateEditCopySaveButtons.js +109 -14
- package/lib/components/Groups/ExternalGroups/Attach.js +206 -151
- package/lib/components/Groups/ExternalGroups/Table.js +176 -48
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
- package/lib/components/Groups/RosterSyncInfo.js +142 -23
- package/lib/components/HOC/AccessibleAppComponent.js +88 -72
- package/lib/components/HOC/ActivityRequiredComponent.js +68 -33
- package/lib/components/HOC/AsyncComponent.js +49 -41
- package/lib/components/HOC/AuthenticatedComponent.js +55 -44
- package/lib/components/HOC/CollectionComponent.js +154 -104
- package/lib/components/HOC/CollectionFirstItemComponent.js +45 -40
- package/lib/components/HOC/CollectionItemComponent.js +152 -100
- package/lib/components/HOC/ConnectedModalComponent.js +87 -69
- package/lib/components/HOC/DataDependentComponent.js +26 -27
- package/lib/components/HOC/EntityComponent.js +57 -53
- package/lib/components/HOC/FullscreenModalComponent.js +139 -108
- package/lib/components/HOC/GroupActivityRequiredComponent.js +27 -20
- package/lib/components/HOC/GuidComponent.js +20 -20
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +32 -29
- package/lib/components/HOC/ModelErrorRedirectComponent.js +37 -39
- package/lib/components/HOC/SearchPersistorComponent.js +237 -173
- package/lib/components/HOC/UnauthenticatedComponent.js +32 -30
- package/lib/components/HOC/UserComponent.js +6 -8
- package/lib/components/Icons/IconAlphaList.js +28 -8
- package/lib/components/Icons/IconExternalUser.js +28 -8
- package/lib/components/Icons/IconImpersonation.js +28 -8
- package/lib/components/Icons/IconStopImpersonating.js +28 -8
- package/lib/components/Icons/IconTable.js +29 -9
- package/lib/components/Icons/IconTableDeleteCol.js +28 -8
- package/lib/components/Icons/IconTableDeleteRow.js +28 -8
- package/lib/components/Icons/IconTableInsertCol.js +28 -8
- package/lib/components/Icons/IconTableInsertRow.js +28 -8
- package/lib/components/Impersonation/Button.js +71 -16
- package/lib/components/Impersonation/Link.js +72 -16
- package/lib/components/Impersonation/UserDetail.js +60 -11
- package/lib/components/Loading.js +23 -8
- package/lib/components/LockDownBrowser/Check.js +188 -51
- package/lib/components/LockDownBrowser/ExitButton.js +22 -13
- package/lib/components/LockDownBrowser/Launch.js +64 -64
- package/lib/components/Lti/Confirm.js +147 -14
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +165 -36
- package/lib/components/Lti/Launch.js +99 -25
- package/lib/components/Lti/LaunchGroup.js +81 -16
- package/lib/components/ManageTable.js +304 -90
- package/lib/components/ManageTableNoDataComponent.js +38 -7
- package/lib/components/NewVersionAlert.js +76 -49
- package/lib/components/NotFound.js +81 -11
- package/lib/components/Notifications.js +179 -129
- package/lib/components/PaginationNextButton.js +28 -9
- package/lib/components/PaginationPreviousButton.js +28 -9
- package/lib/components/Quill/CustomToolbar.js +427 -222
- package/lib/components/Quill/Formats/Image.js +67 -67
- package/lib/components/Quill/Formats/List.js +38 -47
- package/lib/components/Quill/Formats/Video.js +23 -26
- package/lib/components/Quill/ImageDropModule.js +136 -114
- package/lib/components/Quill/ImageWarning.js +41 -12
- package/lib/components/Quill/ImageWithAltTextModal.js +420 -89
- package/lib/components/Quill/Specs/CustomImageSpec.js +32 -31
- package/lib/components/Quill/Specs/CustomVideoSpec.js +22 -23
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +89 -97
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +47 -50
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +48 -51
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +219 -224
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +75 -86
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +70 -73
- package/lib/components/Quill/TableModule/constants.js +40 -42
- package/lib/components/Quill/TableModule/index.js +357 -305
- package/lib/components/Quill/TableModule/utils.js +39 -48
- package/lib/components/Quill/accessibilityFix.js +219 -223
- package/lib/components/Quill/index.js +30 -33
- package/lib/components/RefreshIndicator/Bordered.js +44 -10
- package/lib/components/RefreshIndicator/Inline.js +43 -12
- package/lib/components/RefreshIndicator/index.js +257 -62
- package/lib/components/SearchControls.js +211 -14
- package/lib/components/SentryRoute.js +5 -7
- package/lib/components/Tables/RoleFilter.js +66 -38
- package/lib/components/Tables/TextFilter.js +58 -18
- package/lib/components/UserRoles/Add.js +193 -99
- package/lib/components/UserRoles/Context.js +3 -6
- package/lib/components/UserRoles/RoleCell.js +176 -75
- package/lib/components/UserRoles/Select.js +151 -20
- package/lib/components/UserRoles/Table.js +215 -82
- package/lib/components/UserRoles/index.js +526 -386
- package/lib/config/eslint/index.js +26 -29
- package/lib/config/eslint/lib/order.js +21 -28
- package/lib/config/eslint/lib/prettier.js +15 -19
- package/lib/config/eslint/lib/typescript.js +87 -113
- package/lib/config/eslint/react.js +18 -15
- package/lib/constants/baseActivity.js +26 -28
- package/lib/constants/baseRole.js +10 -12
- package/lib/constants/configuration.js +43 -55
- package/lib/constants/externalProviderType.js +6 -8
- package/lib/constants/fetchErrorData.js +10 -12
- package/lib/constants/index.js +13 -15
- package/lib/constants/lockDownBrowser.js +23 -25
- package/lib/constants/mockData.js +370 -300
- package/lib/constants/modelStatus.js +11 -13
- package/lib/constants/notificationType.js +8 -10
- package/lib/constants/operatingSystem.js +8 -10
- package/lib/constants/shard.js +7 -9
- package/lib/constants/table.js +18 -22
- package/lib/constants/tier.js +8 -10
- package/lib/constants/userRole.js +11 -8
- package/lib/endpointMappings.js +191 -182
- package/lib/hooks/useCollection.js +79 -65
- package/lib/hooks/useCollectionConfiguration.js +220 -80
- package/lib/hooks/useCollectionItem.js +151 -57
- package/lib/hooks/useGuid.js +16 -9
- package/lib/hooks/usePrevious.js +14 -13
- package/lib/index.js +11 -26
- package/lib/redux/actionCreator.js +44 -35
- package/lib/redux/actions/AuthAction.js +45 -32
- package/lib/redux/actions/ModalAction.js +6 -8
- package/lib/redux/actions/ModelAction.js +95 -43
- package/lib/redux/actions/NotificationAction.js +6 -8
- package/lib/redux/actions/SearchAction.js +5 -7
- package/lib/redux/actions/index.js +6 -8
- package/lib/redux/configureReducers.js +48 -46
- package/lib/redux/configureStore.js +77 -91
- package/lib/redux/helpers.js +2 -5
- package/lib/redux/reducers/authReducer.js +44 -43
- package/lib/redux/reducers/index.js +7 -14
- package/lib/redux/reducers/modalsReducer.js +43 -31
- package/lib/redux/reducers/modelsReducer.js +131 -137
- package/lib/redux/reducers/notificationsReducer.js +20 -20
- package/lib/redux/reducers/searchReducer.js +13 -13
- package/lib/redux/sagas/appInsightsSaga.js +19 -21
- package/lib/redux/sagas/authSaga.js +248 -234
- package/lib/redux/sagas/caliperSaga.js +142 -131
- package/lib/redux/sagas/clockOffsetSaga.js +29 -32
- package/lib/redux/sagas/configurationSaga.js +8 -10
- package/lib/redux/sagas/downtimeApiErrorSaga.js +16 -19
- package/lib/redux/sagas/errorSaga.js +23 -24
- package/lib/redux/sagas/googleAnalyticsSaga.js +24 -27
- package/lib/redux/sagas/identityProviderSaga.js +19 -21
- package/lib/redux/sagas/initialDataLoadSaga.js +34 -31
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +25 -22
- package/lib/redux/sagas/modelFetchSaga.js +302 -286
- package/lib/redux/sagas/noStoreSaga.js +60 -61
- package/lib/redux/sagas/postLoginDataSaga.js +37 -32
- package/lib/redux/sagas/postLoginRedirectSaga.js +22 -27
- package/lib/redux/sagas/rootSaga.js +77 -60
- package/lib/redux/sagas/sentrySaga.js +25 -28
- package/lib/redux/sagas/userIdSaga.js +13 -15
- package/lib/services/codeProviderService.js +21 -21
- package/lib/services/dateService.js +6 -8
- package/lib/services/documentService.js +10 -11
- package/lib/services/fetchService.js +103 -95
- package/lib/services/persistenceService.js +27 -30
- package/lib/services/ticketProviderService.js +25 -25
- package/lib/services/tokenPersistenceService.js +8 -10
- package/lib/services/windowService.js +14 -16
- package/lib/startup.js +110 -101
- package/lib/types/AppConfiguration.js +2 -2
- package/lib/types/Artifact.js +7 -9
- package/lib/types/BaseReduxState.js +2 -2
- package/lib/types/Client.js +2 -2
- package/lib/types/Collection.js +2 -2
- package/lib/types/Configuration.js +2 -2
- package/lib/types/DeepLinkingResponseRequest.js +2 -2
- package/lib/types/DeletableModel.js +2 -2
- package/lib/types/Event.js +2 -2
- package/lib/types/ExternalGroup.js +2 -2
- package/lib/types/ExternalProvider.js +2 -2
- package/lib/types/ExternalTerm.js +2 -2
- package/lib/types/Group.js +2 -2
- package/lib/types/IdentityProvider.js +2 -2
- package/lib/types/LtiLaunch.js +2 -2
- package/lib/types/NameOnlyEntity.js +2 -2
- package/lib/types/Notification.js +2 -2
- package/lib/types/OptionalRecord.js +2 -2
- package/lib/types/OwnerSchedule.js +2 -2
- package/lib/types/PropertyOfType.js +2 -2
- package/lib/types/Quill.js +2 -2
- package/lib/types/RoleDescription.js +2 -2
- package/lib/types/Search.js +2 -2
- package/lib/types/SimpleLocation.js +2 -2
- package/lib/types/UniTime.js +2 -2
- package/lib/types/User.js +2 -2
- package/lib/types/UserRole.js +2 -2
- package/lib/types/auth/AuthState.js +2 -2
- package/lib/types/auth/CasV1LoginRequestBody.js +2 -2
- package/lib/types/auth/ClientCredentials.js +2 -2
- package/lib/types/auth/CodeProviderService.js +2 -2
- package/lib/types/auth/LocalLoginRequestBody.js +2 -2
- package/lib/types/auth/TicketProviderService.js +2 -2
- package/lib/types/auth/TokenPersistenceService.js +2 -2
- package/lib/types/auth/index.js +8 -10
- package/lib/types/externals.d.js +2 -0
- package/lib/types/index.js +29 -31
- package/lib/types/net/EndpointConfig.js +2 -2
- package/lib/types/net/EndpointMapping.js +2 -2
- package/lib/types/net/EndpointMappings.js +2 -2
- package/lib/types/net/ErrorHandler.js +2 -2
- package/lib/types/net/FetchConfig.js +2 -2
- package/lib/types/net/FetchErrorData.js +6 -8
- package/lib/types/net/FetchResult.js +2 -2
- package/lib/types/net/HTTPMethod.js +2 -2
- package/lib/types/net/HTTPStatusCode.js +12 -14
- package/lib/types/net/Metadata.js +2 -2
- package/lib/types/net/Model.js +2 -2
- package/lib/types/net/ModelCollection.js +2 -2
- package/lib/types/net/ModelsState.js +2 -2
- package/lib/types/net/OAuthToken.js +2 -2
- package/lib/types/net/OAuthTokenOrNull.js +2 -2
- package/lib/types/net/TokenAccessFunction.js +2 -2
- package/lib/types/net/index.js +17 -19
- package/lib/utils/baseActivity.js +83 -85
- package/lib/utils/baseRole.js +32 -36
- package/lib/utils/collection.js +403 -297
- package/lib/utils/cookies.js +19 -23
- package/lib/utils/date.js +188 -205
- package/lib/utils/dom.js +130 -131
- package/lib/utils/domainIdentifier.js +4 -8
- package/lib/utils/entityUserRole.js +2 -5
- package/lib/utils/error.js +14 -19
- package/lib/utils/events.js +32 -31
- package/lib/utils/externalGroup.js +20 -25
- package/lib/utils/externalProviders.js +4 -7
- package/lib/utils/externalTerms.js +6 -6
- package/lib/utils/fetch.js +168 -176
- package/lib/utils/group.js +14 -11
- package/lib/utils/groupDates.js +38 -46
- package/lib/utils/groupRoles.js +23 -32
- package/lib/utils/lockDownBrowser.js +12 -15
- package/lib/utils/logger.js +23 -28
- package/lib/utils/lti.js +4 -7
- package/lib/utils/model.js +28 -43
- package/lib/utils/number.js +9 -13
- package/lib/utils/promise.js +23 -26
- package/lib/utils/quill.js +55 -60
- package/lib/utils/route.js +52 -60
- package/lib/utils/search.js +72 -87
- package/lib/utils/shard.js +33 -42
- package/lib/utils/sort.js +47 -50
- package/lib/utils/string.js +10 -12
- package/lib/utils/table.js +29 -33
- package/lib/utils/timezone.js +7 -12
- package/lib/utils/url.js +130 -144
- package/lib/utils/user.js +54 -64
- package/lib/utils/userAgent.js +7 -14
- package/lib/utils/userRole.js +36 -39
- package/package.json +17 -3
|
@@ -1,52 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
};
|
|
72
|
+
export const mapStateToProps = state => {
|
|
73
|
+
return {
|
|
74
|
+
client: state.models.client
|
|
75
|
+
};
|
|
49
76
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
83
|
+
export default NotFound;
|
|
84
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZSIsIkNvbCIsIkNvbnRhaW5lciIsIlJvdyIsIkhlbG1ldCIsInVzZUxvY2F0aW9uIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTm90Rm91bmQiLCIkIiwiX2MiLCJzZWFyY2giLCJ0MCIsInBhcnNlZFNlYXJjaCIsInQxIiwiU3ltYm9sIiwiZm9yIiwidGl0bGUiLCJ0MiIsImNoaWxkcmVuIiwidDMiLCJwYXRobmFtZSIsInQ0IiwidDUiLCJocmVmIiwidDYiLCJtZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZSB9IGZyb20gJ3F1ZXJ5LXN0cmluZydcbmltcG9ydCB7IEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb2wsIENvbnRhaW5lciwgUm93IH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJ1xuaW1wb3J0IHsgSGVsbWV0IH0gZnJvbSAncmVhY3QtaGVsbWV0J1xuaW1wb3J0IHsgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXInXG5cbmNvbnN0IE5vdEZvdW5kOiBGdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IHtcblx0Y29uc3QgeyBzZWFyY2ggfSA9IHVzZUxvY2F0aW9uKClcblx0Y29uc3QgcGFyc2VkU2VhcmNoID0gcGFyc2Uoc2VhcmNoKVxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8SGVsbWV0IHRpdGxlPVwiUGFnZSBOb3QgRm91bmRcIiAvPlxuXHRcdFx0PENvbnRhaW5lcj5cblx0XHRcdFx0PFJvdz5cblx0XHRcdFx0XHQ8Q29sIG1kPXs4fT5cblx0XHRcdFx0XHRcdDxoMT5Ob3QgRm91bmQ8L2gxPlxuXHRcdFx0XHRcdFx0PHA+XG5cdFx0XHRcdFx0XHRcdFdlIGNvdWxkIG5vdCBmaW5kIHRoZSByZXF1ZXN0ZWQgcGFnZVxuXHRcdFx0XHRcdFx0XHR7cGFyc2VkU2VhcmNoLnBhdGhuYW1lICYmIGAgYXQgXCIke3BhcnNlZFNlYXJjaC5wYXRobmFtZX1cImB9LlxuXHRcdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHRcdFx0PHA+XG5cdFx0XHRcdFx0XHRcdElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMsIHBsZWFzZSBjb250YWN0IHVzIGF0eycgJ31cblx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cIm1haWx0bzp0bHRAcHVyZHVlLmVkdVwiPnRsdEBwdXJkdWUuZWR1PC9hPi5cblx0XHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0XHQ8L0NvbD5cblx0XHRcdFx0PC9Sb3c+XG5cdFx0XHQ8L0NvbnRhaW5lcj5cblx0XHQ8Lz5cblx0KVxufVxuXG4vLyByZXF1aXJlZCBmb3IgdXNlIGluIFJvdXRlcyAvIEFzeW5jQ29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBOb3RGb3VuZFxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsS0FBSyxRQUFRLGNBQWM7QUFFcEMsU0FBU0MsR0FBRyxFQUFFQyxTQUFTLEVBQUVDLEdBQUcsUUFBUSxpQkFBaUI7QUFDckQsU0FBU0MsTUFBTSxRQUFRLGNBQWM7QUFDckMsU0FBU0MsV0FBVyxRQUFRLGNBQWM7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUUxQyxNQUFNQyxRQUEyQixHQUFHQSxDQUFBO0VBQUEsTUFBQUMsQ0FBQSxHQUFBQyxFQUFBO0VBQ25DO0lBQUFDO0VBQUEsSUFBbUJWLFdBQVcsQ0FBQyxDQUFDO0VBQUEsSUFBQVcsRUFBQTtFQUFBLElBQUFILENBQUEsUUFBQUUsTUFBQTtJQUNYQyxFQUFBLEdBQUFoQixLQUFLLENBQUNlLE1BQU0sQ0FBQztJQUFBRixDQUFBLE1BQUFFLE1BQUE7SUFBQUYsQ0FBQSxNQUFBRyxFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBSCxDQUFBO0VBQUE7RUFBbEMsTUFBQUksWUFBQSxHQUFxQkQsRUFBYTtFQUFBLElBQUFFLEVBQUE7RUFBQSxJQUFBTCxDQUFBLFFBQUFNLE1BQUEsQ0FBQUMsR0FBQTtJQUdoQ0YsRUFBQSxnQkFBQVgsSUFBQSxDQUFDSCxNQUFNO01BQU9pQixLQUFnQixFQUFoQjtJQUFnQixDQUFFLENBQUM7SUFBQVIsQ0FBQSxNQUFBSyxFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBTCxDQUFBO0VBQUE7RUFBQSxJQUFBUyxFQUFBO0VBQUEsSUFBQVQsQ0FBQSxRQUFBTSxNQUFBLENBQUFDLEdBQUE7SUFJOUJFLEVBQUEsZ0JBQUFmLElBQUE7TUFBQWdCLFFBQUEsRUFBSTtJQUFTLENBQUksQ0FBQztJQUFBVixDQUFBLE1BQUFTLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFULENBQUE7RUFBQTtFQUdoQixNQUFBVyxFQUFBLEdBQUFQLFlBQVksQ0FBQVEsUUFBNkMsSUFBekQsUUFBaUNSLFlBQVksQ0FBQVEsUUFBUyxHQUFHO0VBQUEsSUFBQUMsRUFBQTtFQUFBLElBQUFiLENBQUEsUUFBQVcsRUFBQTtJQUYzREUsRUFBQSxnQkFBQWpCLEtBQUE7TUFBQWMsUUFBQSxHQUFHLHNDQUVGLEVBQUNDLEVBQXlELEVBQUMsR0FDNUQ7SUFBQSxDQUFHLENBQUM7SUFBQVgsQ0FBQSxNQUFBVyxFQUFBO0lBQUFYLENBQUEsTUFBQWEsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQWIsQ0FBQTtFQUFBO0VBQUEsSUFBQWMsRUFBQTtFQUFBLElBQUFkLENBQUEsUUFBQU0sTUFBQSxDQUFBQyxHQUFBO0lBQ0pPLEVBQUEsZ0JBQUFsQixLQUFBO01BQUFjLFFBQUEsR0FBRyw2REFDeUQsRUFBQyxHQUFHLGVBQy9EaEIsSUFBQTtRQUFRcUIsSUFBdUIsRUFBdkIsdUJBQXVCO1FBQUFMLFFBQUEsRUFBQztNQUFjLENBQUcsQ0FBQyxLQUNuRDtJQUFBLENBQUcsQ0FBQztJQUFBVixDQUFBLE1BQUFjLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFkLENBQUE7RUFBQTtFQUFBLElBQUFnQixFQUFBO0VBQUEsSUFBQWhCLENBQUEsUUFBQWEsRUFBQTtJQWJSRyxFQUFBLGdCQUFBcEIsS0FBQSxDQUFBRSxTQUFBO01BQUFZLFFBQUEsR0FDQ0wsRUFBaUMsZUFDakNYLElBQUEsQ0FBQ0wsU0FBUztRQUFBcUIsUUFBQSxlQUNUaEIsSUFBQSxDQUFDSixHQUFHO1VBQUFvQixRQUFBLGVBQ0hkLEtBQUEsQ0FBQ1IsR0FBRztZQUFLNkIsRUFBQyxFQUFELENBQUM7WUFBQVAsUUFBQSxHQUNURCxFQUFrQixFQUNsQkksRUFHSSxFQUNKQyxFQUdJO1VBQUEsQ0FDQTtRQUFDLENBQ0Y7TUFBQyxDQUNJLENBQUM7SUFBQSxDQUNYLENBQUM7SUFBQWQsQ0FBQSxNQUFBYSxFQUFBO0lBQUFiLENBQUEsTUFBQWdCLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFoQixDQUFBO0VBQUE7RUFBQSxPQWpCSGdCLEVBaUJHO0FBQUEsQ0FFSjs7QUFFRDtBQUNBLGVBQWVqQixRQUFRIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,135 +1,185 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
};
|
|
178
|
+
export const mapStateToProps = state => {
|
|
179
|
+
return {
|
|
180
|
+
notifications: state.notifications.queue,
|
|
181
|
+
openModalIds: Object.keys(state.modals)
|
|
182
|
+
};
|
|
133
183
|
};
|
|
134
|
-
|
|
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=
|