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
package/lib/utils/table.js
CHANGED
|
@@ -1,40 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
default:
|
|
12
|
-
return '';
|
|
13
|
-
}
|
|
1
|
+
import { GROUP_MANAGE_TABLE_TAB, MANAGE_TABLE_TAB, TABLE_PAGE_SIZE_OPTIONS } from '../constants/table';
|
|
2
|
+
export const getManageTableTabName = selectedTab => {
|
|
3
|
+
switch (selectedTab) {
|
|
4
|
+
case MANAGE_TABLE_TAB.AVAILABLE:
|
|
5
|
+
return 'Available';
|
|
6
|
+
case MANAGE_TABLE_TAB.DELETED:
|
|
7
|
+
return 'Deleted';
|
|
8
|
+
default:
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
14
11
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
12
|
+
export const getGroupManageTableTabName = selectedTab => {
|
|
13
|
+
switch (selectedTab) {
|
|
14
|
+
case GROUP_MANAGE_TABLE_TAB.CURRENT:
|
|
15
|
+
return 'Current';
|
|
16
|
+
case GROUP_MANAGE_TABLE_TAB.DELETED:
|
|
17
|
+
return 'Deleted';
|
|
18
|
+
case GROUP_MANAGE_TABLE_TAB.PAST:
|
|
19
|
+
return 'Past';
|
|
20
|
+
default:
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
27
23
|
};
|
|
28
|
-
|
|
24
|
+
|
|
29
25
|
/**
|
|
30
26
|
* return page size options that are less than or equal to the total data length,
|
|
31
27
|
* and one that is greater (if it exists) to allow viewing all data on one page.
|
|
32
28
|
* */
|
|
33
|
-
const getPageSizeOptions =
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
export const getPageSizeOptions = dataLength => TABLE_PAGE_SIZE_OPTIONS.reduce((options, option, currentIndex) => {
|
|
30
|
+
const prevOption = currentIndex > 0 ? options[currentIndex - 1] : undefined;
|
|
31
|
+
if (!dataLength || option < dataLength || prevOption && prevOption < dataLength) {
|
|
32
|
+
options.push(option);
|
|
33
|
+
}
|
|
34
|
+
return options;
|
|
39
35
|
}, []);
|
|
40
|
-
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHUk9VUF9NQU5BR0VfVEFCTEVfVEFCIiwiTUFOQUdFX1RBQkxFX1RBQiIsIlRBQkxFX1BBR0VfU0laRV9PUFRJT05TIiwiZ2V0TWFuYWdlVGFibGVUYWJOYW1lIiwic2VsZWN0ZWRUYWIiLCJBVkFJTEFCTEUiLCJERUxFVEVEIiwiZ2V0R3JvdXBNYW5hZ2VUYWJsZVRhYk5hbWUiLCJDVVJSRU5UIiwiUEFTVCIsImdldFBhZ2VTaXplT3B0aW9ucyIsImRhdGFMZW5ndGgiLCJyZWR1Y2UiLCJvcHRpb25zIiwib3B0aW9uIiwiY3VycmVudEluZGV4IiwicHJldk9wdGlvbiIsInVuZGVmaW5lZCIsInB1c2giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR1JPVVBfTUFOQUdFX1RBQkxFX1RBQiwgTUFOQUdFX1RBQkxFX1RBQiwgVEFCTEVfUEFHRV9TSVpFX09QVElPTlMgfSBmcm9tICcuLi9jb25zdGFudHMvdGFibGUnXG5cbmV4cG9ydCBjb25zdCBnZXRNYW5hZ2VUYWJsZVRhYk5hbWUgPSAoc2VsZWN0ZWRUYWI/OiBudW1iZXIpID0+IHtcblx0c3dpdGNoIChzZWxlY3RlZFRhYikge1xuXHRcdGNhc2UgTUFOQUdFX1RBQkxFX1RBQi5BVkFJTEFCTEU6XG5cdFx0XHRyZXR1cm4gJ0F2YWlsYWJsZSdcblx0XHRjYXNlIE1BTkFHRV9UQUJMRV9UQUIuREVMRVRFRDpcblx0XHRcdHJldHVybiAnRGVsZXRlZCdcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTWFuYWdlVGFibGVUYWJOYW1lID0gKHNlbGVjdGVkVGFiPzogbnVtYmVyKSA9PiB7XG5cdHN3aXRjaCAoc2VsZWN0ZWRUYWIpIHtcblx0XHRjYXNlIEdST1VQX01BTkFHRV9UQUJMRV9UQUIuQ1VSUkVOVDpcblx0XHRcdHJldHVybiAnQ3VycmVudCdcblx0XHRjYXNlIEdST1VQX01BTkFHRV9UQUJMRV9UQUIuREVMRVRFRDpcblx0XHRcdHJldHVybiAnRGVsZXRlZCdcblx0XHRjYXNlIEdST1VQX01BTkFHRV9UQUJMRV9UQUIuUEFTVDpcblx0XHRcdHJldHVybiAnUGFzdCdcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuLyoqXG4gKiByZXR1cm4gcGFnZSBzaXplIG9wdGlvbnMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0b3RhbCBkYXRhIGxlbmd0aCxcbiAqIGFuZCBvbmUgdGhhdCBpcyBncmVhdGVyIChpZiBpdCBleGlzdHMpIHRvIGFsbG93IHZpZXdpbmcgYWxsIGRhdGEgb24gb25lIHBhZ2UuXG4gKiAqL1xuZXhwb3J0IGNvbnN0IGdldFBhZ2VTaXplT3B0aW9ucyA9IChkYXRhTGVuZ3RoPzogbnVtYmVyKSA9PlxuXHRUQUJMRV9QQUdFX1NJWkVfT1BUSU9OUy5yZWR1Y2U8bnVtYmVyW10+KChvcHRpb25zLCBvcHRpb24sIGN1cnJlbnRJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHByZXZPcHRpb24gPSBjdXJyZW50SW5kZXggPiAwID8gb3B0aW9uc1tjdXJyZW50SW5kZXggLSAxXSA6IHVuZGVmaW5lZFxuXHRcdGlmICghZGF0YUxlbmd0aCB8fCBvcHRpb24gPCBkYXRhTGVuZ3RoIHx8IChwcmV2T3B0aW9uICYmIHByZXZPcHRpb24gPCBkYXRhTGVuZ3RoKSkge1xuXHRcdFx0b3B0aW9ucy5wdXNoKG9wdGlvbilcblx0XHR9XG5cdFx0cmV0dXJuIG9wdGlvbnNcblx0fSwgW10pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHNCQUFzQixFQUFFQyxnQkFBZ0IsRUFBRUMsdUJBQXVCLFFBQVEsb0JBQW9CO0FBRXRHLE9BQU8sTUFBTUMscUJBQXFCLEdBQUlDLFdBQW9CLElBQUs7RUFDOUQsUUFBUUEsV0FBVztJQUNsQixLQUFLSCxnQkFBZ0IsQ0FBQ0ksU0FBUztNQUM5QixPQUFPLFdBQVc7SUFDbkIsS0FBS0osZ0JBQWdCLENBQUNLLE9BQU87TUFDNUIsT0FBTyxTQUFTO0lBQ2pCO01BQ0MsT0FBTyxFQUFFO0VBQ1g7QUFDRCxDQUFDO0FBRUQsT0FBTyxNQUFNQywwQkFBMEIsR0FBSUgsV0FBb0IsSUFBSztFQUNuRSxRQUFRQSxXQUFXO0lBQ2xCLEtBQUtKLHNCQUFzQixDQUFDUSxPQUFPO01BQ2xDLE9BQU8sU0FBUztJQUNqQixLQUFLUixzQkFBc0IsQ0FBQ00sT0FBTztNQUNsQyxPQUFPLFNBQVM7SUFDakIsS0FBS04sc0JBQXNCLENBQUNTLElBQUk7TUFDL0IsT0FBTyxNQUFNO0lBQ2Q7TUFDQyxPQUFPLEVBQUU7RUFDWDtBQUNELENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1DLGtCQUFrQixHQUFJQyxVQUFtQixJQUNyRFQsdUJBQXVCLENBQUNVLE1BQU0sQ0FBVyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsWUFBWSxLQUFLO0VBQzNFLE1BQU1DLFVBQVUsR0FBR0QsWUFBWSxHQUFHLENBQUMsR0FBR0YsT0FBTyxDQUFDRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUdFLFNBQVM7RUFDM0UsSUFBSSxDQUFDTixVQUFVLElBQUlHLE1BQU0sR0FBR0gsVUFBVSxJQUFLSyxVQUFVLElBQUlBLFVBQVUsR0FBR0wsVUFBVyxFQUFFO0lBQ2xGRSxPQUFPLENBQUNLLElBQUksQ0FBQ0osTUFBTSxDQUFDO0VBQ3JCO0VBQ0EsT0FBT0QsT0FBTztBQUNmLENBQUMsRUFBRSxFQUFFLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/utils/timezone.js
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.guessTimeZoneId = exports.getDefaultTimeZoneId = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const moment = tslib_1.__importStar(require("moment-timezone"));
|
|
6
|
-
const configuration_1 = require("../constants/configuration");
|
|
1
|
+
import * as moment from 'moment-timezone';
|
|
2
|
+
import { getShardConfig } from '../constants/configuration';
|
|
7
3
|
const defaultTimeZoneId = 'America/Indianapolis';
|
|
8
|
-
const getDefaultTimeZoneId = () => {
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
export const getDefaultTimeZoneId = () => {
|
|
5
|
+
const shardConfig = getShardConfig();
|
|
6
|
+
return shardConfig.defaultTimeZoneId ? shardConfig.defaultTimeZoneId : defaultTimeZoneId;
|
|
11
7
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
exports.guessTimeZoneId = guessTimeZoneId;
|
|
8
|
+
export const guessTimeZoneId = () => moment.tz.guess();
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb21lbnQiLCJnZXRTaGFyZENvbmZpZyIsImRlZmF1bHRUaW1lWm9uZUlkIiwiZ2V0RGVmYXVsdFRpbWVab25lSWQiLCJzaGFyZENvbmZpZyIsImd1ZXNzVGltZVpvbmVJZCIsInR6IiwiZ3Vlc3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGltZXpvbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSdcbmltcG9ydCB7IGdldFNoYXJkQ29uZmlnIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbmZpZ3VyYXRpb24nXG5cbmNvbnN0IGRlZmF1bHRUaW1lWm9uZUlkID0gJ0FtZXJpY2EvSW5kaWFuYXBvbGlzJ1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFRpbWVab25lSWQgPSAoKSA9PiB7XG5cdGNvbnN0IHNoYXJkQ29uZmlnID0gZ2V0U2hhcmRDb25maWcoKVxuXHRyZXR1cm4gc2hhcmRDb25maWcuZGVmYXVsdFRpbWVab25lSWQgPyBzaGFyZENvbmZpZy5kZWZhdWx0VGltZVpvbmVJZCA6IGRlZmF1bHRUaW1lWm9uZUlkXG59XG5cbmV4cG9ydCBjb25zdCBndWVzc1RpbWVab25lSWQgPSAoKSA9PiBtb21lbnQudHouZ3Vlc3MoKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUtBLE1BQU0sTUFBTSxpQkFBaUI7QUFDekMsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QjtBQUUzRCxNQUFNQyxpQkFBaUIsR0FBRyxzQkFBc0I7QUFFaEQsT0FBTyxNQUFNQyxvQkFBb0IsR0FBR0EsQ0FBQSxLQUFNO0VBQ3pDLE1BQU1DLFdBQVcsR0FBR0gsY0FBYyxDQUFDLENBQUM7RUFDcEMsT0FBT0csV0FBVyxDQUFDRixpQkFBaUIsR0FBR0UsV0FBVyxDQUFDRixpQkFBaUIsR0FBR0EsaUJBQWlCO0FBQ3pGLENBQUM7QUFFRCxPQUFPLE1BQU1HLGVBQWUsR0FBR0EsQ0FBQSxLQUFNTCxNQUFNLENBQUNNLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/utils/url.js
CHANGED
|
@@ -1,166 +1,152 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
case tier_1.TIER.DEV:
|
|
31
|
-
tierSubdomainPart = '.dev';
|
|
32
|
-
break;
|
|
33
|
-
case tier_1.TIER.QA:
|
|
34
|
-
tierSubdomainPart = '.qa';
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
return `${protocol}//${shardKey}${tierSubdomainPart}.${host}`;
|
|
1
|
+
import { find, isArray } from 'lodash';
|
|
2
|
+
import { SHARD } from '../constants/shard';
|
|
3
|
+
import { TIER } from '../constants/tier';
|
|
4
|
+
import { windowService } from '../services/windowService';
|
|
5
|
+
import { getLogger } from './logger';
|
|
6
|
+
import { getShardKey } from './shard';
|
|
7
|
+
export function getApiBaseUrl(tier, apiUrlString) {
|
|
8
|
+
// skip shard logic on LOCAL or if not using a custom domain (e.g. staging)
|
|
9
|
+
if (tier === TIER.LOCAL || apiUrlString.includes('azurewebsites.net')) {
|
|
10
|
+
return apiUrlString;
|
|
11
|
+
}
|
|
12
|
+
let shardKey = getShardKey();
|
|
13
|
+
|
|
14
|
+
// TODO: default ROOT to point to Purdue, until we have a landing marketing page
|
|
15
|
+
if (shardKey === SHARD.ROOT) {
|
|
16
|
+
shardKey = SHARD.PURDUE;
|
|
17
|
+
}
|
|
18
|
+
const protocol = apiUrlString.substring(0, apiUrlString.indexOf('//'));
|
|
19
|
+
const host = apiUrlString.substring(apiUrlString.indexOf('://') + 3);
|
|
20
|
+
let tierSubdomainPart = '';
|
|
21
|
+
switch (tier) {
|
|
22
|
+
case TIER.DEV:
|
|
23
|
+
tierSubdomainPart = '.dev';
|
|
24
|
+
break;
|
|
25
|
+
case TIER.QA:
|
|
26
|
+
tierSubdomainPart = '.qa';
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
return `${protocol}//${shardKey}${tierSubdomainPart}.${host}`;
|
|
38
30
|
}
|
|
39
|
-
function getStorageUrl(config, url) {
|
|
40
|
-
|
|
41
|
-
? url.replace('http://127.0.0.1:10000', config.STORAGE_URL)
|
|
42
|
-
: url;
|
|
31
|
+
export function getStorageUrl(config, url) {
|
|
32
|
+
return config.TIER === TIER.LOCAL && !!config.STORAGE_URL ? url.replace('http://127.0.0.1:10000', config.STORAGE_URL) : url;
|
|
43
33
|
}
|
|
44
|
-
function hasHttpProtocol(url) {
|
|
45
|
-
|
|
34
|
+
export function hasHttpProtocol(url) {
|
|
35
|
+
return /^(http|https):\/\//.test(url);
|
|
46
36
|
}
|
|
47
|
-
function isUrlValid(url) {
|
|
48
|
-
|
|
37
|
+
export function isUrlValid(url) {
|
|
38
|
+
return /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/.test(url);
|
|
49
39
|
}
|
|
40
|
+
|
|
50
41
|
/** The total number of tries for `fetchText`, including the initial request. */
|
|
51
42
|
const TRY_LIMIT = 5;
|
|
52
43
|
function wait(time) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
44
|
+
return new Promise(resolve => {
|
|
45
|
+
setTimeout(resolve, time);
|
|
46
|
+
});
|
|
56
47
|
}
|
|
57
|
-
function fetchText(url, options) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
} while (tryCount < TRY_LIMIT);
|
|
74
|
-
throw new Error(`Failed to fetch ${url} after ${TRY_LIMIT} attempts.`);
|
|
75
|
-
});
|
|
48
|
+
export async function fetchText(url, options) {
|
|
49
|
+
let tryCount = 0;
|
|
50
|
+
do {
|
|
51
|
+
tryCount++;
|
|
52
|
+
try {
|
|
53
|
+
const resp = await fetch(url, options);
|
|
54
|
+
const text = await resp.text();
|
|
55
|
+
return text;
|
|
56
|
+
} catch (error) {
|
|
57
|
+
getLogger().error(`Failed to fetch ${url}. attempt: ${tryCount}, error: ${error}`);
|
|
58
|
+
if (tryCount < TRY_LIMIT) {
|
|
59
|
+
await wait(2 ** (tryCount - 1) * 100); // 100, 200, 400, 800
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} while (tryCount < TRY_LIMIT);
|
|
63
|
+
throw new Error(`Failed to fetch ${url} after ${TRY_LIMIT} attempts.`);
|
|
76
64
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
65
|
+
export let X_FRAME_OPTIONS = /*#__PURE__*/function (X_FRAME_OPTIONS) {
|
|
66
|
+
X_FRAME_OPTIONS["DENY"] = "DENY";
|
|
67
|
+
X_FRAME_OPTIONS["SAMEORIGIN"] = "SAMEORIGIN";
|
|
68
|
+
X_FRAME_OPTIONS["ALLOW_FROM"] = "ALLOW-FROM";
|
|
69
|
+
return X_FRAME_OPTIONS;
|
|
70
|
+
}({});
|
|
83
71
|
/**
|
|
84
72
|
* Using the given headers, determine if a url is allowed to be displayed in an iFrame.
|
|
85
73
|
* @param headers An array of request headers.
|
|
86
74
|
* @returns The parsed result
|
|
87
75
|
*/
|
|
88
|
-
const parseHeadersResponse =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
result.isValid = true;
|
|
98
|
-
result.iFrameAllowed = true;
|
|
99
|
-
const location = windowService_1.windowService.getLocation();
|
|
100
|
-
// content-security-policy / x-content-security-policy
|
|
101
|
-
// can contain 'frame-ancestors <source> <source>' with one or many sources
|
|
102
|
-
// iFrameAllowed if it does not contain 'frame-ancestors' or if it does with an acceptable source
|
|
103
|
-
const xContentSecurityPolicy = (0, lodash_1.find)(headers, (value, key) => key.toLowerCase() === 'content-security-policy' || key.toLowerCase() === 'x-content-security-policy');
|
|
104
|
-
if (xContentSecurityPolicy && (0, lodash_1.isArray)(xContentSecurityPolicy)) {
|
|
105
|
-
// define all acceptable frame-ancestors sources
|
|
106
|
-
// protocol, full location host, host, and all wildcard permutations
|
|
107
|
-
const acceptableSources = [location.protocol, `${location.protocol}//${location.host}`, location.host];
|
|
108
|
-
const hostParts = location.host.split('.');
|
|
109
|
-
while (hostParts.length > 2) {
|
|
110
|
-
hostParts.shift();
|
|
111
|
-
const tempHost = `*.${hostParts.join('.')}`;
|
|
112
|
-
acceptableSources.push(tempHost);
|
|
113
|
-
acceptableSources.push(`${location.protocol}//${tempHost}`);
|
|
114
|
-
}
|
|
115
|
-
result.iFrameAllowed =
|
|
116
|
-
!xContentSecurityPolicy.some(x => x.indexOf('frame-ancestors ') >= 0) ||
|
|
117
|
-
xContentSecurityPolicy.some(x => {
|
|
118
|
-
/**
|
|
119
|
-
* Matches
|
|
120
|
-
* * the string `frame-ancestors `
|
|
121
|
-
* * one or many of the following, followed by a space, semicolon, or end of string
|
|
122
|
-
* * `http:`
|
|
123
|
-
* * `https:`
|
|
124
|
-
* * `'self'`
|
|
125
|
-
* * `'none'`
|
|
126
|
-
* * url with optional scheme and optional asterisk wildcards
|
|
127
|
-
*/
|
|
128
|
-
const frameAncestorsRegex = /frame-ancestors ((?:(?:(?:http:)|(?:https:)|(?:'self')|(?:'none')|(?:(?:https?:\/\/)?[\w*.-]+(?:\.[\w*.-]+)+[\w-._~:/?#[\]@!$&'()*+,=]+))(?:[ ;]|$))+)/g;
|
|
129
|
-
const results = frameAncestorsRegex.exec(x);
|
|
130
|
-
if (!results) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
const sources = results[1].split(' ');
|
|
134
|
-
return sources.some(source => acceptableSources.some(acceptableSource => acceptableSource === source));
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
// x-frame-options can be ['SAMEORIGIN', 'DENY', 'ALLOW-FROM...']
|
|
138
|
-
// iFrameAllowed if the the x-frame-options is 'ALLOW-FROM {app web url}'
|
|
139
|
-
const xFrameOptions = (0, lodash_1.find)(headers, (value, key) => key.toLowerCase() === 'x-frame-options');
|
|
140
|
-
if (xFrameOptions && (0, lodash_1.isArray)(xFrameOptions)) {
|
|
141
|
-
result.iFrameAllowed =
|
|
142
|
-
!xFrameOptions.some(x => x === X_FRAME_OPTIONS.DENY || x === X_FRAME_OPTIONS.SAMEORIGIN) &&
|
|
143
|
-
xFrameOptions.some(x => x === `${X_FRAME_OPTIONS.ALLOW_FROM} ${location.protocol}//${location.host}`);
|
|
144
|
-
}
|
|
76
|
+
export const parseHeadersResponse = headers => {
|
|
77
|
+
// default result
|
|
78
|
+
const result = {
|
|
79
|
+
isValid: false,
|
|
80
|
+
iFrameAllowed: undefined
|
|
81
|
+
};
|
|
82
|
+
if (!headers) {
|
|
145
83
|
return result;
|
|
84
|
+
}
|
|
85
|
+
result.isValid = true;
|
|
86
|
+
result.iFrameAllowed = true;
|
|
87
|
+
const location = windowService.getLocation();
|
|
88
|
+
|
|
89
|
+
// content-security-policy / x-content-security-policy
|
|
90
|
+
// can contain 'frame-ancestors <source> <source>' with one or many sources
|
|
91
|
+
// iFrameAllowed if it does not contain 'frame-ancestors' or if it does with an acceptable source
|
|
92
|
+
const xContentSecurityPolicy = find(headers, (value, key) => key.toLowerCase() === 'content-security-policy' || key.toLowerCase() === 'x-content-security-policy');
|
|
93
|
+
if (xContentSecurityPolicy && isArray(xContentSecurityPolicy)) {
|
|
94
|
+
// define all acceptable frame-ancestors sources
|
|
95
|
+
// protocol, full location host, host, and all wildcard permutations
|
|
96
|
+
const acceptableSources = [location.protocol, `${location.protocol}//${location.host}`, location.host];
|
|
97
|
+
const hostParts = location.host.split('.');
|
|
98
|
+
while (hostParts.length > 2) {
|
|
99
|
+
hostParts.shift();
|
|
100
|
+
const tempHost = `*.${hostParts.join('.')}`;
|
|
101
|
+
acceptableSources.push(tempHost);
|
|
102
|
+
acceptableSources.push(`${location.protocol}//${tempHost}`);
|
|
103
|
+
}
|
|
104
|
+
result.iFrameAllowed = !xContentSecurityPolicy.some(x => x.indexOf('frame-ancestors ') >= 0) || xContentSecurityPolicy.some(x => {
|
|
105
|
+
/**
|
|
106
|
+
* Matches
|
|
107
|
+
* * the string `frame-ancestors `
|
|
108
|
+
* * one or many of the following, followed by a space, semicolon, or end of string
|
|
109
|
+
* * `http:`
|
|
110
|
+
* * `https:`
|
|
111
|
+
* * `'self'`
|
|
112
|
+
* * `'none'`
|
|
113
|
+
* * url with optional scheme and optional asterisk wildcards
|
|
114
|
+
*/
|
|
115
|
+
const frameAncestorsRegex = /frame-ancestors ((?:(?:(?:http:)|(?:https:)|(?:'self')|(?:'none')|(?:(?:https?:\/\/)?[\w*.-]+(?:\.[\w*.-]+)+[\w-._~:/?#[\]@!$&'()*+,=]+))(?:[ ;]|$))+)/g;
|
|
116
|
+
const results = frameAncestorsRegex.exec(x);
|
|
117
|
+
if (!results) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const sources = results[1].split(' ');
|
|
121
|
+
return sources.some(source => acceptableSources.some(acceptableSource => acceptableSource === source));
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// x-frame-options can be ['SAMEORIGIN', 'DENY', 'ALLOW-FROM...']
|
|
126
|
+
// iFrameAllowed if the the x-frame-options is 'ALLOW-FROM {app web url}'
|
|
127
|
+
const xFrameOptions = find(headers, (value, key) => key.toLowerCase() === 'x-frame-options');
|
|
128
|
+
if (xFrameOptions && isArray(xFrameOptions)) {
|
|
129
|
+
result.iFrameAllowed = !xFrameOptions.some(x => x === X_FRAME_OPTIONS.DENY || x === X_FRAME_OPTIONS.SAMEORIGIN) && xFrameOptions.some(x => x === `${X_FRAME_OPTIONS.ALLOW_FROM} ${location.protocol}//${location.host}`);
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
146
132
|
};
|
|
147
|
-
|
|
133
|
+
|
|
148
134
|
/**
|
|
149
135
|
* Parse a path string into a location with separate pathname, search, and hash components.
|
|
150
136
|
* @param path A path string
|
|
151
137
|
* @returns The parsed result
|
|
152
138
|
*/
|
|
153
|
-
const parseLocation =
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
139
|
+
export const parseLocation = path => {
|
|
140
|
+
const searchStart = path.indexOf('?');
|
|
141
|
+
const hashStart = path.indexOf('#');
|
|
142
|
+
const searchEnd = hashStart > -1 ? hashStart : undefined;
|
|
143
|
+
const pathname = searchStart > -1 ? path.substring(0, searchStart) : hashStart > -1 ? path.substring(0, hashStart) : path;
|
|
144
|
+
const search = searchStart > -1 ? path.substring(searchStart, searchEnd) : undefined;
|
|
145
|
+
const hash = hashStart > -1 ? path.substring(hashStart) : undefined;
|
|
146
|
+
return {
|
|
147
|
+
pathname: pathname || '/',
|
|
148
|
+
search: search,
|
|
149
|
+
hash: hash
|
|
150
|
+
};
|
|
165
151
|
};
|
|
166
|
-
exports.parseLocation = parseLocation;
|
|
152
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaW5kIiwiaXNBcnJheSIsIlNIQVJEIiwiVElFUiIsIndpbmRvd1NlcnZpY2UiLCJnZXRMb2dnZXIiLCJnZXRTaGFyZEtleSIsImdldEFwaUJhc2VVcmwiLCJ0aWVyIiwiYXBpVXJsU3RyaW5nIiwiTE9DQUwiLCJpbmNsdWRlcyIsInNoYXJkS2V5IiwiUk9PVCIsIlBVUkRVRSIsInByb3RvY29sIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImhvc3QiLCJ0aWVyU3ViZG9tYWluUGFydCIsIkRFViIsIlFBIiwiZ2V0U3RvcmFnZVVybCIsImNvbmZpZyIsInVybCIsIlNUT1JBR0VfVVJMIiwicmVwbGFjZSIsImhhc0h0dHBQcm90b2NvbCIsInRlc3QiLCJpc1VybFZhbGlkIiwiVFJZX0xJTUlUIiwid2FpdCIsInRpbWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJmZXRjaFRleHQiLCJvcHRpb25zIiwidHJ5Q291bnQiLCJyZXNwIiwiZmV0Y2giLCJ0ZXh0IiwiZXJyb3IiLCJFcnJvciIsIlhfRlJBTUVfT1BUSU9OUyIsInBhcnNlSGVhZGVyc1Jlc3BvbnNlIiwiaGVhZGVycyIsInJlc3VsdCIsImlzVmFsaWQiLCJpRnJhbWVBbGxvd2VkIiwidW5kZWZpbmVkIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsInhDb250ZW50U2VjdXJpdHlQb2xpY3kiLCJ2YWx1ZSIsImtleSIsInRvTG93ZXJDYXNlIiwiYWNjZXB0YWJsZVNvdXJjZXMiLCJob3N0UGFydHMiLCJzcGxpdCIsImxlbmd0aCIsInNoaWZ0IiwidGVtcEhvc3QiLCJqb2luIiwicHVzaCIsInNvbWUiLCJ4IiwiZnJhbWVBbmNlc3RvcnNSZWdleCIsInJlc3VsdHMiLCJleGVjIiwic291cmNlcyIsInNvdXJjZSIsImFjY2VwdGFibGVTb3VyY2UiLCJ4RnJhbWVPcHRpb25zIiwiREVOWSIsIlNBTUVPUklHSU4iLCJBTExPV19GUk9NIiwicGFyc2VMb2NhdGlvbiIsInBhdGgiLCJzZWFyY2hTdGFydCIsImhhc2hTdGFydCIsInNlYXJjaEVuZCIsInBhdGhuYW1lIiwic2VhcmNoIiwiaGFzaCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgaHR0cCBmcm9tICdub2RlOmh0dHAnXG5pbXBvcnQgeyBMb2NhdGlvbkRlc2NyaXB0b3IgfSBmcm9tICdoaXN0b3J5J1xuaW1wb3J0IHsgZmluZCwgaXNBcnJheSB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IFNIQVJEIH0gZnJvbSAnLi4vY29uc3RhbnRzL3NoYXJkJ1xuaW1wb3J0IHsgVElFUiB9IGZyb20gJy4uL2NvbnN0YW50cy90aWVyJ1xuaW1wb3J0IHsgd2luZG93U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dpbmRvd1NlcnZpY2UnXG5pbXBvcnQgeyBBcHBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcbmltcG9ydCB7IGdldFNoYXJkS2V5IH0gZnJvbSAnLi9zaGFyZCdcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFwaUJhc2VVcmwodGllcjogVElFUiwgYXBpVXJsU3RyaW5nOiBzdHJpbmcpIHtcblx0Ly8gc2tpcCBzaGFyZCBsb2dpYyBvbiBMT0NBTCBvciBpZiBub3QgdXNpbmcgYSBjdXN0b20gZG9tYWluIChlLmcuIHN0YWdpbmcpXG5cdGlmICh0aWVyID09PSBUSUVSLkxPQ0FMIHx8IGFwaVVybFN0cmluZy5pbmNsdWRlcygnYXp1cmV3ZWJzaXRlcy5uZXQnKSkge1xuXHRcdHJldHVybiBhcGlVcmxTdHJpbmdcblx0fVxuXHRsZXQgc2hhcmRLZXkgPSBnZXRTaGFyZEtleSgpXG5cblx0Ly8gVE9ETzogZGVmYXVsdCBST09UIHRvIHBvaW50IHRvIFB1cmR1ZSwgdW50aWwgd2UgaGF2ZSBhIGxhbmRpbmcgbWFya2V0aW5nIHBhZ2Vcblx0aWYgKHNoYXJkS2V5ID09PSBTSEFSRC5ST09UKSB7XG5cdFx0c2hhcmRLZXkgPSBTSEFSRC5QVVJEVUVcblx0fVxuXG5cdGNvbnN0IHByb3RvY29sID0gYXBpVXJsU3RyaW5nLnN1YnN0cmluZygwLCBhcGlVcmxTdHJpbmcuaW5kZXhPZignLy8nKSlcblx0Y29uc3QgaG9zdCA9IGFwaVVybFN0cmluZy5zdWJzdHJpbmcoYXBpVXJsU3RyaW5nLmluZGV4T2YoJzovLycpICsgMylcblx0bGV0IHRpZXJTdWJkb21haW5QYXJ0ID0gJydcblx0c3dpdGNoICh0aWVyKSB7XG5cdFx0Y2FzZSBUSUVSLkRFVjpcblx0XHRcdHRpZXJTdWJkb21haW5QYXJ0ID0gJy5kZXYnXG5cdFx0XHRicmVha1xuXHRcdGNhc2UgVElFUi5RQTpcblx0XHRcdHRpZXJTdWJkb21haW5QYXJ0ID0gJy5xYSdcblx0XHRcdGJyZWFrXG5cdH1cblx0cmV0dXJuIGAke3Byb3RvY29sfS8vJHtzaGFyZEtleX0ke3RpZXJTdWJkb21haW5QYXJ0fS4ke2hvc3R9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmFnZVVybChjb25maWc6IEFwcENvbmZpZ3VyYXRpb24sIHVybDogc3RyaW5nKSB7XG5cdHJldHVybiBjb25maWcuVElFUiA9PT0gVElFUi5MT0NBTCAmJiAhIWNvbmZpZy5TVE9SQUdFX1VSTFxuXHRcdD8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6MTAwMDAnLCBjb25maWcuU1RPUkFHRV9VUkwpXG5cdFx0OiB1cmxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0h0dHBQcm90b2NvbCh1cmw6IHN0cmluZykge1xuXHRyZXR1cm4gL14oaHR0cHxodHRwcyk6XFwvXFwvLy50ZXN0KHVybClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsVmFsaWQodXJsOiBzdHJpbmcpIHtcblx0cmV0dXJuIC9eKD86aHR0cChzKT86XFwvXFwvKT9bXFx3Li1dKyg/OlxcLltcXHcuLV0rKStbXFx3XFwtLl9+Oi8/I1tcXF1AISQmJygpKissOz1dKyQvLnRlc3QodXJsKVxufVxuXG4vKiogVGhlIHRvdGFsIG51bWJlciBvZiB0cmllcyBmb3IgYGZldGNoVGV4dGAsIGluY2x1ZGluZyB0aGUgaW5pdGlhbCByZXF1ZXN0LiAqL1xuY29uc3QgVFJZX0xJTUlUID0gNVxuXG5mdW5jdGlvbiB3YWl0KHRpbWU6IG51bWJlcikge1xuXHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCB0aW1lKVxuXHR9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hUZXh0KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdEluaXQpIHtcblx0bGV0IHRyeUNvdW50ID0gMFxuXHRkbyB7XG5cdFx0dHJ5Q291bnQrK1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCByZXNwID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKVxuXHRcdFx0Y29uc3QgdGV4dCA9IGF3YWl0IHJlc3AudGV4dCgpXG5cdFx0XHRyZXR1cm4gdGV4dFxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRnZXRMb2dnZXIoKS5lcnJvcihgRmFpbGVkIHRvIGZldGNoICR7dXJsfS4gYXR0ZW1wdDogJHt0cnlDb3VudH0sIGVycm9yOiAke2Vycm9yfWApXG5cdFx0XHRpZiAodHJ5Q291bnQgPCBUUllfTElNSVQpIHtcblx0XHRcdFx0YXdhaXQgd2FpdCgyICoqICh0cnlDb3VudCAtIDEpICogMTAwKSAvLyAxMDAsIDIwMCwgNDAwLCA4MDBcblx0XHRcdH1cblx0XHR9XG5cdH0gd2hpbGUgKHRyeUNvdW50IDwgVFJZX0xJTUlUKVxuXG5cdHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoICR7dXJsfSBhZnRlciAke1RSWV9MSU1JVH0gYXR0ZW1wdHMuYClcbn1cblxuZXhwb3J0IGVudW0gWF9GUkFNRV9PUFRJT05TIHtcblx0REVOWSA9ICdERU5ZJyxcblx0U0FNRU9SSUdJTiA9ICdTQU1FT1JJR0lOJyxcblx0QUxMT1dfRlJPTSA9ICdBTExPVy1GUk9NJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZEhlYWRlcnNSZXNwb25zZSB7XG5cdGlzVmFsaWQ6IGJvb2xlYW5cblx0aUZyYW1lQWxsb3dlZD86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBVc2luZyB0aGUgZ2l2ZW4gaGVhZGVycywgZGV0ZXJtaW5lIGlmIGEgdXJsIGlzIGFsbG93ZWQgdG8gYmUgZGlzcGxheWVkIGluIGFuIGlGcmFtZS5cbiAqIEBwYXJhbSBoZWFkZXJzIEFuIGFycmF5IG9mIHJlcXVlc3QgaGVhZGVycy5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcmVzdWx0XG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZUhlYWRlcnNSZXNwb25zZSA9IChoZWFkZXJzPzogaHR0cC5JbmNvbWluZ0h0dHBIZWFkZXJzKSA9PiB7XG5cdC8vIGRlZmF1bHQgcmVzdWx0XG5cdGNvbnN0IHJlc3VsdDogUGFyc2VkSGVhZGVyc1Jlc3BvbnNlID0ge1xuXHRcdGlzVmFsaWQ6IGZhbHNlLFxuXHRcdGlGcmFtZUFsbG93ZWQ6IHVuZGVmaW5lZFxuXHR9XG5cblx0aWYgKCFoZWFkZXJzKSB7XG5cdFx0cmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0cmVzdWx0LmlzVmFsaWQgPSB0cnVlXG5cdHJlc3VsdC5pRnJhbWVBbGxvd2VkID0gdHJ1ZVxuXG5cdGNvbnN0IGxvY2F0aW9uID0gd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpXG5cblx0Ly8gY29udGVudC1zZWN1cml0eS1wb2xpY3kgLyB4LWNvbnRlbnQtc2VjdXJpdHktcG9saWN5XG5cdC8vIGNhbiBjb250YWluICdmcmFtZS1hbmNlc3RvcnMgPHNvdXJjZT4gPHNvdXJjZT4nIHdpdGggb25lIG9yIG1hbnkgc291cmNlc1xuXHQvLyBpRnJhbWVBbGxvd2VkIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gJ2ZyYW1lLWFuY2VzdG9ycycgb3IgaWYgaXQgZG9lcyB3aXRoIGFuIGFjY2VwdGFibGUgc291cmNlXG5cdGNvbnN0IHhDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmaW5kKFxuXHRcdGhlYWRlcnMsXG5cdFx0KHZhbHVlLCBrZXkpID0+XG5cdFx0XHRrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtc2VjdXJpdHktcG9saWN5JyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gtY29udGVudC1zZWN1cml0eS1wb2xpY3knXG5cdClcblx0aWYgKHhDb250ZW50U2VjdXJpdHlQb2xpY3kgJiYgaXNBcnJheSh4Q29udGVudFNlY3VyaXR5UG9saWN5KSkge1xuXHRcdC8vIGRlZmluZSBhbGwgYWNjZXB0YWJsZSBmcmFtZS1hbmNlc3RvcnMgc291cmNlc1xuXHRcdC8vIHByb3RvY29sLCBmdWxsIGxvY2F0aW9uIGhvc3QsIGhvc3QsIGFuZCBhbGwgd2lsZGNhcmQgcGVybXV0YXRpb25zXG5cdFx0Y29uc3QgYWNjZXB0YWJsZVNvdXJjZXMgPSBbbG9jYXRpb24ucHJvdG9jb2wsIGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0fWAsIGxvY2F0aW9uLmhvc3RdXG5cdFx0Y29uc3QgaG9zdFBhcnRzID0gbG9jYXRpb24uaG9zdC5zcGxpdCgnLicpXG5cdFx0d2hpbGUgKGhvc3RQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0XHRob3N0UGFydHMuc2hpZnQoKVxuXHRcdFx0Y29uc3QgdGVtcEhvc3QgPSBgKi4ke2hvc3RQYXJ0cy5qb2luKCcuJyl9YFxuXHRcdFx0YWNjZXB0YWJsZVNvdXJjZXMucHVzaCh0ZW1wSG9zdClcblx0XHRcdGFjY2VwdGFibGVTb3VyY2VzLnB1c2goYCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke3RlbXBIb3N0fWApXG5cdFx0fVxuXHRcdHJlc3VsdC5pRnJhbWVBbGxvd2VkID1cblx0XHRcdCF4Q29udGVudFNlY3VyaXR5UG9saWN5LnNvbWUoeCA9PiB4LmluZGV4T2YoJ2ZyYW1lLWFuY2VzdG9ycyAnKSA+PSAwKSB8fFxuXHRcdFx0eENvbnRlbnRTZWN1cml0eVBvbGljeS5zb21lKHggPT4ge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWF0Y2hlc1xuXHRcdFx0XHQgKiAqIHRoZSBzdHJpbmcgYGZyYW1lLWFuY2VzdG9ycyBgXG5cdFx0XHRcdCAqICogb25lIG9yIG1hbnkgb2YgdGhlIGZvbGxvd2luZywgZm9sbG93ZWQgYnkgYSBzcGFjZSwgc2VtaWNvbG9uLCBvciBlbmQgb2Ygc3RyaW5nXG5cdFx0XHRcdCAqICAgICAqIGBodHRwOmBcblx0XHRcdFx0ICogICAgICogYGh0dHBzOmBcblx0XHRcdFx0ICogICAgICogYCdzZWxmJ2Bcblx0XHRcdFx0ICogICAgICogYCdub25lJ2Bcblx0XHRcdFx0ICogICAgICogdXJsIHdpdGggb3B0aW9uYWwgc2NoZW1lIGFuZCBvcHRpb25hbCBhc3RlcmlzayB3aWxkY2FyZHNcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IGZyYW1lQW5jZXN0b3JzUmVnZXggPVxuXHRcdFx0XHRcdC9mcmFtZS1hbmNlc3RvcnMgKCg/Oig/Oig/Omh0dHA6KXwoPzpodHRwczopfCg/OidzZWxmJyl8KD86J25vbmUnKXwoPzooPzpodHRwcz86XFwvXFwvKT9bXFx3Ki4tXSsoPzpcXC5bXFx3Ki4tXSspK1tcXHctLl9+Oi8/I1tcXF1AISQmJygpKissPV0rKSkoPzpbIDtdfCQpKSspL2dcblx0XHRcdFx0Y29uc3QgcmVzdWx0cyA9IGZyYW1lQW5jZXN0b3JzUmVnZXguZXhlYyh4KVxuXHRcdFx0XHRpZiAoIXJlc3VsdHMpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzb3VyY2VzID0gcmVzdWx0c1sxXS5zcGxpdCgnICcpXG5cdFx0XHRcdHJldHVybiBzb3VyY2VzLnNvbWUoc291cmNlID0+IGFjY2VwdGFibGVTb3VyY2VzLnNvbWUoYWNjZXB0YWJsZVNvdXJjZSA9PiBhY2NlcHRhYmxlU291cmNlID09PSBzb3VyY2UpKVxuXHRcdFx0fSlcblx0fVxuXG5cdC8vIHgtZnJhbWUtb3B0aW9ucyBjYW4gYmUgWydTQU1FT1JJR0lOJywgJ0RFTlknLCAnQUxMT1ctRlJPTS4uLiddXG5cdC8vIGlGcmFtZUFsbG93ZWQgaWYgdGhlIHRoZSB4LWZyYW1lLW9wdGlvbnMgaXMgJ0FMTE9XLUZST00ge2FwcCB3ZWIgdXJsfSdcblx0Y29uc3QgeEZyYW1lT3B0aW9ucyA9IGZpbmQoaGVhZGVycywgKHZhbHVlLCBrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAneC1mcmFtZS1vcHRpb25zJylcblx0aWYgKHhGcmFtZU9wdGlvbnMgJiYgaXNBcnJheSh4RnJhbWVPcHRpb25zKSkge1xuXHRcdHJlc3VsdC5pRnJhbWVBbGxvd2VkID1cblx0XHRcdCF4RnJhbWVPcHRpb25zLnNvbWUoeCA9PiB4ID09PSBYX0ZSQU1FX09QVElPTlMuREVOWSB8fCB4ID09PSBYX0ZSQU1FX09QVElPTlMuU0FNRU9SSUdJTikgJiZcblx0XHRcdHhGcmFtZU9wdGlvbnMuc29tZSh4ID0+IHggPT09IGAke1hfRlJBTUVfT1BUSU9OUy5BTExPV19GUk9NfSAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0fWApXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFBhcnNlIGEgcGF0aCBzdHJpbmcgaW50byBhIGxvY2F0aW9uIHdpdGggc2VwYXJhdGUgcGF0aG5hbWUsIHNlYXJjaCwgYW5kIGhhc2ggY29tcG9uZW50cy5cbiAqIEBwYXJhbSBwYXRoIEEgcGF0aCBzdHJpbmdcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcmVzdWx0XG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZUxvY2F0aW9uID0gKHBhdGg6IHN0cmluZyk6IExvY2F0aW9uRGVzY3JpcHRvciA9PiB7XG5cdGNvbnN0IHNlYXJjaFN0YXJ0ID0gcGF0aC5pbmRleE9mKCc/Jylcblx0Y29uc3QgaGFzaFN0YXJ0ID0gcGF0aC5pbmRleE9mKCcjJylcblx0Y29uc3Qgc2VhcmNoRW5kID0gaGFzaFN0YXJ0ID4gLTEgPyBoYXNoU3RhcnQgOiB1bmRlZmluZWRcblx0Y29uc3QgcGF0aG5hbWUgPVxuXHRcdHNlYXJjaFN0YXJ0ID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBzZWFyY2hTdGFydCkgOiBoYXNoU3RhcnQgPiAtMSA/IHBhdGguc3Vic3RyaW5nKDAsIGhhc2hTdGFydCkgOiBwYXRoXG5cdGNvbnN0IHNlYXJjaCA9IHNlYXJjaFN0YXJ0ID4gLTEgPyBwYXRoLnN1YnN0cmluZyhzZWFyY2hTdGFydCwgc2VhcmNoRW5kKSA6IHVuZGVmaW5lZFxuXHRjb25zdCBoYXNoID0gaGFzaFN0YXJ0ID4gLTEgPyBwYXRoLnN1YnN0cmluZyhoYXNoU3RhcnQpIDogdW5kZWZpbmVkXG5cdHJldHVybiB7XG5cdFx0cGF0aG5hbWU6IHBhdGhuYW1lIHx8ICcvJyxcblx0XHRzZWFyY2g6IHNlYXJjaCxcblx0XHRoYXNoOiBoYXNoXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsSUFBSSxFQUFFQyxPQUFPLFFBQVEsUUFBUTtBQUN0QyxTQUFTQyxLQUFLLFFBQVEsb0JBQW9CO0FBQzFDLFNBQVNDLElBQUksUUFBUSxtQkFBbUI7QUFDeEMsU0FBU0MsYUFBYSxRQUFRLDJCQUEyQjtBQUV6RCxTQUFTQyxTQUFTLFFBQVEsVUFBVTtBQUNwQyxTQUFTQyxXQUFXLFFBQVEsU0FBUztBQUVyQyxPQUFPLFNBQVNDLGFBQWFBLENBQUNDLElBQVUsRUFBRUMsWUFBb0IsRUFBRTtFQUMvRDtFQUNBLElBQUlELElBQUksS0FBS0wsSUFBSSxDQUFDTyxLQUFLLElBQUlELFlBQVksQ0FBQ0UsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7SUFDdEUsT0FBT0YsWUFBWTtFQUNwQjtFQUNBLElBQUlHLFFBQVEsR0FBR04sV0FBVyxDQUFDLENBQUM7O0VBRTVCO0VBQ0EsSUFBSU0sUUFBUSxLQUFLVixLQUFLLENBQUNXLElBQUksRUFBRTtJQUM1QkQsUUFBUSxHQUFHVixLQUFLLENBQUNZLE1BQU07RUFDeEI7RUFFQSxNQUFNQyxRQUFRLEdBQUdOLFlBQVksQ0FBQ08sU0FBUyxDQUFDLENBQUMsRUFBRVAsWUFBWSxD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
|
package/lib/utils/user.js
CHANGED
|
@@ -1,67 +1,57 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const displayName = (u, shouldReverse = false) => !!u.firstName && !!u.lastName
|
|
10
|
-
? shouldReverse
|
|
11
|
-
? `${u.lastName}, ${u.firstName}`
|
|
12
|
-
: `${u.firstName} ${u.lastName}`
|
|
13
|
-
: u.email;
|
|
14
|
-
exports.displayName = displayName;
|
|
15
|
-
const displayNamePossessive = (u) => !!u.firstName && !!u.lastName ? `${u.firstName} ${makePossessive(u.lastName)}` : `${u.email}’s`;
|
|
16
|
-
exports.displayNamePossessive = displayNamePossessive;
|
|
17
|
-
const displayFirstName = (u) => (u.firstName ? u.firstName : u.email);
|
|
18
|
-
exports.displayFirstName = displayFirstName;
|
|
19
|
-
const displayFirstNamePossessive = (u) => (u.firstName ? makePossessive(u.firstName) : `${u.email}’s`);
|
|
20
|
-
exports.displayFirstNamePossessive = displayFirstNamePossessive;
|
|
21
|
-
const filterUsersByRole = (role) => (userRoles) => {
|
|
22
|
-
return userRoles.filter(userRole => userRole.roles.some(r => r.role === role));
|
|
1
|
+
import { NOTIFICATION_TYPE } from '../constants';
|
|
2
|
+
import { addNotification, dispatchModelFetchRequest } from '../redux/actionCreator';
|
|
3
|
+
import { registerNoStoreActionHook, unregisterNoStoreActionHook } from '../redux/sagas/noStoreSaga';
|
|
4
|
+
import { isFetchErrorData } from './fetch';
|
|
5
|
+
const makePossessive = word => word.endsWith('s') ? `${word}’` : `${word}’s`;
|
|
6
|
+
export const displayName = function (u) {
|
|
7
|
+
let shouldReverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
8
|
+
return !!u.firstName && !!u.lastName ? shouldReverse ? `${u.lastName}, ${u.firstName}` : `${u.firstName} ${u.lastName}` : u.email;
|
|
23
9
|
};
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(0, actionCreator_1.addNotification)({
|
|
30
|
-
text: (data === null || data === void 0 ? void 0 : data.detail) || 'Could not start impersonation',
|
|
31
|
-
type: constants_1.NOTIFICATION_TYPE.ERROR
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
const response = data;
|
|
36
|
-
window.location.href = `/?code=${encodeURIComponent(response.code)}`;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
(0, actionCreator_1.dispatchModelFetchRequest)({
|
|
40
|
-
modelName: 'startImpersonation',
|
|
41
|
-
noStore: true,
|
|
42
|
-
guid,
|
|
43
|
-
queryParams: { userId }
|
|
44
|
-
});
|
|
10
|
+
export const displayNamePossessive = u => !!u.firstName && !!u.lastName ? `${u.firstName} ${makePossessive(u.lastName)}` : `${u.email}’s`;
|
|
11
|
+
export const displayFirstName = u => u.firstName ? u.firstName : u.email;
|
|
12
|
+
export const displayFirstNamePossessive = u => u.firstName ? makePossessive(u.firstName) : `${u.email}’s`;
|
|
13
|
+
export const filterUsersByRole = role => userRoles => {
|
|
14
|
+
return userRoles.filter(userRole => userRole.roles.some(r => r.role === role));
|
|
45
15
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
16
|
+
export const startImpersonation = (guid, userId) => {
|
|
17
|
+
registerNoStoreActionHook(guid, data => {
|
|
18
|
+
unregisterNoStoreActionHook(guid);
|
|
19
|
+
if (!data || isFetchErrorData(data)) {
|
|
20
|
+
addNotification({
|
|
21
|
+
text: data?.detail || 'Could not start impersonation',
|
|
22
|
+
type: NOTIFICATION_TYPE.ERROR
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
const response = data;
|
|
26
|
+
window.location.href = `/?code=${encodeURIComponent(response.code)}`;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
dispatchModelFetchRequest({
|
|
30
|
+
modelName: 'startImpersonation',
|
|
31
|
+
noStore: true,
|
|
32
|
+
guid,
|
|
33
|
+
queryParams: {
|
|
34
|
+
userId
|
|
35
|
+
}
|
|
36
|
+
});
|
|
66
37
|
};
|
|
67
|
-
|
|
38
|
+
export const stopImpersonation = guid => {
|
|
39
|
+
registerNoStoreActionHook(guid, data => {
|
|
40
|
+
unregisterNoStoreActionHook(guid);
|
|
41
|
+
if (!data || isFetchErrorData(data)) {
|
|
42
|
+
addNotification({
|
|
43
|
+
text: data?.detail || 'Could not stop impersonation',
|
|
44
|
+
type: NOTIFICATION_TYPE.ERROR
|
|
45
|
+
});
|
|
46
|
+
} else {
|
|
47
|
+
const response = data;
|
|
48
|
+
window.location.href = `/?code=${encodeURIComponent(response.code)}`;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
dispatchModelFetchRequest({
|
|
52
|
+
modelName: 'stopImpersonation',
|
|
53
|
+
noStore: true,
|
|
54
|
+
guid
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT1RJRklDQVRJT05fVFlQRSIsImFkZE5vdGlmaWNhdGlvbiIsImRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QiLCJyZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rIiwidW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rIiwiaXNGZXRjaEVycm9yRGF0YSIsIm1ha2VQb3NzZXNzaXZlIiwid29yZCIsImVuZHNXaXRoIiwiZGlzcGxheU5hbWUiLCJ1Iiwic2hvdWxkUmV2ZXJzZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZW1haWwiLCJkaXNwbGF5TmFtZVBvc3Nlc3NpdmUiLCJkaXNwbGF5Rmlyc3ROYW1lIiwiZGlzcGxheUZpcnN0TmFtZVBvc3Nlc3NpdmUiLCJmaWx0ZXJVc2Vyc0J5Um9sZSIsInJvbGUiLCJ1c2VyUm9sZXMiLCJmaWx0ZXIiLCJ1c2VyUm9sZSIsInJvbGVzIiwic29tZSIsInIiLCJzdGFydEltcGVyc29uYXRpb24iLCJndWlkIiwidXNlcklkIiwiZGF0YSIsInRleHQiLCJkZXRhaWwiLCJ0eXBlIiwiRVJST1IiLCJyZXNwb25zZSIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvZGUiLCJtb2RlbE5hbWUiLCJub1N0b3JlIiwicXVlcnlQYXJhbXMiLCJzdG9wSW1wZXJzb25hdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5PVElGSUNBVElPTl9UWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgYWRkTm90aWZpY2F0aW9uLCBkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0IH0gZnJvbSAnLi4vcmVkdXgvYWN0aW9uQ3JlYXRvcidcbmltcG9ydCB7IHJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2ssIHVucmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayB9IGZyb20gJy4uL3JlZHV4L3NhZ2FzL25vU3RvcmVTYWdhJ1xuaW1wb3J0IHsgRmV0Y2hFcnJvckRhdGEsIFVzZXIsIFVzZXJXaXRoUm9sZXMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGlzRmV0Y2hFcnJvckRhdGEgfSBmcm9tICcuL2ZldGNoJ1xuXG5jb25zdCBtYWtlUG9zc2Vzc2l2ZSA9ICh3b3JkOiBzdHJpbmcpID0+ICh3b3JkLmVuZHNXaXRoKCdzJykgPyBgJHt3b3JkfeKAmWAgOiBgJHt3b3JkfeKAmXNgKVxuXG5leHBvcnQgY29uc3QgZGlzcGxheU5hbWUgPSAodTogVXNlciwgc2hvdWxkUmV2ZXJzZSA9IGZhbHNlKSA9PlxuXHQhIXUuZmlyc3ROYW1lICYmICEhdS5sYXN0TmFtZVxuXHRcdD8gc2hvdWxkUmV2ZXJzZVxuXHRcdFx0PyBgJHt1Lmxhc3ROYW1lfSwgJHt1LmZpcnN0TmFtZX1gXG5cdFx0XHQ6IGAke3UuZmlyc3ROYW1lfSAke3UubGFzdE5hbWV9YFxuXHRcdDogdS5lbWFpbFxuXG5leHBvcnQgY29uc3QgZGlzcGxheU5hbWVQb3NzZXNzaXZlID0gKHU6IFVzZXIpID0+XG5cdCEhdS5maXJzdE5hbWUgJiYgISF1Lmxhc3ROYW1lID8gYCR7dS5maXJzdE5hbWV9ICR7bWFrZVBvc3Nlc3NpdmUodS5sYXN0TmFtZSl9YCA6IGAke3UuZW1haWx94oCZc2BcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlGaXJzdE5hbWUgPSAodTogVXNlcikgPT4gKHUuZmlyc3ROYW1lID8gdS5maXJzdE5hbWUgOiB1LmVtYWlsKVxuXG5leHBvcnQgY29uc3QgZGlzcGxheUZpcnN0TmFtZVBvc3Nlc3NpdmUgPSAodTogVXNlcikgPT4gKHUuZmlyc3ROYW1lID8gbWFrZVBvc3Nlc3NpdmUodS5maXJzdE5hbWUpIDogYCR7dS5lbWFpbH3igJlzYClcblxuZXhwb3J0IGNvbnN0IGZpbHRlclVzZXJzQnlSb2xlID0gKHJvbGU6IHN0cmluZykgPT4gKHVzZXJSb2xlczogVXNlcldpdGhSb2xlc1tdKSA9PiB7XG5cdHJldHVybiB1c2VyUm9sZXMuZmlsdGVyKHVzZXJSb2xlID0+IHVzZXJSb2xlLnJvbGVzLnNvbWUociA9PiByLnJvbGUgPT09IHJvbGUpKVxufVxuXG5leHBvcnQgY29uc3Qgc3RhcnRJbXBlcnNvbmF0aW9uID0gKGd1aWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpID0+IHtcblx0cmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayhndWlkLCAoZGF0YTogeyBjb2RlOiBzdHJpbmcgfSB8IEZldGNoRXJyb3JEYXRhIHwgbnVsbCkgPT4ge1xuXHRcdHVucmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayhndWlkKVxuXHRcdGlmICghZGF0YSB8fCBpc0ZldGNoRXJyb3JEYXRhKGRhdGEpKSB7XG5cdFx0XHRhZGROb3RpZmljYXRpb24oe1xuXHRcdFx0XHR0ZXh0OiBkYXRhPy5kZXRhaWwgfHwgJ0NvdWxkIG5vdCBzdGFydCBpbXBlcnNvbmF0aW9uJyxcblx0XHRcdFx0dHlwZTogTk9USUZJQ0FUSU9OX1RZUEUuRVJST1Jcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gZGF0YSBhcyB7IGNvZGU6IHN0cmluZyB9XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAvP2NvZGU9JHtlbmNvZGVVUklDb21wb25lbnQocmVzcG9uc2UuY29kZSl9YFxuXHRcdH1cblx0fSlcblxuXHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdzdGFydEltcGVyc29uYXRpb24nLFxuXHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0Z3VpZCxcblx0XHRxdWVyeVBhcmFtczogeyB1c2VySWQgfVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3Qgc3RvcEltcGVyc29uYXRpb24gPSAoZ3VpZDogc3RyaW5nKSA9PiB7XG5cdHJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2soZ3VpZCwgKGRhdGE6IHsgY29kZTogc3RyaW5nIH0gfCBGZXRjaEVycm9yRGF0YSB8IG51bGwpID0+IHtcblx0XHR1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2soZ3VpZClcblx0XHRpZiAoIWRhdGEgfHwgaXNGZXRjaEVycm9yRGF0YShkYXRhKSkge1xuXHRcdFx0YWRkTm90aWZpY2F0aW9uKHtcblx0XHRcdFx0dGV4dDogZGF0YT8uZGV0YWlsIHx8ICdDb3VsZCBub3Qgc3RvcCBpbXBlcnNvbmF0aW9uJyxcblx0XHRcdFx0dHlwZTogTk9USUZJQ0FUSU9OX1RZUEUuRVJST1Jcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gZGF0YSBhcyB7IGNvZGU6IHN0cmluZyB9XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAvP2NvZGU9JHtlbmNvZGVVUklDb21wb25lbnQocmVzcG9uc2UuY29kZSl9YFxuXHRcdH1cblx0fSlcblxuXHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdzdG9wSW1wZXJzb25hdGlvbicsXG5cdFx0bm9TdG9yZTogdHJ1ZSxcblx0XHRndWlkXG5cdH0pXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGlCQUFpQixRQUFRLGNBQWM7QUFDaEQsU0FBU0MsZUFBZSxFQUFFQyx5QkFBeUIsUUFBUSx3QkFBd0I7QUFDbkYsU0FBU0MseUJBQXlCLEVBQUVDLDJCQUEyQixRQUFRLDRCQUE0QjtBQUVuRyxTQUFTQyxnQkFBZ0IsUUFBUSxTQUFTO0FBRTFDLE1BQU1DLGNBQWMsR0FBSUMsSUFBWSxJQUFNQSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHRCxJQUFJLEdBQUcsR0FBRyxHQUFHQSxJQUFJLElBQUs7QUFFeEYsT0FBTyxNQUFNRSxXQUFXLEdBQUcsU0FBQUEsQ0FBQ0MsQ0FBTztFQUFBLElBQUVDLGFBQWEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztFQUFBLE9BQ3pELENBQUMs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
|
package/lib/utils/userAgent.js
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const macOSPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i;
|
|
8
|
-
const windowsPlatforms = /(win32|win64|windows|wince)/i;
|
|
9
|
-
return macOSPlatforms.test(userAgent)
|
|
10
|
-
? operatingSystem_1.OPERATING_SYSTEM.MAC
|
|
11
|
-
: windowsPlatforms.test(userAgent)
|
|
12
|
-
? operatingSystem_1.OPERATING_SYSTEM.WINDOWS
|
|
13
|
-
: operatingSystem_1.OPERATING_SYSTEM.UNKNOWN;
|
|
1
|
+
import { OPERATING_SYSTEM } from '../constants/operatingSystem';
|
|
2
|
+
export const getOperatingSystem = () => {
|
|
3
|
+
const userAgent = window.navigator.userAgent.toLowerCase();
|
|
4
|
+
const macOSPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i;
|
|
5
|
+
const windowsPlatforms = /(win32|win64|windows|wince)/i;
|
|
6
|
+
return macOSPlatforms.test(userAgent) ? OPERATING_SYSTEM.MAC : windowsPlatforms.test(userAgent) ? OPERATING_SYSTEM.WINDOWS : OPERATING_SYSTEM.UNKNOWN;
|
|
14
7
|
};
|
|
15
|
-
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPUEVSQVRJTkdfU1lTVEVNIiwiZ2V0T3BlcmF0aW5nU3lzdGVtIiwidXNlckFnZW50Iiwid2luZG93IiwibmF2aWdhdG9yIiwidG9Mb3dlckNhc2UiLCJtYWNPU1BsYXRmb3JtcyIsIndpbmRvd3NQbGF0Zm9ybXMiLCJ0ZXN0IiwiTUFDIiwiV0lORE9XUyIsIlVOS05PV04iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlckFnZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9QRVJBVElOR19TWVNURU0gfSBmcm9tICcuLi9jb25zdGFudHMvb3BlcmF0aW5nU3lzdGVtJ1xuXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aW5nU3lzdGVtID0gKCkgPT4ge1xuXHRjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG5cdGNvbnN0IG1hY09TUGxhdGZvcm1zID0gLyhtYWNpbnRvc2h8bWFjaW50ZWx8bWFjcHBjfG1hYzY4a3xtYWNvcykvaVxuXHRjb25zdCB3aW5kb3dzUGxhdGZvcm1zID0gLyh3aW4zMnx3aW42NHx3aW5kb3dzfHdpbmNlKS9pXG5cblx0cmV0dXJuIG1hY09TUGxhdGZvcm1zLnRlc3QodXNlckFnZW50KVxuXHRcdD8gT1BFUkFUSU5HX1NZU1RFTS5NQUNcblx0XHQ6IHdpbmRvd3NQbGF0Zm9ybXMudGVzdCh1c2VyQWdlbnQpXG5cdFx0XHQ/IE9QRVJBVElOR19TWVNURU0uV0lORE9XU1xuXHRcdFx0OiBPUEVSQVRJTkdfU1lTVEVNLlVOS05PV05cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZ0JBQWdCLFFBQVEsOEJBQThCO0FBRS9ELE9BQU8sTUFBTUMsa0JBQWtCLEdBQUdBLENBQUEsS0FBTTtFQUN2QyxNQUFNQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDRixTQUFTLENBQUNHLFdBQVcsQ0FBQyxDQUFDO0VBQzFELE1BQU1DLGNBQWMsR0FBRywyQ0FBMkM7RUFDbEUsTUFBTUMsZ0JBQWdCLEdBQUcsOEJBQThCO0VBRXZELE9BQU9ELGNBQWMsQ0FBQ0UsSUFBSSxDQUFDTixTQUFTLENBQUMsR0FDbENGLGdCQUFnQixDQUFDUyxHQUFHLEdBQ3BCRixnQkFBZ0IsQ0FBQ0MsSUFBSSxDQUFDTixTQUFTLENBQUMsR0FDL0JGLGdCQUFnQixDQUFDVSxPQUFPLEdBQ3hCVixnQkFBZ0IsQ0FBQ1csT0FBTztBQUM3QixDQUFDIiwiaWdub3JlTGlzdCI6W119
|