studiokit-scaffolding-js 7.0.12-next.1.4 → 7.0.12-next.2.2
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 +170 -34
- package/lib/components/AlertDialog.js +133 -9
- package/lib/components/AlertWithIcon.js +92 -25
- package/lib/components/ConnectedModal.js +43 -13
- package/lib/components/Dropdowns/GroupsDropdown.js +69 -44
- package/lib/components/Dropdowns/ManagedNavDropdown.js +100 -67
- package/lib/components/Dropdowns/UserDropdown.js +111 -21
- package/lib/components/Dropdowns/index.js +27 -9
- package/lib/components/EntityOwnerList.js +52 -18
- package/lib/components/Error.js +106 -11
- package/lib/components/ErrorBoundary.js +134 -35
- package/lib/components/ErrorMessage.js +44 -9
- package/lib/components/Forms/DateField.js +61 -42
- package/lib/components/Forms/TimeField.js +81 -42
- package/lib/components/Forms/index.js +27 -4
- package/lib/components/Groups/CreateEditCopySaveButtons.js +114 -11
- package/lib/components/Groups/ExternalGroups/Attach.js +212 -148
- package/lib/components/Groups/ExternalGroups/Table.js +181 -45
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +5 -1
- package/lib/components/Groups/RosterSyncInfo.js +147 -20
- package/lib/components/HOC/AccessibleAppComponent.js +98 -73
- package/lib/components/HOC/ActivityRequiredComponent.js +92 -49
- package/lib/components/HOC/AsyncComponent.js +54 -39
- package/lib/components/HOC/AuthenticatedComponent.js +58 -38
- package/lib/components/HOC/CollectionComponent.js +170 -110
- package/lib/components/HOC/CollectionFirstItemComponent.js +51 -38
- package/lib/components/HOC/CollectionItemComponent.js +168 -106
- package/lib/components/HOC/ConnectedModalComponent.js +109 -80
- package/lib/components/HOC/DataDependentComponent.js +29 -21
- package/lib/components/HOC/EntityComponent.js +71 -57
- package/lib/components/HOC/FullscreenModalComponent.js +163 -123
- package/lib/components/HOC/GroupActivityRequiredComponent.js +45 -31
- package/lib/components/HOC/GuidComponent.js +29 -22
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +41 -31
- package/lib/components/HOC/ModelErrorRedirectComponent.js +51 -47
- package/lib/components/HOC/SearchPersistorComponent.js +240 -166
- package/lib/components/HOC/UnauthenticatedComponent.js +37 -25
- package/lib/components/HOC/UserComponent.js +12 -7
- package/lib/components/Icons/IconAlphaList.js +33 -5
- package/lib/components/Icons/IconExternalUser.js +33 -5
- package/lib/components/Icons/IconImpersonation.js +33 -5
- package/lib/components/Icons/IconStopImpersonating.js +33 -5
- package/lib/components/Icons/IconTable.js +35 -7
- package/lib/components/Icons/IconTableDeleteCol.js +33 -5
- package/lib/components/Icons/IconTableDeleteRow.js +33 -5
- package/lib/components/Icons/IconTableInsertCol.js +33 -5
- package/lib/components/Icons/IconTableInsertRow.js +33 -5
- package/lib/components/Impersonation/Button.js +77 -13
- package/lib/components/Impersonation/Link.js +77 -13
- package/lib/components/Impersonation/UserDetail.js +66 -9
- package/lib/components/Loading.js +26 -4
- package/lib/components/LockDownBrowser/Check.js +194 -49
- package/lib/components/LockDownBrowser/ExitButton.js +26 -9
- package/lib/components/LockDownBrowser/Launch.js +70 -62
- package/lib/components/Lti/Confirm.js +152 -11
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +170 -33
- package/lib/components/Lti/Launch.js +105 -24
- package/lib/components/Lti/LaunchGroup.js +85 -13
- package/lib/components/ManageTable.js +309 -87
- package/lib/components/ManageTableNoDataComponent.js +42 -4
- package/lib/components/NewVersionAlert.js +82 -46
- package/lib/components/NotFound.js +86 -10
- package/lib/components/Notifications.js +185 -126
- package/lib/components/PaginationNextButton.js +33 -6
- package/lib/components/PaginationPreviousButton.js +33 -6
- package/lib/components/Quill/CustomToolbar.js +432 -218
- package/lib/components/Quill/Formats/Image.js +73 -63
- package/lib/components/Quill/Formats/List.js +45 -45
- package/lib/components/Quill/Formats/Video.js +28 -24
- package/lib/components/Quill/ImageDropModule.js +147 -117
- package/lib/components/Quill/ImageWarning.js +47 -9
- package/lib/components/Quill/ImageWithAltTextModal.js +425 -86
- package/lib/components/Quill/Specs/CustomImageSpec.js +42 -34
- package/lib/components/Quill/Specs/CustomVideoSpec.js +34 -28
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +98 -98
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +52 -47
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +53 -48
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +224 -221
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +80 -83
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +75 -70
- package/lib/components/Quill/TableModule/constants.js +45 -41
- package/lib/components/Quill/TableModule/index.js +362 -301
- package/lib/components/Quill/TableModule/utils.js +42 -38
- package/lib/components/Quill/accessibilityFix.js +234 -232
- package/lib/components/Quill/index.js +34 -28
- package/lib/components/RefreshIndicator/Bordered.js +47 -6
- package/lib/components/RefreshIndicator/Inline.js +47 -8
- package/lib/components/RefreshIndicator/index.js +263 -59
- package/lib/components/SearchControls.js +216 -11
- package/lib/components/SentryRoute.js +11 -6
- package/lib/components/Tables/RoleFilter.js +69 -32
- package/lib/components/Tables/TextFilter.js +62 -13
- package/lib/components/UserRoles/Add.js +199 -96
- package/lib/components/UserRoles/Context.js +11 -7
- package/lib/components/UserRoles/RoleCell.js +181 -72
- package/lib/components/UserRoles/Select.js +157 -17
- package/lib/components/UserRoles/Table.js +221 -80
- package/lib/components/UserRoles/index.js +534 -384
- package/lib/config/eslint/index.js +32 -28
- package/lib/config/eslint/lib/order.js +26 -27
- package/lib/config/eslint/lib/prettier.js +20 -18
- package/lib/config/eslint/lib/typescript.js +93 -112
- package/lib/config/eslint/react.js +24 -14
- package/lib/constants/baseActivity.js +30 -26
- package/lib/constants/baseRole.js +14 -10
- package/lib/constants/configuration.js +33 -29
- package/lib/constants/externalProviderType.js +10 -6
- package/lib/constants/fetchErrorData.js +15 -11
- package/lib/constants/index.js +137 -14
- package/lib/constants/lockDownBrowser.js +28 -24
- package/lib/constants/mockData.js +382 -297
- package/lib/constants/modelStatus.js +15 -11
- package/lib/constants/notificationType.js +12 -8
- package/lib/constants/operatingSystem.js +12 -8
- package/lib/constants/shard.js +11 -7
- package/lib/constants/table.js +21 -21
- package/lib/constants/tier.js +12 -8
- package/lib/constants/userRole.js +15 -5
- package/lib/endpointMappings.js +197 -181
- package/lib/hooks/useCollection.js +82 -62
- package/lib/hooks/useCollectionConfiguration.js +228 -83
- package/lib/hooks/useCollectionItem.js +154 -54
- package/lib/hooks/useGuid.js +20 -8
- package/lib/hooks/usePrevious.js +19 -13
- package/lib/index.js +157 -25
- package/lib/redux/actionCreator.js +50 -28
- package/lib/redux/actions/AuthAction.js +44 -31
- package/lib/redux/actions/ModalAction.js +10 -6
- package/lib/redux/actions/ModelAction.js +77 -39
- package/lib/redux/actions/NotificationAction.js +10 -6
- package/lib/redux/actions/SearchAction.js +9 -5
- package/lib/redux/actions/index.js +60 -7
- package/lib/redux/configureReducers.js +60 -49
- package/lib/redux/configureStore.js +83 -87
- package/lib/redux/helpers.js +6 -2
- package/lib/redux/reducers/authReducer.js +50 -43
- package/lib/redux/reducers/index.js +41 -13
- package/lib/redux/reducers/modalsReducer.js +47 -29
- package/lib/redux/reducers/modelsReducer.js +178 -173
- package/lib/redux/reducers/notificationsReducer.js +24 -18
- package/lib/redux/reducers/searchReducer.js +25 -19
- package/lib/redux/sagas/appInsightsSaga.js +22 -18
- package/lib/redux/sagas/authSaga.js +253 -218
- package/lib/redux/sagas/caliperSaga.js +159 -143
- package/lib/redux/sagas/clockOffsetSaga.js +34 -31
- package/lib/redux/sagas/configurationSaga.js +11 -7
- package/lib/redux/sagas/downtimeApiErrorSaga.js +20 -17
- package/lib/redux/sagas/errorSaga.js +27 -21
- package/lib/redux/sagas/googleAnalyticsSaga.js +28 -24
- package/lib/redux/sagas/identityProviderSaga.js +22 -18
- package/lib/redux/sagas/initialDataLoadSaga.js +37 -28
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +29 -20
- package/lib/redux/sagas/modelFetchSaga.js +355 -322
- package/lib/redux/sagas/noStoreSaga.js +61 -48
- package/lib/redux/sagas/postLoginDataSaga.js +45 -34
- package/lib/redux/sagas/postLoginRedirectSaga.js +27 -27
- package/lib/redux/sagas/rootSaga.js +82 -57
- package/lib/redux/sagas/sentrySaga.js +29 -25
- package/lib/redux/sagas/userIdSaga.js +16 -12
- package/lib/services/codeProviderService.js +25 -19
- package/lib/services/dateService.js +12 -7
- package/lib/services/documentService.js +17 -12
- package/lib/services/fetchService.js +129 -112
- package/lib/services/persistenceService.js +33 -29
- package/lib/services/ticketProviderService.js +29 -23
- package/lib/services/tokenPersistenceService.js +12 -8
- package/lib/services/windowService.js +18 -14
- package/lib/startup.js +132 -114
- package/lib/types/AppConfiguration.js +5 -1
- package/lib/types/Artifact.js +11 -7
- package/lib/types/BaseReduxState.js +5 -1
- package/lib/types/Client.js +5 -1
- package/lib/types/Collection.js +5 -1
- package/lib/types/Configuration.js +5 -1
- package/lib/types/DeepLinkingResponseRequest.js +5 -1
- package/lib/types/DeletableModel.js +5 -1
- package/lib/types/Event.js +5 -1
- package/lib/types/ExternalGroup.js +5 -1
- package/lib/types/ExternalProvider.js +5 -1
- package/lib/types/ExternalTerm.js +5 -1
- package/lib/types/Group.js +5 -1
- package/lib/types/IdentityProvider.js +5 -1
- package/lib/types/LtiLaunch.js +5 -1
- package/lib/types/NameOnlyEntity.js +5 -1
- package/lib/types/Notification.js +5 -1
- package/lib/types/OptionalRecord.js +5 -1
- package/lib/types/OwnerSchedule.js +5 -1
- package/lib/types/PropertyOfType.js +5 -1
- package/lib/types/Quill.js +5 -1
- package/lib/types/RoleDescription.js +5 -1
- package/lib/types/Search.js +5 -1
- package/lib/types/SimpleLocation.js +5 -1
- package/lib/types/UniTime.js +5 -1
- package/lib/types/User.js +5 -1
- package/lib/types/UserRole.js +5 -1
- package/lib/types/auth/AuthState.js +5 -1
- package/lib/types/auth/CasV1LoginRequestBody.js +5 -1
- package/lib/types/auth/ClientCredentials.js +5 -1
- package/lib/types/auth/CodeProviderService.js +5 -1
- package/lib/types/auth/LocalLoginRequestBody.js +5 -1
- package/lib/types/auth/TicketProviderService.js +5 -1
- package/lib/types/auth/TokenPersistenceService.js +5 -1
- package/lib/types/auth/index.js +82 -9
- package/lib/types/externals.d.js +2 -0
- package/lib/types/index.js +313 -30
- package/lib/types/net/EndpointConfig.js +5 -1
- package/lib/types/net/EndpointMapping.js +5 -1
- package/lib/types/net/EndpointMappings.js +5 -1
- package/lib/types/net/ErrorHandler.js +5 -1
- package/lib/types/net/FetchConfig.js +5 -1
- package/lib/types/net/FetchErrorData.js +10 -6
- package/lib/types/net/FetchResult.js +5 -1
- package/lib/types/net/HTTPMethod.js +5 -1
- package/lib/types/net/HTTPStatusCode.js +16 -12
- package/lib/types/net/Metadata.js +5 -1
- package/lib/types/net/Model.js +5 -1
- package/lib/types/net/ModelCollection.js +5 -1
- package/lib/types/net/ModelsState.js +5 -1
- package/lib/types/net/OAuthToken.js +5 -1
- package/lib/types/net/OAuthTokenOrNull.js +5 -1
- package/lib/types/net/TokenAccessFunction.js +5 -1
- package/lib/types/net/index.js +181 -18
- package/lib/utils/baseActivity.js +133 -123
- package/lib/utils/baseRole.js +37 -33
- package/lib/utils/collection.js +425 -298
- package/lib/utils/cookies.js +22 -19
- package/lib/utils/date.js +303 -279
- package/lib/utils/dom.js +176 -165
- package/lib/utils/domainIdentifier.js +9 -5
- package/lib/utils/entityUserRole.js +6 -2
- package/lib/utils/error.js +17 -15
- package/lib/utils/events.js +40 -31
- package/lib/utils/externalGroup.js +22 -18
- package/lib/utils/externalProviders.js +8 -4
- package/lib/utils/externalTerms.js +10 -3
- package/lib/utils/fetch.js +179 -180
- package/lib/utils/group.js +18 -7
- package/lib/utils/groupDates.js +37 -33
- package/lib/utils/groupRoles.js +25 -21
- package/lib/utils/lockDownBrowser.js +15 -11
- package/lib/utils/logger.js +26 -22
- package/lib/utils/lti.js +9 -4
- package/lib/utils/model.js +36 -41
- package/lib/utils/number.js +21 -18
- package/lib/utils/promise.js +28 -21
- package/lib/utils/quill.js +65 -62
- package/lib/utils/route.js +58 -55
- package/lib/utils/search.js +76 -80
- package/lib/utils/shard.js +37 -37
- package/lib/utils/sort.js +50 -42
- package/lib/utils/string.js +13 -8
- package/lib/utils/table.js +38 -33
- package/lib/utils/timezone.js +10 -6
- package/lib/utils/url.js +142 -142
- package/lib/utils/user.js +58 -55
- package/lib/utils/userAgent.js +10 -10
- package/lib/utils/userRole.js +57 -49
- package/package.json +17 -3
|
@@ -1,199 +1,204 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = modelsReducer;
|
|
3
8
|
exports.getMetadata = getMetadata;
|
|
4
9
|
exports.isCollection = isCollection;
|
|
5
10
|
exports.isNullResponse = isNullResponse;
|
|
6
11
|
exports.merge = merge;
|
|
7
12
|
exports.updateMetadataForChildCollections = updateMetadataForChildCollections;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @param state The redux state object
|
|
18
|
-
* @param path An array of keys that represent the path to the entity in question
|
|
13
|
+
var _lodash = require("lodash");
|
|
14
|
+
var _fp2 = _interopRequireDefault(require("lodash/fp"));
|
|
15
|
+
var _actions = require("../actions");
|
|
16
|
+
/**
|
|
17
|
+
* Given the state and a path into that state object, return the prop that
|
|
18
|
+
* is named "_metadata"
|
|
19
|
+
*
|
|
20
|
+
* @param state The redux state object
|
|
21
|
+
* @param path An array of keys that represent the path to the entity in question
|
|
19
22
|
*/
|
|
20
23
|
function getMetadata(state, path) {
|
|
21
|
-
|
|
24
|
+
return (0, _lodash.merge)({}, (0, _lodash.get)(state, path.concat('_metadata')));
|
|
22
25
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get whether or not an object is a "collection" (id key-value dictionary).
|
|
29
|
+
* @param obj
|
|
30
|
+
* @returns A boolean
|
|
27
31
|
*/
|
|
28
32
|
function isCollection(obj) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const child = obj[key];
|
|
34
|
-
return ((0, lodash_1.isPlainObject)(child) &&
|
|
35
|
-
(key === '_metadata' ||
|
|
36
|
-
(Object.prototype.hasOwnProperty.call(child, 'id') &&
|
|
37
|
-
(child.id === parseInt(key, 10) || child.id === key))));
|
|
38
|
-
}));
|
|
33
|
+
return !(0, _lodash.isArray)(obj) && (0, _lodash.isPlainObject)(obj) && Object.keys(obj).length > 0 && Object.keys(obj).every(key => {
|
|
34
|
+
const child = obj[key];
|
|
35
|
+
return (0, _lodash.isPlainObject)(child) && (key === '_metadata' || Object.prototype.hasOwnProperty.call(child, 'id') && (child.id === parseInt(key, 10) || child.id === key));
|
|
36
|
+
});
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*
|
|
43
|
-
* @
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get whether or not an object is a "null response".
|
|
41
|
+
* @param obj
|
|
42
|
+
* @returns A boolean
|
|
44
43
|
*/
|
|
45
44
|
function isNullResponse(obj) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return key === '_metadata' || (key === 'response' && child === null);
|
|
51
|
-
}));
|
|
45
|
+
return (0, _lodash.isPlainObject)(obj) && Object.keys(obj).length > 0 && Object.keys(obj).every(key => {
|
|
46
|
+
const child = obj[key];
|
|
47
|
+
return key === '_metadata' || key === 'response' && child === null;
|
|
48
|
+
});
|
|
52
49
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* *
|
|
59
|
-
* * or
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* @param
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Merge the `current` and `incoming` objects recursively, returning a new combined object.
|
|
53
|
+
*
|
|
54
|
+
* For each key in `current`:
|
|
55
|
+
* * remove if `current` is a "collection" and item key is not in `incoming`
|
|
56
|
+
* * recurse if `incoming` is an object or array and has a value
|
|
57
|
+
* * or preserve existing value
|
|
58
|
+
*
|
|
59
|
+
* For each key in `incoming` not in `current`:
|
|
60
|
+
* * copy value to result
|
|
61
|
+
*
|
|
62
|
+
* @param current
|
|
63
|
+
* @param incoming
|
|
66
64
|
*/
|
|
67
65
|
function merge(current, incoming) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
// do not merge arrays
|
|
67
|
+
if ((0, _lodash.isArray)(current)) {
|
|
68
|
+
return !(0, _lodash.isUndefined)(incoming) ? incoming : current;
|
|
69
|
+
}
|
|
70
|
+
// if incoming is `null` or a null response (`{'response': null}`), do not merge, just use incoming
|
|
71
|
+
if (incoming === null || !(0, _lodash.isUndefined)(incoming) && isNullResponse(incoming)) {
|
|
72
|
+
return incoming;
|
|
73
|
+
}
|
|
74
|
+
const result = Object.keys(current).reduce((out, k) => {
|
|
75
|
+
const c = current[k];
|
|
76
|
+
const i = incoming && incoming[k];
|
|
77
|
+
// non-relations
|
|
78
|
+
if (!(0, _lodash.isArray)(c) && !(0, _lodash.isPlainObject)(c)) {
|
|
79
|
+
// copy incoming value, if any, otherwise keep current
|
|
80
|
+
out[k] = !(0, _lodash.isUndefined)(i) ? i : c;
|
|
81
|
+
return out;
|
|
75
82
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// non-relations
|
|
80
|
-
if (!(0, lodash_1.isArray)(c) && !(0, lodash_1.isPlainObject)(c)) {
|
|
81
|
-
// copy incoming value, if any, otherwise keep current
|
|
82
|
-
out[k] = !(0, lodash_1.isUndefined)(i) ? i : c;
|
|
83
|
-
return out;
|
|
84
|
-
}
|
|
85
|
-
// remove "collection" item not included in incoming
|
|
86
|
-
if ((isCollection(current) || isCollection(incoming)) && !(0, lodash_1.isUndefined)(incoming) && (0, lodash_1.isUndefined)(i)) {
|
|
87
|
-
return out;
|
|
88
|
-
}
|
|
89
|
-
// merge relations
|
|
90
|
-
out[k] = merge(c, i);
|
|
91
|
-
return out;
|
|
92
|
-
}, {});
|
|
93
|
-
if (!(0, lodash_1.isNil)(incoming) && (0, lodash_1.isPlainObject)(incoming)) {
|
|
94
|
-
// copy incoming properties that are not on current
|
|
95
|
-
Object.keys(incoming).forEach(k => {
|
|
96
|
-
const c = current[k];
|
|
97
|
-
const i = incoming[k];
|
|
98
|
-
if ((0, lodash_1.isUndefined)(c)) {
|
|
99
|
-
result[k] = i;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
83
|
+
// remove "collection" item not included in incoming
|
|
84
|
+
if ((isCollection(current) || isCollection(incoming)) && !(0, _lodash.isUndefined)(incoming) && (0, _lodash.isUndefined)(i)) {
|
|
85
|
+
return out;
|
|
102
86
|
}
|
|
103
|
-
|
|
87
|
+
// merge relations
|
|
88
|
+
out[k] = merge(c, i);
|
|
89
|
+
return out;
|
|
90
|
+
}, {});
|
|
91
|
+
if (!(0, _lodash.isNil)(incoming) && (0, _lodash.isPlainObject)(incoming)) {
|
|
92
|
+
// copy incoming properties that are not on current
|
|
93
|
+
Object.keys(incoming).forEach(k => {
|
|
94
|
+
const c = current[k];
|
|
95
|
+
const i = incoming[k];
|
|
96
|
+
if ((0, _lodash.isUndefined)(c)) {
|
|
97
|
+
result[k] = i;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
104
102
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
*
|
|
108
|
-
* @param
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Sets `_metadata` on any nested collections and collection items in the data
|
|
106
|
+
* @param data
|
|
107
|
+
* @param metadata
|
|
109
108
|
*/
|
|
110
109
|
function updateMetadataForChildCollections(data, metadata) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
110
|
+
const isDataCollection = isCollection(data);
|
|
111
|
+
Object.keys(data).forEach(key => {
|
|
112
|
+
const value = data[key];
|
|
113
|
+
if (isDataCollection && key !== '_metadata' && (0, _lodash.isPlainObject)(value) || isCollection(value)) {
|
|
114
|
+
value._metadata = metadata;
|
|
115
|
+
updateMetadataForChildCollections(value, metadata);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
119
118
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* Data
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* @
|
|
134
|
-
* @param
|
|
135
|
-
* @
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Reducer for fetching and updating `models` in redux.
|
|
122
|
+
*
|
|
123
|
+
* Fetching state updated with every action.
|
|
124
|
+
* Data updated on result received.
|
|
125
|
+
* Data and fetchedDate NOT deleted on failed request. All data at key removed on MODEL_REMOVE_KEY.
|
|
126
|
+
*
|
|
127
|
+
* All actions require a `modelPath` key to function with this reducer.
|
|
128
|
+
*
|
|
129
|
+
* Arrays are converted to objects that represent a dictionary with the numeric id of the object used
|
|
130
|
+
* as the key and the entire object used as the value
|
|
131
|
+
*
|
|
132
|
+
* @export
|
|
133
|
+
* @param state The state of the models. Initially empty
|
|
134
|
+
* @param action The action upon which we dispatch
|
|
135
|
+
* @returns The updated state
|
|
136
136
|
*/
|
|
137
|
-
function modelsReducer(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
137
|
+
function modelsReducer() {
|
|
138
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
139
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
140
|
+
if (!action.modelPath) {
|
|
141
|
+
return state;
|
|
142
|
+
}
|
|
143
|
+
const path = action.modelPath.split('.');
|
|
144
|
+
// the object value at the specified path
|
|
145
|
+
let valueAtPath = (0, _lodash.merge)({}, (0, _lodash.get)(state, path));
|
|
146
|
+
const metadata = getMetadata(state, path);
|
|
147
|
+
let metadataUpdate;
|
|
148
|
+
switch (action.type) {
|
|
149
|
+
case _actions.MODEL_FETCH_START_ACTION_TYPE.FETCH_START:
|
|
150
|
+
// Retain the entity data, update the metadata to reflect fetch in request state
|
|
151
|
+
metadataUpdate = {
|
|
152
|
+
isFetching: true,
|
|
153
|
+
hasError: false,
|
|
154
|
+
lastFetchErrorData: undefined
|
|
155
|
+
};
|
|
156
|
+
valueAtPath._metadata = (0, _lodash.merge)(metadata, metadataUpdate);
|
|
157
|
+
if (action.guid) {
|
|
158
|
+
valueAtPath.guid = action.guid;
|
|
159
|
+
}
|
|
160
|
+
return _fp2.default.setWith(Object, path, valueAtPath, state);
|
|
161
|
+
case _actions.MODEL_FETCH_RESULT_ACTION_TYPE.FETCH_RESULT_RECEIVED:
|
|
162
|
+
{
|
|
163
|
+
// Update the metadata to reflect fetch is complete.
|
|
164
|
+
metadataUpdate = {
|
|
165
|
+
isFetching: false,
|
|
166
|
+
hasError: false,
|
|
167
|
+
lastFetchErrorData: undefined,
|
|
168
|
+
fetchedAt: new Date()
|
|
169
|
+
};
|
|
170
|
+
const incoming = !(0, _lodash.isPlainObject)(action.data) && !(0, _lodash.isArray)(action.data) ? {
|
|
171
|
+
response: action.data
|
|
172
|
+
} : action.data;
|
|
173
|
+
updateMetadataForChildCollections(incoming, metadataUpdate);
|
|
174
|
+
// merging the incoming with existing
|
|
175
|
+
// otherwise completely replace the existing value in redux
|
|
176
|
+
if (!action.replaceValue) {
|
|
177
|
+
valueAtPath = merge(valueAtPath, incoming);
|
|
178
|
+
} else {
|
|
179
|
+
valueAtPath = (0, _lodash.merge)({}, incoming);
|
|
180
180
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
181
|
+
valueAtPath._metadata = (0, _lodash.merge)({}, metadata, metadataUpdate);
|
|
182
|
+
const result = _fp2.default.setWith(Object, path, valueAtPath, state);
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
case _actions.MODEL_FETCH_ERROR_ACTION_TYPE.FETCH_FAILED:
|
|
186
|
+
// Retain the object, update the metadata to reflect the fact that the request failed
|
|
187
|
+
metadataUpdate = {
|
|
188
|
+
isFetching: false,
|
|
189
|
+
hasError: true,
|
|
190
|
+
lastFetchErrorData: action.errorData
|
|
191
|
+
};
|
|
192
|
+
valueAtPath._metadata = (0, _lodash.merge)(metadata, metadataUpdate);
|
|
193
|
+
if (action.guid) {
|
|
194
|
+
valueAtPath.guid = action.guid;
|
|
195
|
+
}
|
|
196
|
+
return _fp2.default.setWith(Object, path, valueAtPath, state);
|
|
197
|
+
case _actions.MODEL_REMOVE_KEY_ACTION_TYPE:
|
|
198
|
+
// Completely remove the object at the path from the state
|
|
199
|
+
return _fp2.default.unset(path, state);
|
|
200
|
+
default:
|
|
201
|
+
return state;
|
|
202
|
+
}
|
|
199
203
|
}
|
|
204
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9mcDIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2FjdGlvbnMiLCJnZXRNZXRhZGF0YSIsInN0YXRlIiwicGF0aCIsImxvZGFzaE1lcmdlIiwiZ2V0IiwiY29uY2F0IiwiaXNDb2xsZWN0aW9uIiwib2JqIiwiaXNBcnJheSIsImlzUGxhaW5PYmplY3QiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiZXZlcnkiLCJrZXkiLCJjaGlsZCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImlkIiwicGFyc2VJbnQiLCJpc051bGxSZXNwb25zZSIsIm1lcmdlIiwiY3VycmVudCIsImluY29taW5nIiwiaXNVbmRlZmluZWQiLCJyZXN1bHQiLCJyZWR1Y2UiLCJvdXQiLCJrIiwiYyIsImkiLCJpc05pbCIsImZvckVhY2giLCJ1cGRhdGVNZXRhZGF0YUZvckNoaWxkQ29sbGVjdGlvbnMiLCJkYXRhIiwibWV0YWRhdGEiLCJpc0RhdGFDb2xsZWN0aW9uIiwidmFsdWUiLCJfbWV0YWRhdGEiLCJtb2RlbHNSZWR1Y2VyIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiYWN0aW9uIiwibW9kZWxQYXRoIiwic3BsaXQiLCJ2YWx1ZUF0UGF0aCIsIm1ldGFkYXRhVXBkYXRlIiwidHlwZSIsIk1PREVMX0ZFVENIX1NUQVJUX0FDVElPTl9UWVBFIiwiRkVUQ0hfU1RBUlQiLCJpc0ZldGNoaW5nIiwiaGFzRXJyb3IiLCJsYXN0RmV0Y2hFcnJvckRhdGEiLCJndWlkIiwiX2ZwIiwic2V0V2l0aCIsIk1PREVMX0ZFVENIX1JFU1VMVF9BQ1RJT05fVFlQRSIsIkZFVENIX1JFU1VMVF9SRUNFSVZFRCIsImZldGNoZWRBdCIsIkRhdGUiLCJyZXNwb25zZSIsInJlcGxhY2VWYWx1ZSIsIk1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFIiwiRkVUQ0hfRkFJTEVEIiwiZXJyb3JEYXRhIiwiTU9ERUxfUkVNT1ZFX0tFWV9BQ1RJT05fVFlQRSIsInVuc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3JlZHVjZXJzL21vZGVsc1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSwgZ2V0LCBpc0FycmF5LCBpc05pbCwgaXNQbGFpbk9iamVjdCwgaXNVbmRlZmluZWQsIG1lcmdlIGFzIGxvZGFzaE1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgX2ZwIGZyb20gJ2xvZGFzaC9mcCdcclxuaW1wb3J0IHsgTWV0YWRhdGEsIE1vZGVsIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7XHJcblx0TU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUsXHJcblx0TU9ERUxfRkVUQ0hfUkVTVUxUX0FDVElPTl9UWVBFLFxyXG5cdE1PREVMX0ZFVENIX1NUQVJUX0FDVElPTl9UWVBFLFxyXG5cdE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsXHJcblx0TW9kZWxTdG9yZUFjdGlvblxyXG59IGZyb20gJy4uL2FjdGlvbnMnXHJcblxyXG4vKipcclxuICogR2l2ZW4gdGhlIHN0YXRlIGFuZCBhIHBhdGggaW50byB0aGF0IHN0YXRlIG9iamVjdCwgcmV0dXJuIHRoZSBwcm9wIHRoYXRcclxuICogaXMgbmFtZWQgXCJfbWV0YWRhdGFcIlxyXG4gKlxyXG4gKiBAcGFyYW0gc3RhdGUgVGhlIHJlZHV4IHN0YXRlIG9iamVjdFxyXG4gKiBAcGFyYW0gcGF0aCBBbiBhcnJheSBvZiBrZXlzIHRoYXQgcmVwcmVzZW50IHRoZSBwYXRoIHRvIHRoZSBlbnRpdHkgaW4gcXVlc3Rpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhZGF0YShzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZ1tdKTogTWV0YWRhdGEge1xyXG5cdHJldHVybiBsb2Rhc2hNZXJnZSh7fSwgZ2V0KHN0YXRlLCBwYXRoLmNvbmNhdCgnX21ldGFkYXRhJykpKVxyXG59XHJcblxyXG4vKipcclxuICogR2V0IHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBpcyBhIFwiY29sbGVjdGlvblwiIChpZCBrZXktdmFsdWUgZGljdGlvbmFyeSkuXHJcbiAqIEBwYXJhbSBvYmpcclxuICogQHJldHVybnMgQSBib29sZWFuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uKG9iajogYW55KSB7XHJcblx0cmV0dXJuIChcclxuXHRcdCFpc0FycmF5KG9iaikgJiZcclxuXHRcdGlzUGxhaW5PYmplY3Qob2JqKSAmJlxyXG5cdFx0T2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwICYmXHJcblx0XHRPYmplY3Qua2V5cyhvYmopLmV2ZXJ5KGtleSA9PiB7XHJcblx0XHRcdGNvbnN0IGNoaWxkID0gb2JqW2tleV1cclxuXHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRpc1BsYWluT2JqZWN0KGNoaWxkKSAmJlxyXG5cdFx0XHRcdChrZXkgPT09ICdfbWV0YWRhdGEnIHx8XHJcblx0XHRcdFx0XHQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkLCAnaWQnKSAmJlxyXG5cdFx0XHRcdFx0XHQoY2hpbGQuaWQgPT09IHBhcnNlSW50KGtleSwgMTApIHx8IGNoaWxkLmlkID09PSBrZXkpKSlcclxuXHRcdFx0KVxyXG5cdFx0fSlcclxuXHQpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGlzIGEgXCJudWxsIHJlc3BvbnNlXCIuXHJcbiAqIEBwYXJhbSBvYmpcclxuICogQHJldHVybnMgQSBib29sZWFuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsUmVzcG9uc2Uob2JqOiBhbnkpIHtcclxuXHRyZXR1cm4gKFxyXG5cdFx0aXNQbGFpbk9iamVjdChvYmopICYmXHJcblx0XHRPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDAgJiZcclxuXHRcdE9iamVjdC5rZXlzKG9iaikuZXZlcnkoa2V5ID0+IHtcclxuXHRcdFx0Y29uc3QgY2hpbGQgPSBvYmpba2V5XVxyXG5cdFx0XHRyZXR1cm4ga2V5ID09PSAnX21ldGFkYXRhJyB8fCAoa2V5ID09PSAncmVzcG9uc2UnICYmIGNoaWxkID09PSBudWxsKVxyXG5cdFx0fSlcclxuXHQpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNZXJnZSB0aGUgYGN1cnJlbnRgIGFuZCBgaW5jb21pbmdgIG9iamVjdHMgcmVjdXJzaXZlbHksIHJldHVybmluZyBhIG5ldyBjb21iaW5lZCBvYmplY3QuXHJcbiAqXHJcbiAqIEZvciBlYWNoIGtleSBpbiBgY3VycmVudGA6XHJcbiAqICogcmVtb3ZlIGlmIGBjdXJyZW50YCBpcyBhIFwiY29sbGVjdGlvblwiIGFuZCBpdGVtIGtleSBpcyBub3QgaW4gYGluY29taW5nYFxyXG4gKiAqIHJlY3Vyc2UgaWYgYGluY29taW5nYCBpcyBhbiBvYmplY3Qgb3IgYXJyYXkgYW5kIGhhcyBhIHZhbHVlXHJcbiAqICogb3IgcHJlc2VydmUgZXhpc3RpbmcgdmFsdWVcclxuICpcclxuICogRm9yIGVhY2gga2V5IGluIGBpbmNvbWluZ2Agbm90IGluIGBjdXJyZW50YDpcclxuICogKiBjb3B5IHZhbHVlIHRvIHJlc3VsdFxyXG4gKlxyXG4gKiBAcGFyYW0gY3VycmVudFxyXG4gKiBAcGFyYW0gaW5jb21pbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShjdXJyZW50OiBEaWN0aW9uYXJ5PGFueT4sIGluY29taW5nPzogRGljdGlvbmFyeTxhbnk+IHwgbnVsbCkge1xyXG5cdC8vIGRvIG5vdCBtZXJnZSBhcnJheXNcclxuXHRpZiAoaXNBcnJheShjdXJyZW50KSkge1xyXG5cdFx0cmV0dXJuICFpc1VuZGVmaW5lZChpbmNvbWluZykgPyBpbmNvbWluZyA6IGN1cnJlbnRcclxuXHR9XHJcblx0Ly8gaWYgaW5jb21pbmcgaXMgYG51bGxgIG9yIGEgbnVsbCByZXNwb25zZSAoYHsncmVzcG9uc2UnOiBudWxsfWApLCBkbyBub3QgbWVyZ2UsIGp1c3QgdXNlIGluY29taW5nXHJcblx0aWYgKGluY29taW5nID09PSBudWxsIHx8ICghaXNVbmRlZmluZWQoaW5jb21pbmcpICYmIGlzTnVsbFJlc3BvbnNlKGluY29taW5nKSkpIHtcclxuXHRcdHJldHVybiBpbmNvbWluZ1xyXG5cdH1cclxuXHRjb25zdCByZXN1bHQ6IERpY3Rpb25hcnk8YW55PiA9IE9iamVjdC5rZXlzKGN1cnJlbnQpLnJlZHVjZSgob3V0OiBEaWN0aW9uYXJ5PGFueT4sIGspID0+IHtcclxuXHRcdGNvbnN0IGMgPSBjdXJyZW50W2tdXHJcblx0XHRjb25zdCBpID0gaW5jb21pbmcgJiYgaW5jb21pbmdba11cclxuXHRcdC8vIG5vbi1yZWxhdGlvbnNcclxuXHRcdGlmICghaXNBcnJheShjKSAmJiAhaXNQbGFpbk9iamVjdChjKSkge1xyXG5cdFx0XHQvLyBjb3B5IGluY29taW5nIHZhbHVlLCBpZiBhbnksIG90aGVyd2lzZSBrZWVwIGN1cnJlbnRcclxuXHRcdFx0b3V0W2tdID0gIWlzVW5kZWZpbmVkKGkpID8gaSA6IGNcclxuXHRcdFx0cmV0dXJuIG91dFxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVtb3ZlIFwiY29sbGVjdGlvblwiIGl0ZW0gbm90IGluY2x1ZGVkIGluIGluY29taW5nXHJcblx0XHRpZiAoKGlzQ29sbGVjdGlvbihjdXJyZW50KSB8fCBpc0NvbGxlY3Rpb24oaW5jb21pbmcpKSAmJiAhaXNVbmRlZmluZWQoaW5jb21pbmcpICYmIGlzVW5kZWZpbmVkKGkpKSB7XHJcblx0XHRcdHJldHVybiBvdXRcclxuXHRcdH1cclxuXHRcdC8vIG1lcmdlIHJlbGF0aW9uc1xyXG5cdFx0b3V0W2tdID0gbWVyZ2UoYywgaSlcclxuXHRcdHJldHVybiBvdXRcclxuXHR9LCB7fSlcclxuXHRpZiAoIWlzTmlsKGluY29taW5nKSAmJiBpc1BsYWluT2JqZWN0KGluY29taW5nKSkge1xyXG5cdFx0Ly8gY29weSBpbmNvbWluZyBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBvbiBjdXJyZW50XHJcblx0XHRPYmplY3Qua2V5cyhpbmNvbWluZykuZm9yRWFjaChrID0+IHtcclxuXHRcdFx0Y29uc3QgYyA9IGN1cnJlbnRba11cclxuXHRcdFx0Y29uc3QgaSA9IGluY29taW5nW2tdXHJcblx0XHRcdGlmIChpc1VuZGVmaW5lZChjKSkge1xyXG5cdFx0XHRcdHJlc3VsdFtrXSA9IGlcclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9XHJcblx0cmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG4vKipcclxuICogU2V0cyBgX21ldGFkYXRhYCBvbiBhbnkgbmVzdGVkIGNvbGxlY3Rpb25zIGFuZCBjb2xsZWN0aW9uIGl0ZW1zIGluIHRoZSBkYXRhXHJcbiAqIEBwYXJhbSBkYXRhXHJcbiAqIEBwYXJhbSBtZXRhZGF0YVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1ldGFkYXRhRm9yQ2hpbGRDb2xsZWN0aW9ucyhkYXRhOiBEaWN0aW9uYXJ5PGFueT4sIG1ldGFkYXRhOiBNZXRhZGF0YSkge1xyXG5cdGNvbnN0IGlzRGF0YUNvbGxlY3Rpb24gPSBpc0NvbGxlY3Rpb24oZGF0YSlcclxuXHRPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRjb25zdCB2YWx1ZSA9IGRhdGFba2V5XVxyXG5cdFx0aWYgKChpc0RhdGFDb2xsZWN0aW9uICYmIGtleSAhPT0gJ19tZXRhZGF0YScgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHx8IGlzQ29sbGVjdGlvbih2YWx1ZSkpIHtcclxuXHRcdFx0dmFsdWUuX21ldGFkYXRhID0gbWV0YWRhdGFcclxuXHRcdFx0dXBkYXRlTWV0YWRhdGFGb3JDaGlsZENvbGxlY3Rpb25zKHZhbHVlIGFzIG9iamVjdCwgbWV0YWRhdGEpXHJcblx0XHR9XHJcblx0fSlcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZHVjZXIgZm9yIGZldGNoaW5nIGFuZCB1cGRhdGluZyBgbW9kZWxzYCBpbiByZWR1eC5cclxuICpcclxuICogRmV0Y2hpbmcgc3RhdGUgdXBkYXRlZCB3aXRoIGV2ZXJ5IGFjdGlvbi5cclxuICogRGF0YSB1cGRhdGVkIG9uIHJlc3VsdCByZWNlaXZlZC5cclxuICogRGF0YSBhbmQgZmV0Y2hlZERhdGUgTk9UIGRlbGV0ZWQgb24gZmFpbGVkIHJlcXVlc3QuIEFsbCBkYXRhIGF0IGtleSByZW1vdmVkIG9uIE1PREVMX1JFTU9WRV9LRVkuXHJcbiAqXHJcbiAqIEFsbCBhY3Rpb25zIHJlcXVpcmUgYSBgbW9kZWxQYXRoYCBrZXkgdG8gZnVuY3Rpb24gd2l0aCB0aGlzIHJlZHVjZXIuXHJcbiAqXHJcbiAqIEFycmF5cyBhcmUgY29udmVydGVkIHRvIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIG51bWVyaWMgaWQgb2YgdGhlIG9iamVjdCB1c2VkXHJcbiAqIGFzIHRoZSBrZXkgYW5kIHRoZSBlbnRpcmUgb2JqZWN0IHVzZWQgYXMgdGhlIHZhbHVlXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSBvZiB0aGUgbW9kZWxzLiBJbml0aWFsbHkgZW1wdHlcclxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHVwb24gd2hpY2ggd2UgZGlzcGF0Y2hcclxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgc3RhdGVcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1vZGVsc1JlZHVjZXIoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sIGFjdGlvbjogTW9kZWxTdG9yZUFjdGlvbikge1xyXG5cdGlmICghYWN0aW9uLm1vZGVsUGF0aCkge1xyXG5cdFx0cmV0dXJuIHN0YXRlXHJcblx0fVxyXG5cdGNvbnN0IHBhdGg6IHN0cmluZ1tdID0gYWN0aW9uLm1vZGVsUGF0aC5zcGxpdCgnLicpXHJcblx0Ly8gdGhlIG9iamVjdCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGhcclxuXHRsZXQgdmFsdWVBdFBhdGg6IE1vZGVsID0gbG9kYXNoTWVyZ2Uoe30sIGdldChzdGF0ZSwgcGF0aCkpXHJcblx0Y29uc3QgbWV0YWRhdGEgPSBnZXRNZXRhZGF0YShzdGF0ZSwgcGF0aClcclxuXHRsZXQgbWV0YWRhdGFVcGRhdGU6IE1ldGFkYXRhXHJcblxyXG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcclxuXHRcdGNhc2UgTU9ERUxfRkVUQ0hfU1RBUlRfQUNUSU9OX1RZUEUuRkVUQ0hfU1RBUlQ6XHJcblx0XHRcdC8vIFJldGFpbiB0aGUgZW50aXR5IGRhdGEsIHVwZGF0ZSB0aGUgbWV0YWRhdGEgdG8gcmVmbGVjdCBmZXRjaCBpbiByZXF1ZXN0IHN0YXRlXHJcblx0XHRcdG1ldGFkYXRhVXBkYXRlID0ge1xyXG5cdFx0XHRcdGlzRmV0Y2hpbmc6IHRydWUsXHJcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlLFxyXG5cdFx0XHRcdGxhc3RGZXRjaEVycm9yRGF0YTogdW5kZWZpbmVkXHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVBdFBhdGguX21ldGFkYXRhID0gbG9kYXNoTWVyZ2UobWV0YWRhdGEsIG1ldGFkYXRhVXBkYXRlKVxyXG5cdFx0XHRpZiAoYWN0aW9uLmd1aWQpIHtcclxuXHRcdFx0XHR2YWx1ZUF0UGF0aC5ndWlkID0gYWN0aW9uLmd1aWRcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gX2ZwLnNldFdpdGgoT2JqZWN0LCBwYXRoLCB2YWx1ZUF0UGF0aCwgc3RhdGUpXHJcblxyXG5cdFx0Y2FzZSBNT0RFTF9GRVRDSF9SRVNVTFRfQUNUSU9OX1RZUEUuRkVUQ0hfUkVTVUxUX1JFQ0VJVkVEOiB7XHJcblx0XHRcdC8vIFVwZGF0ZSB0aGUgbWV0YWRhdGEgdG8gcmVmbGVjdCBmZXRjaCBpcyBjb21wbGV0ZS5cclxuXHRcdFx0bWV0YWRhdGFVcGRhdGUgPSB7XHJcblx0XHRcdFx0aXNGZXRjaGluZzogZmFsc2UsXHJcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlLFxyXG5cdFx0XHRcdGxhc3RGZXRjaEVycm9yRGF0YTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdGZldGNoZWRBdDogbmV3IERhdGUoKVxyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGluY29taW5nOiBvYmplY3QgPVxyXG5cdFx0XHRcdCFpc1BsYWluT2JqZWN0KGFjdGlvbi5kYXRhKSAmJiAhaXNBcnJheShhY3Rpb24uZGF0YSkgPyB7IHJlc3BvbnNlOiBhY3Rpb24uZGF0YSB9IDogYWN0aW9uLmRhdGFcclxuXHRcdFx0dXBkYXRlTWV0YWRhdGFGb3JDaGlsZENvbGxlY3Rpb25zKGluY29taW5nLCBtZXRhZGF0YVVwZGF0ZSlcclxuXHRcdFx0Ly8gbWVyZ2luZyB0aGUgaW5jb21pbmcgd2l0aCBleGlzdGluZ1xyXG5cdFx0XHQvLyBvdGhlcndpc2UgY29tcGxldGVseSByZXBsYWNlIHRoZSBleGlzdGluZyB2YWx1ZSBpbiByZWR1eFxyXG5cdFx0XHRpZiAoIWFjdGlvbi5yZXBsYWNlVmFsdWUpIHtcclxuXHRcdFx0XHR2YWx1ZUF0UGF0aCA9IG1lcmdlKHZhbHVlQXRQYXRoLCBpbmNvbWluZykgYXMgTW9kZWxcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2YWx1ZUF0UGF0aCA9IGxvZGFzaE1lcmdlKHt9LCBpbmNvbWluZykgYXMgTW9kZWxcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWx1ZUF0UGF0aC5fbWV0YWRhdGEgPSBsb2Rhc2hNZXJnZSh7fSwgbWV0YWRhdGEsIG1ldGFkYXRhVXBkYXRlKVxyXG5cdFx0XHRjb25zdCByZXN1bHQgPSBfZnAuc2V0V2l0aChPYmplY3QsIHBhdGgsIHZhbHVlQXRQYXRoLCBzdGF0ZSlcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFxyXG5cdFx0fVxyXG5cdFx0Y2FzZSBNT0RFTF9GRVRDSF9FUlJPUl9BQ1RJT05fVFlQRS5GRVRDSF9GQUlMRUQ6XHJcblx0XHRcdC8vIFJldGFpbiB0aGUgb2JqZWN0LCB1cGRhdGUgdGhlIG1ldGFkYXRhIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgcmVxdWVzdCBmYWlsZWRcclxuXHRcdFx0bWV0YWRhdGFVcGRhdGUgPSB7XHJcblx0XHRcdFx0aXNGZXRjaGluZzogZmFsc2UsXHJcblx0XHRcdFx0aGFzRXJyb3I6IHRydWUsXHJcblx0XHRcdFx0bGFzdEZldGNoRXJyb3JEYXRhOiBhY3Rpb24uZXJyb3JEYXRhXHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVBdFBhdGguX21ldGFkYXRhID0gbG9kYXNoTWVyZ2UobWV0YWRhdGEsIG1ldGFkYXRhVXBkYXRlKVxyXG5cdFx0XHRpZiAoYWN0aW9uLmd1aWQpIHtcclxuXHRcdFx0XHR2YWx1ZUF0UGF0aC5ndWlkID0gYWN0aW9uLmd1aWRcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gX2ZwLnNldFdpdGgoT2JqZWN0LCBwYXRoLCB2YWx1ZUF0UGF0aCwgc3RhdGUpXHJcblxyXG5cdFx0Y2FzZSBNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFOlxyXG5cdFx0XHQvLyBDb21wbGV0ZWx5IHJlbW92ZSB0aGUgb2JqZWN0IGF0IHRoZSBwYXRoIGZyb20gdGhlIHN0YXRlXHJcblx0XHRcdHJldHVybiBfZnAudW5zZXQocGF0aCwgc3RhdGUpXHJcblxyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0cmV0dXJuIHN0YXRlXHJcblx0fVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsSUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxXQUFXQSxDQUFDQyxLQUE4QixFQUFFQyxJQUFjLEVBQVk7RUFDckYsT0FBTyxJQUFBQyxhQUFXLEVBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUMsV0FBRyxFQUFDSCxLQUFLLEVBQUVDLElBQUksQ0FBQ0csTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
3
6
|
exports.default = notificationsReducer;
|
|
4
|
-
|
|
5
|
-
|
|
7
|
+
var _lodash = require("lodash");
|
|
8
|
+
var _NotificationAction = require("../actions/NotificationAction");
|
|
6
9
|
const initialState = {
|
|
7
|
-
|
|
10
|
+
queue: []
|
|
8
11
|
};
|
|
9
|
-
function notificationsReducer(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
function notificationsReducer() {
|
|
13
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
|
14
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
15
|
+
let updatedState;
|
|
16
|
+
switch (action.type) {
|
|
17
|
+
case _NotificationAction.NOTIFICATION_ACTION_TYPE.ADD_NOTIFICATION:
|
|
18
|
+
updatedState = (0, _lodash.merge)({}, state);
|
|
19
|
+
updatedState.queue.push(action.notification);
|
|
20
|
+
return updatedState;
|
|
21
|
+
case _NotificationAction.NOTIFICATION_ACTION_TYPE.REMOVE_NOTIFICATION:
|
|
22
|
+
updatedState = (0, _lodash.merge)({}, state);
|
|
23
|
+
updatedState.queue = updatedState.queue.filter(n => n.id !== action.notification.id);
|
|
24
|
+
return updatedState;
|
|
25
|
+
default:
|
|
26
|
+
return state;
|
|
27
|
+
}
|
|
23
28
|
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9Ob3RpZmljYXRpb25BY3Rpb24iLCJpbml0aWFsU3RhdGUiLCJxdWV1ZSIsIm5vdGlmaWNhdGlvbnNSZWR1Y2VyIiwic3RhdGUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJhY3Rpb24iLCJ1cGRhdGVkU3RhdGUiLCJ0eXBlIiwiTk9USUZJQ0FUSU9OX0FDVElPTl9UWVBFIiwiQUREX05PVElGSUNBVElPTiIsIm1lcmdlIiwicHVzaCIsIm5vdGlmaWNhdGlvbiIsIlJFTU9WRV9OT1RJRklDQVRJT04iLCJmaWx0ZXIiLCJuIiwiaWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVkdXgvcmVkdWNlcnMvbm90aWZpY2F0aW9uc1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL05vdGlmaWNhdGlvbidcclxuaW1wb3J0IHsgTk9USUZJQ0FUSU9OX0FDVElPTl9UWVBFLCBOb3RpZmljYXRpb25BY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zL05vdGlmaWNhdGlvbkFjdGlvbidcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uU3RhdGUge1xyXG5cdHF1ZXVlOiBOb3RpZmljYXRpb25bXVxyXG59XHJcblxyXG5jb25zdCBpbml0aWFsU3RhdGU6IE5vdGlmaWNhdGlvblN0YXRlID0ge1xyXG5cdHF1ZXVlOiBbXVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3RpZmljYXRpb25zUmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uOiBOb3RpZmljYXRpb25BY3Rpb24pIHtcclxuXHRsZXQgdXBkYXRlZFN0YXRlOiBOb3RpZmljYXRpb25TdGF0ZVxyXG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcclxuXHRcdGNhc2UgTk9USUZJQ0FUSU9OX0FDVElPTl9UWVBFLkFERF9OT1RJRklDQVRJT046XHJcblx0XHRcdHVwZGF0ZWRTdGF0ZSA9IG1lcmdlKHt9LCBzdGF0ZSlcclxuXHRcdFx0dXBkYXRlZFN0YXRlLnF1ZXVlLnB1c2goYWN0aW9uLm5vdGlmaWNhdGlvbilcclxuXHRcdFx0cmV0dXJuIHVwZGF0ZWRTdGF0ZVxyXG5cdFx0Y2FzZSBOT1RJRklDQVRJT05fQUNUSU9OX1RZUEUuUkVNT1ZFX05PVElGSUNBVElPTjpcclxuXHRcdFx0dXBkYXRlZFN0YXRlID0gbWVyZ2Uoe30sIHN0YXRlKVxyXG5cdFx0XHR1cGRhdGVkU3RhdGUucXVldWUgPSB1cGRhdGVkU3RhdGUucXVldWUuZmlsdGVyKG4gPT4gbi5pZCAhPT0gYWN0aW9uLm5vdGlmaWNhdGlvbi5pZClcclxuXHRcdFx0cmV0dXJuIHVwZGF0ZWRTdGF0ZVxyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0cmV0dXJuIHN0YXRlXHJcblx0fVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsbUJBQUEsR0FBQUQsT0FBQTtBQU1BLE1BQU1FLFlBQStCLEdBQUc7RUFDdkNDLEtBQUssRUFBRTtBQUNSLENBQUM7QUFFYyxTQUFTQyxvQkFBb0JBLENBQUEsRUFBbUQ7RUFBQSxJQUFsREMsS0FBSyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0osWUFBWTtFQUFBLElBQUVPLE1BQTBCLEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7RUFDNUYsSUFBSUUsWUFBK0I7RUFDbkMsUUFBUUQsTUFBTSxDQUFDRSxJQUFJO0lBQ2xCLEtBQUtDLDRDQUF3QixDQUFDQyxnQkFBZ0I7TUFDN0NILFlBQVksR0FBRyxJQUFBSSxhQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUVULEtBQUssQ0FBQztNQUMvQkssWUFBWSxDQUFDUCxLQUFLLENBQUNZLElBQUksQ0FBQ04sTUFBTSxDQUFDTyxZQUFZLENBQUM7TUFDNUMsT0FBT04sWUFBWTtJQUNwQixLQUFLRSw0Q0FBd0IsQ0FBQ0ssbUJBQW1CO01BQ2hEUCxZQUFZLEdBQUcsSUFBQUksYUFBSyxFQUFDLENBQUMsQ0FBQyxFQUFFVCxLQUFLLENBQUM7TUFDL0JLLFlBQVksQ0FBQ1AsS0FBSyxHQUFHTyxZQUFZLENBQUNQLEtBQUssQ0FBQ2UsTUFBTSxDQUFDQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsRUFBRSxLQUFLWCxNQUFNLENBQUNPLFlBQVksQ0FBQ0ksRUFBRSxDQUFDO01BQ3BGLE9BQU9WLFlBQVk7SUFDcEI7TUFDQyxPQUFPTCxLQUFLO0VBQ2Q7QUFDRCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
3
6
|
exports.default = searchReducer;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Store the state of a manage component's search parameters so the params can be
|
|
8
|
-
* re-applied later when revisiting the same component
|
|
9
|
-
*
|
|
10
|
-
* @export
|
|
11
|
-
* @param {*} [state={}]
|
|
12
|
-
* @param {*} action
|
|
13
|
-
* @returns
|
|
7
|
+
var _lodash = require("lodash");
|
|
8
|
+
var _SearchAction = require("../actions/SearchAction");
|
|
9
|
+
/**
|
|
10
|
+
* Store the state of a manage component's search parameters so the params can be
|
|
11
|
+
* re-applied later when revisiting the same component
|
|
12
|
+
*
|
|
13
|
+
* @export
|
|
14
|
+
* @param {*} [state={}]
|
|
15
|
+
* @param {*} action
|
|
16
|
+
* @returns
|
|
14
17
|
*/
|
|
15
|
-
function searchReducer(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
function searchReducer() {
|
|
19
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
20
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
21
|
+
switch (action.type) {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
23
|
+
case _SearchAction.SEARCH_ACTION_TYPE.PERSIST_SEARCH:
|
|
24
|
+
return (0, _lodash.mergeWith)({}, state, action.data, (target, source) => (0, _lodash.isArray)(source) ? source : undefined);
|
|
25
|
+
default:
|
|
26
|
+
return state;
|
|
27
|
+
}
|
|
23
28
|
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9TZWFyY2hBY3Rpb24iLCJzZWFyY2hSZWR1Y2VyIiwic3RhdGUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJhY3Rpb24iLCJ0eXBlIiwiU0VBUkNIX0FDVElPTl9UWVBFIiwiUEVSU0lTVF9TRUFSQ0giLCJtZXJnZVdpdGgiLCJkYXRhIiwidGFyZ2V0Iiwic291cmNlIiwiaXNBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9yZWR1Y2Vycy9zZWFyY2hSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnksIGlzQXJyYXksIG1lcmdlV2l0aCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgU0VBUkNIX0FDVElPTl9UWVBFLCBTZWFyY2hBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zL1NlYXJjaEFjdGlvbidcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoU3RhdGUgZXh0ZW5kcyBEaWN0aW9uYXJ5PGFueT4ge31cclxuXHJcbi8qKlxyXG4gKiBTdG9yZSB0aGUgc3RhdGUgb2YgYSBtYW5hZ2UgY29tcG9uZW50J3Mgc2VhcmNoIHBhcmFtZXRlcnMgc28gdGhlIHBhcmFtcyBjYW4gYmVcclxuICogcmUtYXBwbGllZCBsYXRlciB3aGVuIHJldmlzaXRpbmcgdGhlIHNhbWUgY29tcG9uZW50XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHsqfSBbc3RhdGU9e31dXHJcbiAqIEBwYXJhbSB7Kn0gYWN0aW9uXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZWFyY2hSZWR1Y2VyKHN0YXRlOiBTZWFyY2hTdGF0ZSA9IHt9LCBhY3Rpb246IFNlYXJjaEFjdGlvbikge1xyXG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcclxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXHJcblx0XHRjYXNlIFNFQVJDSF9BQ1RJT05fVFlQRS5QRVJTSVNUX1NFQVJDSDpcclxuXHRcdFx0cmV0dXJuIG1lcmdlV2l0aCh7fSwgc3RhdGUsIGFjdGlvbi5kYXRhLCAodGFyZ2V0LCBzb3VyY2UpID0+IChpc0FycmF5KHNvdXJjZSkgPyBzb3VyY2UgOiB1bmRlZmluZWQpKVxyXG5cclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdHJldHVybiBzdGF0ZVxyXG5cdH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLFNBQVNFLGFBQWFBLENBQUEsRUFBZ0Q7RUFBQSxJQUEvQ0MsS0FBa0IsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQUEsSUFBRUcsTUFBb0IsR0FBQUgsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQUUsU0FBQTtFQUNsRixRQUFRQyxNQUFNLENBQUNDLElBQUk7SUFDbEI7SUFDQSxLQUFLQyxnQ0FBa0IsQ0FBQ0MsY0FBYztNQUNyQyxPQUFPLElBQUFDLGlCQUFTLEVBQUMsQ0FBQyxDQUFDLEVBQUVSLEtBQUssRUFBRUksTUFBTSxDQUFDSyxJQUFJLEVBQUUsQ0FBQ0MsTUFBTSxFQUFFQyxNQUFNLEtBQU0sSUFBQUMsZUFBTyxFQUFDRCxNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHUixTQUFVLENBQUM7SUFFckc7TUFDQyxPQUFPSCxLQUFLO0VBQ2Q7QUFDRCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
3
6
|
exports.default = appInsightsSaga;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
var _effects = require("redux-saga/effects");
|
|
8
|
+
var _constants = require("../../constants");
|
|
9
|
+
var _actions = require("../actions");
|
|
7
10
|
function* appInsightsSaga() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
const appConfig = (0, _constants.getAppConfig)();
|
|
12
|
+
const appInsightsKey = appConfig.APP_INSIGHTS_CONNECTION_STRING;
|
|
13
|
+
if (!appInsightsKey) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const appInsights = (0, _constants.getAppInsights)();
|
|
17
|
+
while (true) {
|
|
18
|
+
const userInfoResponse = yield (0, _effects.take)(action => (0, _actions.isModelFetchResultAction)(action) && action.modelPath === 'user.userInfo');
|
|
19
|
+
const userId = userInfoResponse.data.id;
|
|
20
|
+
appInsights.setAuthenticatedUserContext(userId, undefined, true);
|
|
21
|
+
yield (0, _effects.take)(_actions.AUTH_ACTION_TYPE.LOG_OUT_REQUESTED);
|
|
22
|
+
appInsights.clearAuthenticatedUserContext();
|
|
23
|
+
yield (0, _effects.take)(_actions.AUTH_TOKEN_SUCCESS_ACTION_TYPE.GET_TOKEN_SUCCEEDED);
|
|
24
|
+
}
|
|
22
25
|
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2FjdGlvbnMiLCJhcHBJbnNpZ2h0c1NhZ2EiLCJhcHBDb25maWciLCJnZXRBcHBDb25maWciLCJhcHBJbnNpZ2h0c0tleSIsIkFQUF9JTlNJR0hUU19DT05ORUNUSU9OX1NUUklORyIsImFwcEluc2lnaHRzIiwiZ2V0QXBwSW5zaWdodHMiLCJ1c2VySW5mb1Jlc3BvbnNlIiwidGFrZSIsImFjdGlvbiIsImlzTW9kZWxGZXRjaFJlc3VsdEFjdGlvbiIsIm1vZGVsUGF0aCIsInVzZXJJZCIsImRhdGEiLCJpZCIsInNldEF1dGhlbnRpY2F0ZWRVc2VyQ29udGV4dCIsInVuZGVmaW5lZCIsIkFVVEhfQUNUSU9OX1RZUEUiLCJMT0dfT1VUX1JFUVVFU1RFRCIsImNsZWFyQXV0aGVudGljYXRlZFVzZXJDb250ZXh0IiwiQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFIiwiR0VUX1RPS0VOX1NVQ0NFRURFRCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9hcHBJbnNpZ2h0c1NhZ2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IFNhZ2FJdGVyYXRvciB9IGZyb20gJ3JlZHV4LXNhZ2EnXHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXHJcbmltcG9ydCB7IGdldEFwcENvbmZpZywgZ2V0QXBwSW5zaWdodHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXHJcbmltcG9ydCB7IEFVVEhfQUNUSU9OX1RZUEUsIEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSwgaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBhcHBJbnNpZ2h0c1NhZ2EoKTogU2FnYUl0ZXJhdG9yIHtcclxuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxyXG5cdGNvbnN0IGFwcEluc2lnaHRzS2V5ID0gYXBwQ29uZmlnLkFQUF9JTlNJR0hUU19DT05ORUNUSU9OX1NUUklOR1xyXG5cdGlmICghYXBwSW5zaWdodHNLZXkpIHtcclxuXHRcdHJldHVyblxyXG5cdH1cclxuXHRjb25zdCBhcHBJbnNpZ2h0cyA9IGdldEFwcEluc2lnaHRzKClcclxuXHR3aGlsZSAodHJ1ZSkge1xyXG5cdFx0Y29uc3QgdXNlckluZm9SZXNwb25zZSA9IHlpZWxkIHRha2UoXHJcblx0XHRcdChhY3Rpb246IEFueUFjdGlvbikgPT4gaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gJ3VzZXIudXNlckluZm8nXHJcblx0XHQpXHJcblx0XHRjb25zdCB1c2VySWQ6IHN0cmluZyA9IHVzZXJJbmZvUmVzcG9uc2UuZGF0YS5pZFxyXG5cdFx0YXBwSW5zaWdodHMuc2V0QXV0aGVudGljYXRlZFVzZXJDb250ZXh0KHVzZXJJZCwgdW5kZWZpbmVkLCB0cnVlKVxyXG5cdFx0eWllbGQgdGFrZShBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEKVxyXG5cdFx0YXBwSW5zaWdodHMuY2xlYXJBdXRoZW50aWNhdGVkVXNlckNvbnRleHQoKVxyXG5cdFx0eWllbGQgdGFrZShBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuR0VUX1RPS0VOX1NVQ0NFRURFRClcclxuXHR9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFFZSxVQUFVRyxlQUFlQSxDQUFBLEVBQWlCO0VBQ3hELE1BQU1DLFNBQVMsR0FBRyxJQUFBQyx1QkFBWSxFQUFDLENBQUM7RUFDaEMsTUFBTUMsY0FBYyxHQUFHRixTQUFTLENBQUNHLDhCQUE4QjtFQUMvRCxJQUFJLENBQUNELGNBQWMsRUFBRTtJQUNwQjtFQUNEO0VBQ0EsTUFBTUUsV0FBVyxHQUFHLElBQUFDLHlCQUFjLEVBQUMsQ0FBQztFQUNwQyxPQUFPLElBQUksRUFBRTtJQUNaLE1BQU1DLGdCQUFnQixHQUFHLE1BQU0sSUFBQUMsYUFBSSxFQUNqQ0MsTUFBaUIsSUFBSyxJQUFBQyxpQ0FBd0IsRUFBQ0QsTUFBTSxDQUFDLElBQUlBLE1BQU0sQ0FBQ0UsU0FBUyxLQUFLLGVBQ2pGLENBQUM7SUFDRCxNQUFNQyxNQUFjLEdBQUdMLGdCQUFnQixDQUFDTSxJQUFJLENBQUNDLEVBQUU7SUFDL0NULFdBQVcsQ0FBQ1UsMkJBQTJCLENBQUNILE1BQU0sRUFBRUksU0FBUyxFQUFFLElBQUksQ0FBQztJQUNoRSxNQUFNLElBQUFSLGFBQUksRUFBQ1MseUJBQWdCLENBQUNDLGlCQUFpQixDQUFDO0lBQzlDYixXQUFXLENBQUNjLDZCQUE2QixDQUFDLENBQUM7SUFDM0MsTUFBTSxJQUFBWCxhQUFJLEVBQUNZLHVDQUE4QixDQUFDQyxtQkFBbUIsQ0FBQztFQUMvRDtBQUNEIiwiaWdub3JlTGlzdCI6W119
|