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,49 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = authReducer;
|
|
4
|
-
const AuthAction_1 = require("../actions/AuthAction");
|
|
1
|
+
import { AUTH_ACTION_TYPE, AUTH_TOKEN_ACTION_TYPE, AUTH_TOKEN_SUCCESS_ACTION_TYPE } from '../actions/AuthAction';
|
|
5
2
|
const initialState = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
isInitialized: false,
|
|
4
|
+
isAuthenticating: false,
|
|
5
|
+
isAuthenticated: false,
|
|
6
|
+
didFail: false
|
|
10
7
|
};
|
|
8
|
+
|
|
11
9
|
/**
|
|
12
10
|
* Reducer for updating `auth` in redux.
|
|
13
11
|
*/
|
|
14
|
-
function authReducer(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
12
|
+
export default function authReducer() {
|
|
13
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
|
14
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
15
|
+
switch (action.type) {
|
|
16
|
+
case AUTH_TOKEN_ACTION_TYPE.AUTH_INITIALIZED:
|
|
17
|
+
return Object.assign({}, state, {
|
|
18
|
+
isInitialized: true,
|
|
19
|
+
isAuthenticated: !!action.oauthToken
|
|
20
|
+
});
|
|
21
|
+
case AUTH_TOKEN_SUCCESS_ACTION_TYPE.GET_TOKEN_SUCCEEDED:
|
|
22
|
+
case AUTH_TOKEN_SUCCESS_ACTION_TYPE.TOKEN_REFRESH_SUCCEEDED:
|
|
23
|
+
return Object.assign({}, state, {
|
|
24
|
+
isAuthenticating: false,
|
|
25
|
+
isAuthenticated: true,
|
|
26
|
+
didFail: false
|
|
27
|
+
});
|
|
28
|
+
case AUTH_ACTION_TYPE.LOGIN_REQUESTED:
|
|
29
|
+
return Object.assign({}, state, {
|
|
30
|
+
isAuthenticating: true,
|
|
31
|
+
isAuthenticated: false,
|
|
32
|
+
didFail: false
|
|
33
|
+
});
|
|
34
|
+
case AUTH_ACTION_TYPE.LOG_OUT_REQUESTED:
|
|
35
|
+
return Object.assign({}, state, {
|
|
36
|
+
isAuthenticating: false,
|
|
37
|
+
isAuthenticated: false,
|
|
38
|
+
didFail: false
|
|
39
|
+
});
|
|
40
|
+
case AUTH_ACTION_TYPE.LOGIN_FAILED:
|
|
41
|
+
return Object.assign({}, state, {
|
|
42
|
+
isAuthenticating: false,
|
|
43
|
+
isAuthenticated: false,
|
|
44
|
+
didFail: true
|
|
45
|
+
});
|
|
46
|
+
default:
|
|
47
|
+
return state;
|
|
48
|
+
}
|
|
49
49
|
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBVVRIX0FDVElPTl9UWVBFIiwiQVVUSF9UT0tFTl9BQ1RJT05fVFlQRSIsIkFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSIsImluaXRpYWxTdGF0ZSIsImlzSW5pdGlhbGl6ZWQiLCJpc0F1dGhlbnRpY2F0aW5nIiwiaXNBdXRoZW50aWNhdGVkIiwiZGlkRmFpbCIsImF1dGhSZWR1Y2VyIiwic3RhdGUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJhY3Rpb24iLCJ0eXBlIiwiQVVUSF9JTklUSUFMSVpFRCIsIk9iamVjdCIsImFzc2lnbiIsIm9hdXRoVG9rZW4iLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwiVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQiLCJMT0dJTl9SRVFVRVNURUQiLCJMT0dfT1VUX1JFUVVFU1RFRCIsIkxPR0lOX0ZBSUxFRCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9yZWR1Y2Vycy9hdXRoUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoU3RhdGUgfSBmcm9tICcuLi8uLi90eXBlcy9hdXRoL0F1dGhTdGF0ZSdcbmltcG9ydCB7XG5cdEFVVEhfQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSxcblx0QXV0aEFjdGlvbixcblx0QXV0aFRva2VuQWN0aW9uLFxuXHRBdXRoVG9rZW5TdWNjZXNzQWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMvQXV0aEFjdGlvbidcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBBdXRoU3RhdGUgPSB7XG5cdGlzSW5pdGlhbGl6ZWQ6IGZhbHNlLFxuXHRpc0F1dGhlbnRpY2F0aW5nOiBmYWxzZSxcblx0aXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcblx0ZGlkRmFpbDogZmFsc2Vcbn1cblxuLyoqXG4gKiBSZWR1Y2VyIGZvciB1cGRhdGluZyBgYXV0aGAgaW4gcmVkdXguXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dGhSZWR1Y2VyKFxuXHRzdGF0ZTogQXV0aFN0YXRlID0gaW5pdGlhbFN0YXRlLFxuXHRhY3Rpb246IEF1dGhBY3Rpb24gfCBBdXRoVG9rZW5BY3Rpb24gfCBBdXRoVG9rZW5TdWNjZXNzQWN0aW9uXG4pIHtcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgQVVUSF9UT0tFTl9BQ1RJT05fVFlQRS5BVVRIX0lOSVRJQUxJWkVEOlxuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG5cdFx0XHRcdGlzSW5pdGlhbGl6ZWQ6IHRydWUsXG5cdFx0XHRcdGlzQXV0aGVudGljYXRlZDogISFhY3Rpb24ub2F1dGhUb2tlblxuXHRcdFx0fSlcblxuXHRcdGNhc2UgQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLkdFVF9UT0tFTl9TVUNDRUVERUQ6XG5cdFx0Y2FzZSBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQ6XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcblx0XHRcdFx0aXNBdXRoZW50aWNhdGluZzogZmFsc2UsXG5cdFx0XHRcdGlzQXV0aGVudGljYXRlZDogdHJ1ZSxcblx0XHRcdFx0ZGlkRmFpbDogZmFsc2Vcblx0XHRcdH0pXG5cblx0XHRjYXNlIEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fUkVRVUVTVEVEOlxuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG5cdFx0XHRcdGlzQXV0aGVudGljYXRpbmc6IHRydWUsXG5cdFx0XHRcdGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG5cdFx0XHRcdGRpZEZhaWw6IGZhbHNlXG5cdFx0XHR9KVxuXG5cdFx0Y2FzZSBBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEOlxuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG5cdFx0XHRcdGlzQXV0aGVudGljYXRpbmc6IGZhbHNlLFxuXHRcdFx0XHRpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuXHRcdFx0XHRkaWRGYWlsOiBmYWxzZVxuXHRcdFx0fSlcblxuXHRcdGNhc2UgQVVUSF9BQ1RJT05fVFlQRS5MT0dJTl9GQUlMRUQ6XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcblx0XHRcdFx0aXNBdXRoZW50aWNhdGluZzogZmFsc2UsXG5cdFx0XHRcdGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG5cdFx0XHRcdGRpZEZhaWw6IHRydWVcblx0XHRcdH0pXG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHN0YXRlXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FDQ0EsZ0JBQWdCLEVBQ2hCQyxzQkFBc0IsRUFDdEJDLDhCQUE4QixRQUl4Qix1QkFBdUI7QUFFOUIsTUFBTUMsWUFBdUIsR0FBRztFQUMvQkMsYUFBYSxFQUFFLEtBQUs7RUFDcEJDLGdCQUFnQixFQUFFLEtBQUs7RUFDdkJDLGVBQWUsRUFBRSxLQUFLO0VBQ3RCQyxPQUFPLEVBQUU7QUFDVixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBU0MsV0FBV0EsQ0FBQSxFQUdqQztFQUFBLElBRkRDLEtBQWdCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHUCxZQUFZO0VBQUEsSUFDL0JVLE1BQTZELEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7RUFFN0QsUUFBUUMsTUFBTSxDQUFDQyxJQUFJO0lBQ2xCLEtBQUtiLHNCQUFzQixDQUFDYyxnQkFBZ0I7TUFDM0MsT0FBT0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVSLEtBQUssRUFBRTtRQUMvQkwsYUFBYSxFQUFFLElBQUk7UUFDbkJFLGVBQWUsRUFBRSxDQUFDLENBQUNPLE1BQU0sQ0FBQ0s7TUFDM0IsQ0FBQyxDQUFDO0lBRUgsS0FBS2hCLDhCQUE4QixDQUFDaUIsbUJBQW1CO0lBQ3ZELEtBQUtqQiw4QkFBOEIsQ0FBQ2tCLHVCQUF1QjtNQUMxRCxPQUFPSixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRVIsS0FBSyxFQUFFO1FBQy9CSixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCQyxlQUFlLEVBQUUsSUFBSTtRQUNyQkMsT0FBTyxFQUFFO01BQ1YsQ0FBQyxDQUFDO0lBRUgsS0FBS1AsZ0JBQWdCLENBQUNxQixlQUFlO01BQ3BDLE9BQU9MLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFUixLQUFLLEVBQUU7UUFDL0JKLGdCQUFnQixFQUFFLElBQUk7UUFDdEJDLGVBQWUsRUFBRSxLQUFLO1FBQ3RCQyxPQUFPLEVBQUU7TUFDVixDQUFDLENBQUM7SUFFSCxLQUFLUCxnQkFBZ0IsQ0FBQ3NCLGlCQUFpQjtNQUN0QyxPQUFPTixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRVIsS0FBSyxFQUFFO1FBQy9CSixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCQyxlQUFlLEVBQUUsS0FBSztRQUN0QkMsT0FBTyxFQUFFO01BQ1YsQ0FBQyxDQUFDO0lBRUgsS0FBS1AsZ0JBQWdCLENBQUN1QixZQUFZO01BQ2pDLE9BQU9QLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFUixLQUFLLEVBQUU7UUFDL0JKLGdCQUFnQixFQUFFLEtBQUs7UUFDdkJDLGVBQWUsRUFBRSxLQUFLO1FBQ3RCQyxPQUFPLEVBQUU7TUFDVixDQUFDLENBQUM7SUFFSDtNQUNDLE9BQU9FLEtBQUs7RUFDZDtBQUNEIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports.modalsReducer = modalsReducer_1.default;
|
|
9
|
-
const modelsReducer_1 = tslib_1.__importDefault(require("./modelsReducer"));
|
|
10
|
-
exports.modelsReducer = modelsReducer_1.default;
|
|
11
|
-
const notificationsReducer_1 = tslib_1.__importDefault(require("./notificationsReducer"));
|
|
12
|
-
exports.notificationsReducer = notificationsReducer_1.default;
|
|
13
|
-
const searchReducer_1 = tslib_1.__importDefault(require("./searchReducer"));
|
|
14
|
-
exports.searchReducer = searchReducer_1.default;
|
|
1
|
+
import authReducer from './authReducer';
|
|
2
|
+
import modalsReducer from './modalsReducer';
|
|
3
|
+
import modelsReducer from './modelsReducer';
|
|
4
|
+
import notificationsReducer from './notificationsReducer';
|
|
5
|
+
import searchReducer from './searchReducer';
|
|
6
|
+
export { authReducer, modelsReducer, modalsReducer, notificationsReducer, searchReducer };
|
|
7
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhdXRoUmVkdWNlciIsIm1vZGFsc1JlZHVjZXIiLCJtb2RlbHNSZWR1Y2VyIiwibm90aWZpY2F0aW9uc1JlZHVjZXIiLCJzZWFyY2hSZWR1Y2VyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3JlZHVjZXJzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhdXRoUmVkdWNlciBmcm9tICcuL2F1dGhSZWR1Y2VyJ1xuaW1wb3J0IG1vZGFsc1JlZHVjZXIgZnJvbSAnLi9tb2RhbHNSZWR1Y2VyJ1xuaW1wb3J0IG1vZGVsc1JlZHVjZXIgZnJvbSAnLi9tb2RlbHNSZWR1Y2VyJ1xuaW1wb3J0IG5vdGlmaWNhdGlvbnNSZWR1Y2VyIGZyb20gJy4vbm90aWZpY2F0aW9uc1JlZHVjZXInXG5pbXBvcnQgc2VhcmNoUmVkdWNlciBmcm9tICcuL3NlYXJjaFJlZHVjZXInXG5cbmV4cG9ydCB7IGF1dGhSZWR1Y2VyLCBtb2RlbHNSZWR1Y2VyLCBtb2RhbHNSZWR1Y2VyLCBub3RpZmljYXRpb25zUmVkdWNlciwgc2VhcmNoUmVkdWNlciB9XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsTUFBTSxlQUFlO0FBQ3ZDLE9BQU9DLGFBQWEsTUFBTSxpQkFBaUI7QUFDM0MsT0FBT0MsYUFBYSxNQUFNLGlCQUFpQjtBQUMzQyxPQUFPQyxvQkFBb0IsTUFBTSx3QkFBd0I7QUFDekQsT0FBT0MsYUFBYSxNQUFNLGlCQUFpQjtBQUUzQyxTQUFTSixXQUFXLEVBQUVFLGFBQWEsRUFBRUQsYUFBYSxFQUFFRSxvQkFBb0IsRUFBRUMsYUFBYSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,37 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = modalsReducer;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const ModalAction_1 = require("../actions/ModalAction");
|
|
1
|
+
import { MODAL_ACTION_TYPE } from '../actions/ModalAction';
|
|
6
2
|
/// state is a dictionary where keys are modal guids, for easy lookup
|
|
7
3
|
const initialState = {};
|
|
8
|
-
function modalsReducer(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
export default function modalsReducer() {
|
|
5
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
|
6
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
7
|
+
let guid;
|
|
8
|
+
let index;
|
|
9
|
+
let isFullscreen;
|
|
10
|
+
switch (action.type) {
|
|
11
|
+
case MODAL_ACTION_TYPE.MODAL_ENTERING:
|
|
12
|
+
{
|
|
13
|
+
guid = action.guid;
|
|
14
|
+
index = action.index;
|
|
15
|
+
isFullscreen = action.isFullscreen;
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
17
|
+
if (state[guid]) {
|
|
18
|
+
return state;
|
|
23
19
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
const newState = {
|
|
21
|
+
...state,
|
|
22
|
+
...{
|
|
23
|
+
[guid]: {
|
|
24
|
+
index,
|
|
25
|
+
isFullscreen
|
|
29
26
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return newState;
|
|
30
|
+
}
|
|
31
|
+
case MODAL_ACTION_TYPE.MODAL_EXITED:
|
|
32
|
+
{
|
|
33
|
+
guid = action.guid;
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
35
|
+
if (!state[guid]) {
|
|
36
|
+
return state;
|
|
33
37
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
// destructure `state`, separating the value of key `guid` to `removed`, and the rest of the keys to `stateCopy`
|
|
39
|
+
const {
|
|
40
|
+
[guid]: removed,
|
|
41
|
+
...stateCopy
|
|
42
|
+
} = state;
|
|
43
|
+
return stateCopy;
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
return state;
|
|
47
|
+
}
|
|
37
48
|
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT0RBTF9BQ1RJT05fVFlQRSIsImluaXRpYWxTdGF0ZSIsIm1vZGFsc1JlZHVjZXIiLCJzdGF0ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImFjdGlvbiIsImd1aWQiLCJpbmRleCIsImlzRnVsbHNjcmVlbiIsInR5cGUiLCJNT0RBTF9FTlRFUklORyIsIm5ld1N0YXRlIiwiTU9EQUxfRVhJVEVEIiwicmVtb3ZlZCIsInN0YXRlQ29weSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9yZWR1Y2Vycy9tb2RhbHNSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNT0RBTF9BQ1RJT05fVFlQRSwgTW9kYWxBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zL01vZGFsQWN0aW9uJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQWN0aW9uVmFsdWUge1xuXHRpbmRleDogbnVtYmVyXG5cdGlzRnVsbHNjcmVlbjogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsc1N0YXRlIGV4dGVuZHMgRGljdGlvbmFyeTxNb2RhbEFjdGlvblZhbHVlPiB7fVxuXG4vLy8gc3RhdGUgaXMgYSBkaWN0aW9uYXJ5IHdoZXJlIGtleXMgYXJlIG1vZGFsIGd1aWRzLCBmb3IgZWFzeSBsb29rdXBcbmNvbnN0IGluaXRpYWxTdGF0ZTogTW9kYWxzU3RhdGUgPSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtb2RhbHNSZWR1Y2VyKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IE1vZGFsQWN0aW9uKSB7XG5cdGxldCBndWlkOiBzdHJpbmdcblx0bGV0IGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWRcblx0bGV0IGlzRnVsbHNjcmVlbjogYm9vbGVhbiB8IHVuZGVmaW5lZFxuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBNT0RBTF9BQ1RJT05fVFlQRS5NT0RBTF9FTlRFUklORzoge1xuXHRcdFx0Z3VpZCA9IGFjdGlvbi5ndWlkXG5cdFx0XHRpbmRleCA9IGFjdGlvbi5pbmRleFxuXHRcdFx0aXNGdWxsc2NyZWVuID0gYWN0aW9uLmlzRnVsbHNjcmVlblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cblx0XHRcdGlmIChzdGF0ZVtndWlkXSkge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGVcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSwgLi4ueyBbZ3VpZF06IHsgaW5kZXgsIGlzRnVsbHNjcmVlbiB9IH0gfVxuXHRcdFx0cmV0dXJuIG5ld1N0YXRlXG5cdFx0fVxuXHRcdGNhc2UgTU9EQUxfQUNUSU9OX1RZUEUuTU9EQUxfRVhJVEVEOiB7XG5cdFx0XHRndWlkID0gYWN0aW9uLmd1aWRcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG5cdFx0XHRpZiAoIXN0YXRlW2d1aWRdKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZGVzdHJ1Y3R1cmUgYHN0YXRlYCwgc2VwYXJhdGluZyB0aGUgdmFsdWUgb2Yga2V5IGBndWlkYCB0byBgcmVtb3ZlZGAsIGFuZCB0aGUgcmVzdCBvZiB0aGUga2V5cyB0byBgc3RhdGVDb3B5YFxuXHRcdFx0Y29uc3QgeyBbZ3VpZF06IHJlbW92ZWQsIC4uLnN0YXRlQ29weSB9ID0gc3RhdGVcblx0XHRcdHJldHVybiBzdGF0ZUNvcHlcblx0XHR9XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBzdGF0ZVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGlCQUFpQixRQUFxQix3QkFBd0I7QUFTdkU7QUFDQSxNQUFNQyxZQUF5QixHQUFHLENBQUMsQ0FBQztBQUVwQyxlQUFlLFNBQVNDLGFBQWFBLENBQUEsRUFBNEM7RUFBQSxJQUEzQ0MsS0FBSyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0gsWUFBWTtFQUFBLElBQUVNLE1BQW1CLEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7RUFDOUUsSUFBSUUsSUFBWTtFQUNoQixJQUFJQyxLQUF5QjtFQUM3QixJQUFJQyxZQUFpQztFQUNyQyxRQUFRSCxNQUFNLENBQUNJLElBQUk7SUFDbEIsS0FBS1gsaUJBQWlCLENBQUNZLGNBQWM7TUFBRTtRQUN0Q0osSUFBSSxHQUFHRCxNQUFNLENBQUNDLElBQUk7UUFDbEJDLEtBQUssR0FBR0YsTUFBTSxDQUFDRSxLQUFLO1FBQ3BCQyxZQUFZLEdBQUdILE1BQU0sQ0FBQ0csWUFBWTtRQUNsQztRQUNBLElBQUlQLEtBQUssQ0FBQ0ssSUFBSSxDQUFDLEVBQUU7VUFDaEIsT0FBT0wsS0FBSztRQUNiO1FBQ0EsTUFBTVUsUUFBUSxHQUFHO1VBQUUsR0FBR1YsS0FBSztVQUFFLEdBQUc7WUFBRSxDQUFDSyxJQUFJLEdBQUc7Y0FBRUMsS0FBSztjQUFFQztZQUFhO1VBQUU7UUFBRSxDQUFDO1FBQ3JFLE9BQU9HLFFBQVE7TUFDaEI7SUFDQSxLQUFLYixpQkFBaUIsQ0FBQ2MsWUFBWTtNQUFFO1FBQ3BDTixJQUFJLEdBQUdELE1BQU0sQ0FBQ0MsSUFBSTtRQUNsQjtRQUNBLElBQUksQ0FBQ0wsS0FBSyxDQUFDSyxJQUFJLENBQUMsRUFBRTtVQUNqQixPQUFPTCxLQUFLO1FBQ2I7UUFDQTtRQUNBLE1BQU07VUFBRSxDQUFDSyxJQUFJLEdBQUdPLE9BQU87VUFBRSxHQUFHQztRQUFVLENBQUMsR0FBR2IsS0FBSztRQUMvQyxPQUFPYSxTQUFTO01BQ2pCO0lBQ0E7TUFDQyxPQUFPYixLQUFLO0VBQ2Q7QUFDRCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
exports.isNullResponse = isNullResponse;
|
|
6
|
-
exports.merge = merge;
|
|
7
|
-
exports.updateMetadataForChildCollections = updateMetadataForChildCollections;
|
|
8
|
-
exports.default = modelsReducer;
|
|
9
|
-
const tslib_1 = require("tslib");
|
|
10
|
-
const lodash_1 = require("lodash");
|
|
11
|
-
const fp_1 = tslib_1.__importDefault(require("lodash/fp"));
|
|
12
|
-
const actions_1 = require("../actions");
|
|
1
|
+
import { get, isArray, isNil, isPlainObject, isUndefined, merge as lodashMerge } from 'lodash';
|
|
2
|
+
import _fp from 'lodash/fp';
|
|
3
|
+
import { MODEL_FETCH_ERROR_ACTION_TYPE, MODEL_FETCH_RESULT_ACTION_TYPE, MODEL_FETCH_START_ACTION_TYPE, MODEL_REMOVE_KEY_ACTION_TYPE } from '../actions';
|
|
4
|
+
|
|
13
5
|
/**
|
|
14
6
|
* Given the state and a path into that state object, return the prop that
|
|
15
7
|
* is named "_metadata"
|
|
@@ -17,39 +9,34 @@ const actions_1 = require("../actions");
|
|
|
17
9
|
* @param state The redux state object
|
|
18
10
|
* @param path An array of keys that represent the path to the entity in question
|
|
19
11
|
*/
|
|
20
|
-
function getMetadata(state, path) {
|
|
21
|
-
|
|
12
|
+
export function getMetadata(state, path) {
|
|
13
|
+
return lodashMerge({}, get(state, path.concat('_metadata')));
|
|
22
14
|
}
|
|
15
|
+
|
|
23
16
|
/**
|
|
24
17
|
* Get whether or not an object is a "collection" (id key-value dictionary).
|
|
25
18
|
* @param obj
|
|
26
19
|
* @returns A boolean
|
|
27
20
|
*/
|
|
28
|
-
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
|
-
}));
|
|
21
|
+
export function isCollection(obj) {
|
|
22
|
+
return !isArray(obj) && isPlainObject(obj) && Object.keys(obj).length > 0 && Object.keys(obj).every(key => {
|
|
23
|
+
const child = obj[key];
|
|
24
|
+
return isPlainObject(child) && (key === '_metadata' || Object.prototype.hasOwnProperty.call(child, 'id') && (child.id === parseInt(key, 10) || child.id === key));
|
|
25
|
+
});
|
|
39
26
|
}
|
|
27
|
+
|
|
40
28
|
/**
|
|
41
29
|
* Get whether or not an object is a "null response".
|
|
42
30
|
* @param obj
|
|
43
31
|
* @returns A boolean
|
|
44
32
|
*/
|
|
45
|
-
function isNullResponse(obj) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return key === '_metadata' || (key === 'response' && child === null);
|
|
51
|
-
}));
|
|
33
|
+
export function isNullResponse(obj) {
|
|
34
|
+
return isPlainObject(obj) && Object.keys(obj).length > 0 && Object.keys(obj).every(key => {
|
|
35
|
+
const child = obj[key];
|
|
36
|
+
return key === '_metadata' || key === 'response' && child === null;
|
|
37
|
+
});
|
|
52
38
|
}
|
|
39
|
+
|
|
53
40
|
/**
|
|
54
41
|
* Merge the `current` and `incoming` objects recursively, returning a new combined object.
|
|
55
42
|
*
|
|
@@ -64,59 +51,61 @@ function isNullResponse(obj) {
|
|
|
64
51
|
* @param current
|
|
65
52
|
* @param incoming
|
|
66
53
|
*/
|
|
67
|
-
function merge(current, incoming) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
54
|
+
export function merge(current, incoming) {
|
|
55
|
+
// do not merge arrays
|
|
56
|
+
if (isArray(current)) {
|
|
57
|
+
return !isUndefined(incoming) ? incoming : current;
|
|
58
|
+
}
|
|
59
|
+
// if incoming is `null` or a null response (`{'response': null}`), do not merge, just use incoming
|
|
60
|
+
if (incoming === null || !isUndefined(incoming) && isNullResponse(incoming)) {
|
|
61
|
+
return incoming;
|
|
62
|
+
}
|
|
63
|
+
const result = Object.keys(current).reduce((out, k) => {
|
|
64
|
+
const c = current[k];
|
|
65
|
+
const i = incoming && incoming[k];
|
|
66
|
+
// non-relations
|
|
67
|
+
if (!isArray(c) && !isPlainObject(c)) {
|
|
68
|
+
// copy incoming value, if any, otherwise keep current
|
|
69
|
+
out[k] = !isUndefined(i) ? i : c;
|
|
70
|
+
return out;
|
|
71
71
|
}
|
|
72
|
-
//
|
|
73
|
-
if (
|
|
74
|
-
|
|
72
|
+
// remove "collection" item not included in incoming
|
|
73
|
+
if ((isCollection(current) || isCollection(incoming)) && !isUndefined(incoming) && isUndefined(i)) {
|
|
74
|
+
return out;
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
});
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
76
|
+
// merge relations
|
|
77
|
+
out[k] = merge(c, i);
|
|
78
|
+
return out;
|
|
79
|
+
}, {});
|
|
80
|
+
if (!isNil(incoming) && isPlainObject(incoming)) {
|
|
81
|
+
// copy incoming properties that are not on current
|
|
82
|
+
Object.keys(incoming).forEach(k => {
|
|
83
|
+
const c = current[k];
|
|
84
|
+
const i = incoming[k];
|
|
85
|
+
if (isUndefined(c)) {
|
|
86
|
+
result[k] = i;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
104
91
|
}
|
|
92
|
+
|
|
105
93
|
/**
|
|
106
94
|
* Sets `_metadata` on any nested collections and collection items in the data
|
|
107
95
|
* @param data
|
|
108
96
|
* @param metadata
|
|
109
97
|
*/
|
|
110
|
-
function updateMetadataForChildCollections(data, metadata) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
98
|
+
export function updateMetadataForChildCollections(data, metadata) {
|
|
99
|
+
const isDataCollection = isCollection(data);
|
|
100
|
+
Object.keys(data).forEach(key => {
|
|
101
|
+
const value = data[key];
|
|
102
|
+
if (isDataCollection && key !== '_metadata' && isPlainObject(value) || isCollection(value)) {
|
|
103
|
+
value._metadata = metadata;
|
|
104
|
+
updateMetadataForChildCollections(value, metadata);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
119
107
|
}
|
|
108
|
+
|
|
120
109
|
/**
|
|
121
110
|
* Reducer for fetching and updating `models` in redux.
|
|
122
111
|
*
|
|
@@ -134,66 +123,71 @@ function updateMetadataForChildCollections(data, metadata) {
|
|
|
134
123
|
* @param action The action upon which we dispatch
|
|
135
124
|
* @returns The updated state
|
|
136
125
|
*/
|
|
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
|
-
|
|
126
|
+
export default function modelsReducer() {
|
|
127
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
128
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
129
|
+
if (!action.modelPath) {
|
|
130
|
+
return state;
|
|
131
|
+
}
|
|
132
|
+
const path = action.modelPath.split('.');
|
|
133
|
+
// the object value at the specified path
|
|
134
|
+
let valueAtPath = lodashMerge({}, get(state, path));
|
|
135
|
+
const metadata = getMetadata(state, path);
|
|
136
|
+
let metadataUpdate;
|
|
137
|
+
switch (action.type) {
|
|
138
|
+
case MODEL_FETCH_START_ACTION_TYPE.FETCH_START:
|
|
139
|
+
// Retain the entity data, update the metadata to reflect fetch in request state
|
|
140
|
+
metadataUpdate = {
|
|
141
|
+
isFetching: true,
|
|
142
|
+
hasError: false,
|
|
143
|
+
lastFetchErrorData: undefined
|
|
144
|
+
};
|
|
145
|
+
valueAtPath._metadata = lodashMerge(metadata, metadataUpdate);
|
|
146
|
+
if (action.guid) {
|
|
147
|
+
valueAtPath.guid = action.guid;
|
|
148
|
+
}
|
|
149
|
+
return _fp.setWith(Object, path, valueAtPath, state);
|
|
150
|
+
case MODEL_FETCH_RESULT_ACTION_TYPE.FETCH_RESULT_RECEIVED:
|
|
151
|
+
{
|
|
152
|
+
// Update the metadata to reflect fetch is complete.
|
|
153
|
+
metadataUpdate = {
|
|
154
|
+
isFetching: false,
|
|
155
|
+
hasError: false,
|
|
156
|
+
lastFetchErrorData: undefined,
|
|
157
|
+
fetchedAt: new Date()
|
|
158
|
+
};
|
|
159
|
+
const incoming = !isPlainObject(action.data) && !isArray(action.data) ? {
|
|
160
|
+
response: action.data
|
|
161
|
+
} : action.data;
|
|
162
|
+
updateMetadataForChildCollections(incoming, metadataUpdate);
|
|
163
|
+
// merging the incoming with existing
|
|
164
|
+
// otherwise completely replace the existing value in redux
|
|
165
|
+
if (!action.replaceValue) {
|
|
166
|
+
valueAtPath = merge(valueAtPath, incoming);
|
|
167
|
+
} else {
|
|
168
|
+
valueAtPath = lodashMerge({}, incoming);
|
|
180
169
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
170
|
+
valueAtPath._metadata = lodashMerge({}, metadata, metadataUpdate);
|
|
171
|
+
const result = _fp.setWith(Object, path, valueAtPath, state);
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
case MODEL_FETCH_ERROR_ACTION_TYPE.FETCH_FAILED:
|
|
175
|
+
// Retain the object, update the metadata to reflect the fact that the request failed
|
|
176
|
+
metadataUpdate = {
|
|
177
|
+
isFetching: false,
|
|
178
|
+
hasError: true,
|
|
179
|
+
lastFetchErrorData: action.errorData
|
|
180
|
+
};
|
|
181
|
+
valueAtPath._metadata = lodashMerge(metadata, metadataUpdate);
|
|
182
|
+
if (action.guid) {
|
|
183
|
+
valueAtPath.guid = action.guid;
|
|
184
|
+
}
|
|
185
|
+
return _fp.setWith(Object, path, valueAtPath, state);
|
|
186
|
+
case MODEL_REMOVE_KEY_ACTION_TYPE:
|
|
187
|
+
// Completely remove the object at the path from the state
|
|
188
|
+
return _fp.unset(path, state);
|
|
189
|
+
default:
|
|
190
|
+
return state;
|
|
191
|
+
}
|
|
199
192
|
}
|
|
193
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXQiLCJpc0FycmF5IiwiaXNOaWwiLCJpc1BsYWluT2JqZWN0IiwiaXNVbmRlZmluZWQiLCJtZXJnZSIsImxvZGFzaE1lcmdlIiwiX2ZwIiwiTU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUiLCJNT0RFTF9GRVRDSF9SRVNVTFRfQUNUSU9OX1RZUEUiLCJNT0RFTF9GRVRDSF9TVEFSVF9BQ1RJT05fVFlQRSIsIk1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUiLCJnZXRNZXRhZGF0YSIsInN0YXRlIiwicGF0aCIsImNvbmNhdCIsImlzQ29sbGVjdGlvbiIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJldmVyeSIsImtleSIsImNoaWxkIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaWQiLCJwYXJzZUludCIsImlzTnVsbFJlc3BvbnNlIiwiY3VycmVudCIsImluY29taW5nIiwicmVzdWx0IiwicmVkdWNlIiwib3V0IiwiayIsImMiLCJpIiwiZm9yRWFjaCIsInVwZGF0ZU1ldGFkYXRhRm9yQ2hpbGRDb2xsZWN0aW9ucyIsImRhdGEiLCJtZXRhZGF0YSIsImlzRGF0YUNvbGxlY3Rpb24iLCJ2YWx1ZSIsIl9tZXRhZGF0YSIsIm1vZGVsc1JlZHVjZXIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJhY3Rpb24iLCJtb2RlbFBhdGgiLCJzcGxpdCIsInZhbHVlQXRQYXRoIiwibWV0YWRhdGFVcGRhdGUiLCJ0eXBlIiwiRkVUQ0hfU1RBUlQiLCJpc0ZldGNoaW5nIiwiaGFzRXJyb3IiLCJsYXN0RmV0Y2hFcnJvckRhdGEiLCJndWlkIiwic2V0V2l0aCIsIkZFVENIX1JFU1VMVF9SRUNFSVZFRCIsImZldGNoZWRBdCIsIkRhdGUiLCJyZXNwb25zZSIsInJlcGxhY2VWYWx1ZSIsIkZFVENIX0ZBSUxFRCIsImVycm9yRGF0YSIsInVuc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3JlZHVjZXJzL21vZGVsc1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSwgZ2V0LCBpc0FycmF5LCBpc05pbCwgaXNQbGFpbk9iamVjdCwgaXNVbmRlZmluZWQsIG1lcmdlIGFzIGxvZGFzaE1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IF9mcCBmcm9tICdsb2Rhc2gvZnAnXG5pbXBvcnQgeyBNZXRhZGF0YSwgTW9kZWwgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7XG5cdE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLFxuXHRNT0RFTF9GRVRDSF9SRVNVTFRfQUNUSU9OX1RZUEUsXG5cdE1PREVMX0ZFVENIX1NUQVJUX0FDVElPTl9UWVBFLFxuXHRNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLFxuXHRNb2RlbFN0b3JlQWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8qKlxuICogR2l2ZW4gdGhlIHN0YXRlIGFuZCBhIHBhdGggaW50byB0aGF0IHN0YXRlIG9iamVjdCwgcmV0dXJuIHRoZSBwcm9wIHRoYXRcbiAqIGlzIG5hbWVkIFwiX21ldGFkYXRhXCJcbiAqXG4gKiBAcGFyYW0gc3RhdGUgVGhlIHJlZHV4IHN0YXRlIG9iamVjdFxuICogQHBhcmFtIHBhdGggQW4gYXJyYXkgb2Yga2V5cyB0aGF0IHJlcHJlc2VudCB0aGUgcGF0aCB0byB0aGUgZW50aXR5IGluIHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhZGF0YShzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZ1tdKTogTWV0YWRhdGEge1xuXHRyZXR1cm4gbG9kYXNoTWVyZ2Uoe30sIGdldChzdGF0ZSwgcGF0aC5jb25jYXQoJ19tZXRhZGF0YScpKSlcbn1cblxuLyoqXG4gKiBHZXQgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGlzIGEgXCJjb2xsZWN0aW9uXCIgKGlkIGtleS12YWx1ZSBkaWN0aW9uYXJ5KS5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIEEgYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uKG9iajogYW55KSB7XG5cdHJldHVybiAoXG5cdFx0IWlzQXJyYXkob2JqKSAmJlxuXHRcdGlzUGxhaW5PYmplY3Qob2JqKSAmJlxuXHRcdE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMCAmJlxuXHRcdE9iamVjdC5rZXlzKG9iaikuZXZlcnkoa2V5ID0+IHtcblx0XHRcdGNvbnN0IGNoaWxkID0gb2JqW2tleV1cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGlzUGxhaW5PYmplY3QoY2hpbGQpICYmXG5cdFx0XHRcdChrZXkgPT09ICdfbWV0YWRhdGEnIHx8XG5cdFx0XHRcdFx0KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZCwgJ2lkJykgJiZcblx0XHRcdFx0XHRcdChjaGlsZC5pZCA9PT0gcGFyc2VJbnQoa2V5LCAxMCkgfHwgY2hpbGQuaWQgPT09IGtleSkpKVxuXHRcdFx0KVxuXHRcdH0pXG5cdClcbn1cblxuLyoqXG4gKiBHZXQgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGlzIGEgXCJudWxsIHJlc3BvbnNlXCIuXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyBBIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbFJlc3BvbnNlKG9iajogYW55KSB7XG5cdHJldHVybiAoXG5cdFx0aXNQbGFpbk9iamVjdChvYmopICYmXG5cdFx0T2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwICYmXG5cdFx0T2JqZWN0LmtleXMob2JqKS5ldmVyeShrZXkgPT4ge1xuXHRcdFx0Y29uc3QgY2hpbGQgPSBvYmpba2V5XVxuXHRcdFx0cmV0dXJuIGtleSA9PT0gJ19tZXRhZGF0YScgfHwgKGtleSA9PT0gJ3Jlc3BvbnNlJyAmJiBjaGlsZCA9PT0gbnVsbClcblx0XHR9KVxuXHQpXG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIGBjdXJyZW50YCBhbmQgYGluY29taW5nYCBvYmplY3RzIHJlY3Vyc2l2ZWx5LCByZXR1cm5pbmcgYSBuZXcgY29tYmluZWQgb2JqZWN0LlxuICpcbiAqIEZvciBlYWNoIGtleSBpbiBgY3VycmVudGA6XG4gKiAqIHJlbW92ZSBpZiBgY3VycmVudGAgaXMgYSBcImNvbGxlY3Rpb25cIiBhbmQgaXRlbSBrZXkgaXMgbm90IGluIGBpbmNvbWluZ2BcbiAqICogcmVjdXJzZSBpZiBgaW5jb21pbmdgIGlzIGFuIG9iamVjdCBvciBhcnJheSBhbmQgaGFzIGEgdmFsdWVcbiAqICogb3IgcHJlc2VydmUgZXhpc3RpbmcgdmFsdWVcbiAqXG4gKiBGb3IgZWFjaCBrZXkgaW4gYGluY29taW5nYCBub3QgaW4gYGN1cnJlbnRgOlxuICogKiBjb3B5IHZhbHVlIHRvIHJlc3VsdFxuICpcbiAqIEBwYXJhbSBjdXJyZW50XG4gKiBAcGFyYW0gaW5jb21pbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGN1cnJlbnQ6IERpY3Rpb25hcnk8YW55PiwgaW5jb21pbmc/OiBEaWN0aW9uYXJ5PGFueT4gfCBudWxsKSB7XG5cdC8vIGRvIG5vdCBtZXJnZSBhcnJheXNcblx0aWYgKGlzQXJyYXkoY3VycmVudCkpIHtcblx0XHRyZXR1cm4gIWlzVW5kZWZpbmVkKGluY29taW5nKSA/IGluY29taW5nIDogY3VycmVudFxuXHR9XG5cdC8vIGlmIGluY29taW5nIGlzIGBudWxsYCBvciBhIG51bGwgcmVzcG9uc2UgKGB7J3Jlc3BvbnNlJzogbnVsbH1gKSwgZG8gbm90IG1lcmdlLCBqdXN0IHVzZSBpbmNvbWluZ1xuXHRpZiAoaW5jb21pbmcgPT09IG51bGwgfHwgKCFpc1VuZGVmaW5lZChpbmNvbWluZykgJiYgaXNOdWxsUmVzcG9uc2UoaW5jb21pbmcpKSkge1xuXHRcdHJldHVybiBpbmNvbWluZ1xuXHR9XG5cdGNvbnN0IHJlc3VsdDogRGljdGlvbmFyeTxhbnk+ID0gT2JqZWN0LmtleXMoY3VycmVudCkucmVkdWNlKChvdXQ6IERpY3Rpb25hcnk8YW55PiwgaykgPT4ge1xuXHRcdGNvbnN0IGMgPSBjdXJyZW50W2tdXG5cdFx0Y29uc3QgaSA9IGluY29taW5nICYmIGluY29taW5nW2tdXG5cdFx0Ly8gbm9uLXJlbGF0aW9uc1xuXHRcdGlmICghaXNBcnJheShjKSAmJiAhaXNQbGFpbk9iamVjdChjKSkge1xuXHRcdFx0Ly8gY29weSBpbmNvbWluZyB2YWx1ZSwgaWYgYW55LCBvdGhlcndpc2Uga2VlcCBjdXJyZW50XG5cdFx0XHRvdXRba10gPSAhaXNVbmRlZmluZWQoaSkgPyBpIDogY1xuXHRcdFx0cmV0dXJuIG91dFxuXHRcdH1cblx0XHQvLyByZW1vdmUgXCJjb2xsZWN0aW9uXCIgaXRlbSBub3QgaW5jbHVkZWQgaW4gaW5jb21pbmdcblx0XHRpZiAoKGlzQ29sbGVjdGlvbihjdXJyZW50KSB8fCBpc0NvbGxlY3Rpb24oaW5jb21pbmcpKSAmJiAhaXNVbmRlZmluZWQoaW5jb21pbmcpICYmIGlzVW5kZWZpbmVkKGkpKSB7XG5cdFx0XHRyZXR1cm4gb3V0XG5cdFx0fVxuXHRcdC8vIG1lcmdlIHJlbGF0aW9uc1xuXHRcdG91dFtrXSA9IG1lcmdlKGMsIGkpXG5cdFx0cmV0dXJuIG91dFxuXHR9LCB7fSlcblx0aWYgKCFpc05pbChpbmNvbWluZykgJiYgaXNQbGFpbk9iamVjdChpbmNvbWluZykpIHtcblx0XHQvLyBjb3B5IGluY29taW5nIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IG9uIGN1cnJlbnRcblx0XHRPYmplY3Qua2V5cyhpbmNvbWluZykuZm9yRWFjaChrID0+IHtcblx0XHRcdGNvbnN0IGMgPSBjdXJyZW50W2tdXG5cdFx0XHRjb25zdCBpID0gaW5jb21pbmdba11cblx0XHRcdGlmIChpc1VuZGVmaW5lZChjKSkge1xuXHRcdFx0XHRyZXN1bHRba10gPSBpXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogU2V0cyBgX21ldGFkYXRhYCBvbiBhbnkgbmVzdGVkIGNvbGxlY3Rpb25zIGFuZCBjb2xsZWN0aW9uIGl0ZW1zIGluIHRoZSBkYXRhXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVNZXRhZGF0YUZvckNoaWxkQ29sbGVjdGlvbnMoZGF0YTogRGljdGlvbmFyeTxhbnk+LCBtZXRhZGF0YTogTWV0YWRhdGEpIHtcblx0Y29uc3QgaXNEYXRhQ29sbGVjdGlvbiA9IGlzQ29sbGVjdGlvbihkYXRhKVxuXHRPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBkYXRhW2tleV1cblx0XHRpZiAoKGlzRGF0YUNvbGxlY3Rpb24gJiYga2V5ICE9PSAnX21ldGFkYXRhJyAmJiBpc1BsYWluT2JqZWN0KHZhbHVlKSkgfHwgaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuX21ldGFkYXRhID0gbWV0YWRhdGFcblx0XHRcdHVwZGF0ZU1ldGFkYXRhRm9yQ2hpbGRDb2xsZWN0aW9ucyh2YWx1ZSBhcyBvYmplY3QsIG1ldGFkYXRhKVxuXHRcdH1cblx0fSlcbn1cblxuLyoqXG4gKiBSZWR1Y2VyIGZvciBmZXRjaGluZyBhbmQgdXBkYXRpbmcgYG1vZGVsc2AgaW4gcmVkdXguXG4gKlxuICogRmV0Y2hpbmcgc3RhdGUgdXBkYXRlZCB3aXRoIGV2ZXJ5IGFjdGlvbi5cbiAqIERhdGEgdXBkYXRlZCBvbiByZXN1bHQgcmVjZWl2ZWQuXG4gKiBEYXRhIGFuZCBmZXRjaGVkRGF0ZSBOT1QgZGVsZXRlZCBvbiBmYWlsZWQgcmVxdWVzdC4gQWxsIGRhdGEgYXQga2V5IHJlbW92ZWQgb24gTU9ERUxfUkVNT1ZFX0tFWS5cbiAqXG4gKiBBbGwgYWN0aW9ucyByZXF1aXJlIGEgYG1vZGVsUGF0aGAga2V5IHRvIGZ1bmN0aW9uIHdpdGggdGhpcyByZWR1Y2VyLlxuICpcbiAqIEFycmF5cyBhcmUgY29udmVydGVkIHRvIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIG51bWVyaWMgaWQgb2YgdGhlIG9iamVjdCB1c2VkXG4gKiBhcyB0aGUga2V5IGFuZCB0aGUgZW50aXJlIG9iamVjdCB1c2VkIGFzIHRoZSB2YWx1ZVxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSBzdGF0ZSBUaGUgc3RhdGUgb2YgdGhlIG1vZGVscy4gSW5pdGlhbGx5IGVtcHR5XG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdXBvbiB3aGljaCB3ZSBkaXNwYXRjaFxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgc3RhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbW9kZWxzUmVkdWNlcihzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSwgYWN0aW9uOiBNb2RlbFN0b3JlQWN0aW9uKSB7XG5cdGlmICghYWN0aW9uLm1vZGVsUGF0aCkge1xuXHRcdHJldHVybiBzdGF0ZVxuXHR9XG5cdGNvbnN0IHBhdGg6IHN0cmluZ1tdID0gYWN0aW9uLm1vZGVsUGF0aC5zcGxpdCgnLicpXG5cdC8vIHRoZSBvYmplY3QgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBwYXRoXG5cdGxldCB2YWx1ZUF0UGF0aDogTW9kZWwgPSBsb2Rhc2hNZXJnZSh7fSwgZ2V0KHN0YXRlLCBwYXRoKSlcblx0Y29uc3QgbWV0YWRhdGEgPSBnZXRNZXRhZGF0YShzdGF0ZSwgcGF0aClcblx0bGV0IG1ldGFkYXRhVXBkYXRlOiBNZXRhZGF0YVxuXG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIE1PREVMX0ZFVENIX1NUQVJUX0FDVElPTl9UWVBFLkZFVENIX1NUQVJUOlxuXHRcdFx0Ly8gUmV0YWluIHRoZSBlbnRpdHkgZGF0YSwgdXBkYXRlIHRoZSBtZXRhZGF0YSB0byByZWZsZWN0IGZldGNoIGluIHJlcXVlc3Qgc3RhdGVcblx0XHRcdG1ldGFkYXRhVXBkYXRlID0ge1xuXHRcdFx0XHRpc0ZldGNoaW5nOiB0cnVlLFxuXHRcdFx0XHRoYXNFcnJvcjogZmFsc2UsXG5cdFx0XHRcdGxhc3RGZXRjaEVycm9yRGF0YTogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHR2YWx1ZUF0UGF0aC5fbWV0YWRhdGEgPSBsb2Rhc2hNZXJnZShtZXRhZGF0YSwgbWV0YWRhdGFVcGRhdGUpXG5cdFx0XHRpZiAoYWN0aW9uLmd1aWQpIHtcblx0XHRcdFx0dmFsdWVBdFBhdGguZ3VpZCA9IGFjdGlvbi5ndWlkXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gX2ZwLnNldFdpdGgoT2JqZWN0LCBwYXRoLCB2YWx1ZUF0UGF0aCwgc3RhdGUpXG5cblx0XHRjYXNlIE1PREVMX0ZFVENIX1JFU1VMVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVNVTFRfUkVDRUlWRUQ6IHtcblx0XHRcdC8vIFVwZGF0ZSB0aGUgbWV0YWRhdGEgdG8gcmVmbGVjdCBmZXRjaCBpcyBjb21wbGV0ZS5cblx0XHRcdG1ldGFkYXRhVXBkYXRlID0ge1xuXHRcdFx0XHRpc0ZldGNoaW5nOiBmYWxzZSxcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRsYXN0RmV0Y2hFcnJvckRhdGE6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZmV0Y2hlZEF0OiBuZXcgRGF0ZSgpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmNvbWluZzogb2JqZWN0ID1cblx0XHRcdFx0IWlzUGxhaW5PYmplY3QoYWN0aW9uLmRhdGEpICYmICFpc0FycmF5KGFjdGlvbi5kYXRhKSA/IHsgcmVzcG9uc2U6IGFjdGlvbi5kYXRhIH0gOiBhY3Rpb24uZGF0YVxuXHRcdFx0dXBkYXRlTWV0YWRhdGFGb3JDaGlsZENvbGxlY3Rpb25zKGluY29taW5nLCBtZXRhZGF0YVVwZGF0ZSlcblx0XHRcdC8vIG1lcmdpbmcgdGhlIGluY29taW5nIHdpdGggZXhpc3Rpbmdcblx0XHRcdC8vIG90aGVyd2lzZSBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIGV4aXN0aW5nIHZhbHVlIGluIHJlZHV4XG5cdFx0XHRpZiAoIWFjdGlvbi5yZXBsYWNlVmFsdWUpIHtcblx0XHRcdFx0dmFsdWVBdFBhdGggPSBtZXJnZSh2YWx1ZUF0UGF0aCwgaW5jb21pbmcpIGFzIE1vZGVsXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZUF0UGF0aCA9IGxvZGFzaE1lcmdlKHt9LCBpbmNvbWluZykgYXMgTW9kZWxcblx0XHRcdH1cblx0XHRcdHZhbHVlQXRQYXRoLl9tZXRhZGF0YSA9IGxvZGFzaE1lcmdlKHt9LCBtZXRhZGF0YSwgbWV0YWRhdGFVcGRhdGUpXG5cdFx0XHRjb25zdCByZXN1bHQgPSBfZnAuc2V0V2l0aChPYmplY3QsIHBhdGgsIHZhbHVlQXRQYXRoLCBzdGF0ZSlcblx0XHRcdHJldHVybiByZXN1bHRcblx0XHR9XG5cdFx0Y2FzZSBNT0RFTF9GRVRDSF9FUlJPUl9BQ1RJT05fVFlQRS5GRVRDSF9GQUlMRUQ6XG5cdFx0XHQvLyBSZXRhaW4gdGhlIG9iamVjdCwgdXBkYXRlIHRoZSBtZXRhZGF0YSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlIHJlcXVlc3QgZmFpbGVkXG5cdFx0XHRtZXRhZGF0YVVwZGF0ZSA9IHtcblx0XHRcdFx0aXNGZXRjaGluZzogZmFsc2UsXG5cdFx0XHRcdGhhc0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRsYXN0RmV0Y2hFcnJvckRhdGE6IGFjdGlvbi5lcnJvckRhdGFcblx0XHRcdH1cblx0XHRcdHZhbHVlQXRQYXRoLl9tZXRhZGF0YSA9IGxvZGFzaE1lcmdlKG1ldGFkYXRhLCBtZXRhZGF0YVVwZGF0ZSlcblx0XHRcdGlmIChhY3Rpb24uZ3VpZCkge1xuXHRcdFx0XHR2YWx1ZUF0UGF0aC5ndWlkID0gYWN0aW9uLmd1aWRcblx0XHRcdH1cblx0XHRcdHJldHVybiBfZnAuc2V0V2l0aChPYmplY3QsIHBhdGgsIHZhbHVlQXRQYXRoLCBzdGF0ZSlcblxuXHRcdGNhc2UgTU9ERUxfUkVNT1ZFX0tFWV9BQ1RJT05fVFlQRTpcblx0XHRcdC8vIENvbXBsZXRlbHkgcmVtb3ZlIHRoZSBvYmplY3QgYXQgdGhlIHBhdGggZnJvbSB0aGUgc3RhdGVcblx0XHRcdHJldHVybiBfZnAudW5zZXQocGF0aCwgc3RhdGUpXG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHN0YXRlXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBcUJBLEdBQUcsRUFBRUMsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLGFBQWEsRUFBRUMsV0FBVyxFQUFFQyxLQUFLLElBQUlDLFdBQVcsUUFBUSxRQUFRO0FBQzFHLE9BQU9DLEdBQUcsTUFBTSxXQUFXO0FBRTNCLFNBQ0NDLDZCQUE2QixFQUM3QkMsOEJBQThCLEVBQzlCQyw2QkFBNkIsRUFDN0JDLDRCQUE0QixRQUV0QixZQUFZOztBQUVuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsV0FBV0EsQ0FBQ0MsS0FBOEIsRUFBRUMsSUFBYyxFQUFZO0VBQ3JGLE9BQU9SLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRU4sR0FBRyxDQUFDYSxLQUFLLEVBQUVDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsWUFBWUEsQ0FBQ0MsR0FBUSxFQUFFO0VBQ3RDLE9BQ0MsQ0FBQ2hCLE9BQU8sQ0FBQ2dCLEdBQUcsQ0FBQyxJQUNiZCxhQUFhLENBQUNjLEdBQUcsQ0FBQyxJQUNsQkMsTUFBTSxDQUFDQyxJQUFJLENBQUNGLEdBQUcsQ0FBQyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxJQUMzQkYsTUFBTSxDQUFDQyxJQUFJLENBQUNGLEdBQUcsQ0FBQyxDQUFDSSxLQUFLLENBQUNDLEdBQUcsSUFBSTtJQUM3QixNQUFNQyxLQUFLLEdBQUdOLEdBQUcsQ0FBQ0ssR0FBRyxDQUFDO0lBQ3RCLE9BQ0NuQixhQUFhLENBQUNvQixLQUFLLENBQUMsS0FDbkJELEdBQUcsS0FBSyxXQUFXLElBQ2xCSixNQUFNLENBQUNNLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNILEtBQUssRUFBRSxJQUFJLENBQUMs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
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.default = notificationsReducer;
|
|
4
|
-
const lodash_1 = require("lodash");
|
|
5
|
-
const NotificationAction_1 = require("../actions/NotificationAction");
|
|
1
|
+
import { merge } from 'lodash';
|
|
2
|
+
import { NOTIFICATION_ACTION_TYPE } from '../actions/NotificationAction';
|
|
6
3
|
const initialState = {
|
|
7
|
-
|
|
4
|
+
queue: []
|
|
8
5
|
};
|
|
9
|
-
function notificationsReducer(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
6
|
+
export default function notificationsReducer() {
|
|
7
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
|
8
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
9
|
+
let updatedState;
|
|
10
|
+
switch (action.type) {
|
|
11
|
+
case NOTIFICATION_ACTION_TYPE.ADD_NOTIFICATION:
|
|
12
|
+
updatedState = merge({}, state);
|
|
13
|
+
updatedState.queue.push(action.notification);
|
|
14
|
+
return updatedState;
|
|
15
|
+
case NOTIFICATION_ACTION_TYPE.REMOVE_NOTIFICATION:
|
|
16
|
+
updatedState = merge({}, state);
|
|
17
|
+
updatedState.queue = updatedState.queue.filter(n => n.id !== action.notification.id);
|
|
18
|
+
return updatedState;
|
|
19
|
+
default:
|
|
20
|
+
return state;
|
|
21
|
+
}
|
|
23
22
|
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZXJnZSIsIk5PVElGSUNBVElPTl9BQ1RJT05fVFlQRSIsImluaXRpYWxTdGF0ZSIsInF1ZXVlIiwibm90aWZpY2F0aW9uc1JlZHVjZXIiLCJzdGF0ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImFjdGlvbiIsInVwZGF0ZWRTdGF0ZSIsInR5cGUiLCJBRERfTk9USUZJQ0FUSU9OIiwicHVzaCIsIm5vdGlmaWNhdGlvbiIsIlJFTU9WRV9OT1RJRklDQVRJT04iLCJmaWx0ZXIiLCJuIiwiaWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVkdXgvcmVkdWNlcnMvbm90aWZpY2F0aW9uc1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9Ob3RpZmljYXRpb24nXG5pbXBvcnQgeyBOT1RJRklDQVRJT05fQUNUSU9OX1RZUEUsIE5vdGlmaWNhdGlvbkFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMvTm90aWZpY2F0aW9uQWN0aW9uJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvblN0YXRlIHtcblx0cXVldWU6IE5vdGlmaWNhdGlvbltdXG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogTm90aWZpY2F0aW9uU3RhdGUgPSB7XG5cdHF1ZXVlOiBbXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3RpZmljYXRpb25zUmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uOiBOb3RpZmljYXRpb25BY3Rpb24pIHtcblx0bGV0IHVwZGF0ZWRTdGF0ZTogTm90aWZpY2F0aW9uU3RhdGVcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgTk9USUZJQ0FUSU9OX0FDVElPTl9UWVBFLkFERF9OT1RJRklDQVRJT046XG5cdFx0XHR1cGRhdGVkU3RhdGUgPSBtZXJnZSh7fSwgc3RhdGUpXG5cdFx0XHR1cGRhdGVkU3RhdGUucXVldWUucHVzaChhY3Rpb24ubm90aWZpY2F0aW9uKVxuXHRcdFx0cmV0dXJuIHVwZGF0ZWRTdGF0ZVxuXHRcdGNhc2UgTk9USUZJQ0FUSU9OX0FDVElPTl9UWVBFLlJFTU9WRV9OT1RJRklDQVRJT046XG5cdFx0XHR1cGRhdGVkU3RhdGUgPSBtZXJnZSh7fSwgc3RhdGUpXG5cdFx0XHR1cGRhdGVkU3RhdGUucXVldWUgPSB1cGRhdGVkU3RhdGUucXVldWUuZmlsdGVyKG4gPT4gbi5pZCAhPT0gYWN0aW9uLm5vdGlmaWNhdGlvbi5pZClcblx0XHRcdHJldHVybiB1cGRhdGVkU3RhdGVcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHN0YXRlXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsS0FBSyxRQUFRLFFBQVE7QUFFOUIsU0FBU0Msd0JBQXdCLFFBQTRCLCtCQUErQjtBQU01RixNQUFNQyxZQUErQixHQUFHO0VBQ3ZDQyxLQUFLLEVBQUU7QUFDUixDQUFDO0FBRUQsZUFBZSxTQUFTQyxvQkFBb0JBLENBQUEsRUFBbUQ7RUFBQSxJQUFsREMsS0FBSyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0osWUFBWTtFQUFBLElBQUVPLE1BQTBCLEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7RUFDNUYsSUFBSUUsWUFBK0I7RUFDbkMsUUFBUUQsTUFBTSxDQUFDRSxJQUFJO0lBQ2xCLEtBQUtWLHdCQUF3QixDQUFDVyxnQkFBZ0I7TUFDN0NGLFlBQVksR0FBR1YsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFSyxLQUFLLENBQUM7TUFDL0JLLFlBQVksQ0FBQ1AsS0FBSyxDQUFDVSxJQUFJLENBQUNKLE1BQU0sQ0FBQ0ssWUFBWSxDQUFDO01BQzVDLE9BQU9KLFlBQVk7SUFDcEIsS0FBS1Qsd0JBQXdCLENBQUNjLG1CQUFtQjtNQUNoREwsWUFBWSxHQUFHVixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVLLEtBQUssQ0FBQztNQUMvQkssWUFBWSxDQUFDUCxLQUFLLEdBQUdPLFlBQVksQ0FBQ1AsS0FBSyxDQUFDYSxNQUFNLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxFQUFFLEtBQUtULE1BQU0sQ0FBQ0ssWUFBWSxDQUFDSSxFQUFFLENBQUM7TUFDcEYsT0FBT1IsWUFBWTtJQUNwQjtNQUNDLE9BQU9MLEtBQUs7RUFDZDtBQUNEIiwiaWdub3JlTGlzdCI6W119
|