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/route.js
CHANGED
|
@@ -1,67 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import pluralize from 'pluralize';
|
|
3
|
+
import { getEndpointMappings } from '../constants/configuration';
|
|
4
|
+
export const getModelIdFromRouteMatchParams = (routeMatchParams, modelName) => {
|
|
5
|
+
const singularModelName = pluralize.singular(modelName);
|
|
6
|
+
const id = routeMatchParams[`${singularModelName}Id`];
|
|
7
|
+
if (!id || isNaN(Number(id))) {
|
|
8
|
+
return id;
|
|
9
|
+
}
|
|
10
|
+
return parseInt(id, 10);
|
|
11
|
+
};
|
|
12
|
+
export const getPathParamsFromRouteMatchParams = (routeMatchParams, modelName) => {
|
|
13
|
+
const pathParams = modelName.split('.').reduce((retval, levelName) => {
|
|
14
|
+
const levelId = getModelIdFromRouteMatchParams(routeMatchParams, levelName);
|
|
15
|
+
if (levelId) {
|
|
16
|
+
retval.push(levelId);
|
|
13
17
|
}
|
|
14
|
-
return
|
|
18
|
+
return retval;
|
|
19
|
+
}, []);
|
|
20
|
+
return pathParams;
|
|
15
21
|
};
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
export const getMinRequiredPathParamsCount = modelName => {
|
|
23
|
+
const endpointMappings = getEndpointMappings();
|
|
24
|
+
let pathParamCount = 0;
|
|
25
|
+
const modelLevelNames = modelName.split('.');
|
|
26
|
+
modelLevelNames.forEach((levelName, index) => {
|
|
27
|
+
const modelLevelName = modelLevelNames.slice(0, index + 1).join('.');
|
|
28
|
+
const modelLevel = modelLevelName ? _.get(endpointMappings, modelLevelName) : {};
|
|
29
|
+
const modelConfig = _.merge({}, modelLevel._config);
|
|
30
|
+
if (modelConfig.isCollection && index + 1 < modelLevelNames.length) {
|
|
31
|
+
pathParamCount++;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return pathParamCount;
|
|
26
35
|
};
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
export const getReduxModelName = (pathParams, modelName) => {
|
|
37
|
+
const endpointMappings = getEndpointMappings();
|
|
38
|
+
let reduxModelName = modelName;
|
|
39
|
+
if (pathParams.length > 0) {
|
|
40
|
+
let pathParamIndex = 0;
|
|
31
41
|
const modelLevelNames = modelName.split('.');
|
|
32
42
|
modelLevelNames.forEach((levelName, index) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
const modelLevelName = modelLevelNames.slice(0, index + 1).join('.');
|
|
44
|
+
const modelLevel = modelLevelName ? _.get(endpointMappings, modelLevelName) : {};
|
|
45
|
+
const modelConfig = _.merge({}, modelLevel._config);
|
|
46
|
+
if (index === 0) {
|
|
47
|
+
reduxModelName = levelName;
|
|
48
|
+
} else {
|
|
49
|
+
reduxModelName = `${reduxModelName}.${levelName}`;
|
|
50
|
+
}
|
|
51
|
+
if (pathParams.length - 1 >= pathParamIndex && modelConfig.isCollection) {
|
|
52
|
+
reduxModelName = `${reduxModelName}.${pathParams[pathParamIndex]}`;
|
|
53
|
+
pathParamIndex++;
|
|
54
|
+
}
|
|
39
55
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
exports.getMinRequiredPathParamsCount = getMinRequiredPathParamsCount;
|
|
43
|
-
const getReduxModelName = (pathParams, modelName) => {
|
|
44
|
-
const endpointMappings = (0, configuration_1.getEndpointMappings)();
|
|
45
|
-
let reduxModelName = modelName;
|
|
46
|
-
if (pathParams.length > 0) {
|
|
47
|
-
let pathParamIndex = 0;
|
|
48
|
-
const modelLevelNames = modelName.split('.');
|
|
49
|
-
modelLevelNames.forEach((levelName, index) => {
|
|
50
|
-
const modelLevelName = modelLevelNames.slice(0, index + 1).join('.');
|
|
51
|
-
const modelLevel = modelLevelName ? lodash_1.default.get(endpointMappings, modelLevelName) : {};
|
|
52
|
-
const modelConfig = lodash_1.default.merge({}, modelLevel._config);
|
|
53
|
-
if (index === 0) {
|
|
54
|
-
reduxModelName = levelName;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
reduxModelName = `${reduxModelName}.${levelName}`;
|
|
58
|
-
}
|
|
59
|
-
if (pathParams.length - 1 >= pathParamIndex && modelConfig.isCollection) {
|
|
60
|
-
reduxModelName = `${reduxModelName}.${pathParams[pathParamIndex]}`;
|
|
61
|
-
pathParamIndex++;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return reduxModelName;
|
|
56
|
+
}
|
|
57
|
+
return reduxModelName;
|
|
66
58
|
};
|
|
67
|
-
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfIiwicGx1cmFsaXplIiwiZ2V0RW5kcG9pbnRNYXBwaW5ncyIsImdldE1vZGVsSWRGcm9tUm91dGVNYXRjaFBhcmFtcyIsInJvdXRlTWF0Y2hQYXJhbXMiLCJtb2RlbE5hbWUiLCJzaW5ndWxhck1vZGVsTmFtZSIsInNpbmd1bGFyIiwiaWQiLCJpc05hTiIsIk51bWJlciIsInBhcnNlSW50IiwiZ2V0UGF0aFBhcmFtc0Zyb21Sb3V0ZU1hdGNoUGFyYW1zIiwicGF0aFBhcmFtcyIsInNwbGl0IiwicmVkdWNlIiwicmV0dmFsIiwibGV2ZWxOYW1lIiwibGV2ZWxJZCIsInB1c2giLCJnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudCIsImVuZHBvaW50TWFwcGluZ3MiLCJwYXRoUGFyYW1Db3VudCIsIm1vZGVsTGV2ZWxOYW1lcyIsImZvckVhY2giLCJpbmRleCIsIm1vZGVsTGV2ZWxOYW1lIiwic2xpY2UiLCJqb2luIiwibW9kZWxMZXZlbCIsImdldCIsIm1vZGVsQ29uZmlnIiwibWVyZ2UiLCJfY29uZmlnIiwiaXNDb2xsZWN0aW9uIiwibGVuZ3RoIiwiZ2V0UmVkdXhNb2RlbE5hbWUiLCJyZWR1eE1vZGVsTmFtZSIsInBhdGhQYXJhbUluZGV4Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JvdXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSdcbmltcG9ydCB7IGdldEVuZHBvaW50TWFwcGluZ3MgfSBmcm9tICcuLi9jb25zdGFudHMvY29uZmlndXJhdGlvbidcblxuZXhwb3J0IGNvbnN0IGdldE1vZGVsSWRGcm9tUm91dGVNYXRjaFBhcmFtcyA9IChyb3V0ZU1hdGNoUGFyYW1zOiBEaWN0aW9uYXJ5PHN0cmluZz4sIG1vZGVsTmFtZTogc3RyaW5nKSA9PiB7XG5cdGNvbnN0IHNpbmd1bGFyTW9kZWxOYW1lID0gcGx1cmFsaXplLnNpbmd1bGFyKG1vZGVsTmFtZSlcblx0Y29uc3QgaWQgPSByb3V0ZU1hdGNoUGFyYW1zW2Ake3Npbmd1bGFyTW9kZWxOYW1lfUlkYF0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG5cdGlmICghaWQgfHwgaXNOYU4oTnVtYmVyKGlkKSkpIHtcblx0XHRyZXR1cm4gaWRcblx0fVxuXHRyZXR1cm4gcGFyc2VJbnQoaWQsIDEwKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UGF0aFBhcmFtc0Zyb21Sb3V0ZU1hdGNoUGFyYW1zID0gKHJvdXRlTWF0Y2hQYXJhbXM6IERpY3Rpb25hcnk8c3RyaW5nPiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+IHtcblx0Y29uc3QgcGF0aFBhcmFtcyA9IG1vZGVsTmFtZS5zcGxpdCgnLicpLnJlZHVjZSgocmV0dmFsOiBhbnlbXSwgbGV2ZWxOYW1lKSA9PiB7XG5cdFx0Y29uc3QgbGV2ZWxJZCA9IGdldE1vZGVsSWRGcm9tUm91dGVNYXRjaFBhcmFtcyhyb3V0ZU1hdGNoUGFyYW1zLCBsZXZlbE5hbWUpXG5cdFx0aWYgKGxldmVsSWQpIHtcblx0XHRcdHJldHZhbC5wdXNoKGxldmVsSWQpXG5cdFx0fVxuXHRcdHJldHVybiByZXR2YWxcblx0fSwgW10pXG5cdHJldHVybiBwYXRoUGFyYW1zXG59XG5cbmV4cG9ydCBjb25zdCBnZXRNaW5SZXF1aXJlZFBhdGhQYXJhbXNDb3VudCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4ge1xuXHRjb25zdCBlbmRwb2ludE1hcHBpbmdzID0gZ2V0RW5kcG9pbnRNYXBwaW5ncygpXG5cdGxldCBwYXRoUGFyYW1Db3VudCA9IDBcblx0Y29uc3QgbW9kZWxMZXZlbE5hbWVzID0gbW9kZWxOYW1lLnNwbGl0KCcuJylcblx0bW9kZWxMZXZlbE5hbWVzLmZvckVhY2goKGxldmVsTmFtZSwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBtb2RlbExldmVsTmFtZSA9IG1vZGVsTGV2ZWxOYW1lcy5zbGljZSgwLCBpbmRleCArIDEpLmpvaW4oJy4nKVxuXHRcdGNvbnN0IG1vZGVsTGV2ZWwgPSBtb2RlbExldmVsTmFtZSA/IF8uZ2V0KGVuZHBvaW50TWFwcGluZ3MsIG1vZGVsTGV2ZWxOYW1lKSA6IHt9XG5cdFx0Y29uc3QgbW9kZWxDb25maWcgPSBfLm1lcmdlKHt9LCBtb2RlbExldmVsLl9jb25maWcpXG5cdFx0aWYgKG1vZGVsQ29uZmlnLmlzQ29sbGVjdGlvbiAmJiBpbmRleCArIDEgPCBtb2RlbExldmVsTmFtZXMubGVuZ3RoKSB7XG5cdFx0XHRwYXRoUGFyYW1Db3VudCsrXG5cdFx0fVxuXHR9KVxuXHRyZXR1cm4gcGF0aFBhcmFtQ291bnRcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJlZHV4TW9kZWxOYW1lID0gKHBhdGhQYXJhbXM6IGFueVtdLCBtb2RlbE5hbWU6IHN0cmluZykgPT4ge1xuXHRjb25zdCBlbmRwb2ludE1hcHBpbmdzID0gZ2V0RW5kcG9pbnRNYXBwaW5ncygpXG5cdGxldCByZWR1eE1vZGVsTmFtZSA9IG1vZGVsTmFtZVxuXHRpZiAocGF0aFBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IHBhdGhQYXJhbUluZGV4ID0gMFxuXHRcdGNvbnN0IG1vZGVsTGV2ZWxOYW1lcyA9IG1vZGVsTmFtZS5zcGxpdCgnLicpXG5cdFx0bW9kZWxMZXZlbE5hbWVzLmZvckVhY2goKGxldmVsTmFtZSwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vZGVsTGV2ZWxOYW1lID0gbW9kZWxMZXZlbE5hbWVzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpXG5cdFx0XHRjb25zdCBtb2RlbExldmVsID0gbW9kZWxMZXZlbE5hbWUgPyBfLmdldChlbmRwb2ludE1hcHBpbmdzLCBtb2RlbExldmVsTmFtZSkgOiB7fVxuXHRcdFx0Y29uc3QgbW9kZWxDb25maWcgPSBfLm1lcmdlKHt9LCBtb2RlbExldmVsLl9jb25maWcpXG5cdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0cmVkdXhNb2RlbE5hbWUgPSBsZXZlbE5hbWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlZHV4TW9kZWxOYW1lID0gYCR7cmVkdXhNb2RlbE5hbWV9LiR7bGV2ZWxOYW1lfWBcblx0XHRcdH1cblx0XHRcdGlmIChwYXRoUGFyYW1zLmxlbmd0aCAtIDEgPj0gcGF0aFBhcmFtSW5kZXggJiYgbW9kZWxDb25maWcuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHJlZHV4TW9kZWxOYW1lID0gYCR7cmVkdXhNb2RlbE5hbWV9LiR7cGF0aFBhcmFtc1twYXRoUGFyYW1JbmRleF19YFxuXHRcdFx0XHRwYXRoUGFyYW1JbmRleCsrXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXHRyZXR1cm4gcmVkdXhNb2RlbE5hbWVcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsQ0FBQyxNQUFzQixRQUFRO0FBQ3RDLE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBQ2pDLFNBQVNDLG1CQUFtQixRQUFRLDRCQUE0QjtBQUVoRSxPQUFPLE1BQU1DLDhCQUE4QixHQUFHQSxDQUFDQyxnQkFBb0MsRUFBRUMsU0FBaUIsS0FBSztFQUMxRyxNQUFNQyxpQkFBaUIsR0FBR0wsU0FBUyxDQUFDTSxRQUFRLENBQUNGLFNBQVMsQ0FBQztFQUN2RCxNQUFNRyxFQUFFLEdBQUdKLGdCQUFnQixDQUFDLEdBQUdFLGlCQUFpQixJQUFJLENBQXVCO0VBQzNFLElBQUksQ0FBQ0UsRUFBRSxJQUFJQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0YsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM3QixPQUFPQSxFQUFFO0VBQ1Y7RUFDQSxPQUFPRyxRQUFRLENBQUNILEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE9BQU8sTUFBTUksaUNBQWlDLEdBQUdBLENBQUNSLGdCQUFvQyxFQUFFQyxTQUFpQixLQUFLO0VBQzdHLE1BQU1RLFVBQVUsR0FBR1IsU0FBUyxDQUFDUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxNQUFhLEVBQUVDLFNBQVMsS0FBSztJQUM1RSxNQUFN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
|
package/lib/utils/search.js
CHANGED
|
@@ -1,93 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const getKeywordsList = (keywords) => {
|
|
9
|
-
if (!keywords)
|
|
10
|
-
return [];
|
|
11
|
-
return keywords
|
|
12
|
-
.trim()
|
|
13
|
-
.toLowerCase()
|
|
14
|
-
.split(' ')
|
|
15
|
-
.filter(k => !!k);
|
|
1
|
+
import { GROUP_MANAGE_TABLE_TAB, MANAGE_TABLE_TAB } from '../constants/table';
|
|
2
|
+
import { getLocalMomentFromUtc, isNowBeforeDate } from './date';
|
|
3
|
+
import { getEndDate, getStartDate } from './groupDates';
|
|
4
|
+
import { groupsAsAnythingButLearner } from './groupRoles';
|
|
5
|
+
export const getKeywordsList = keywords => {
|
|
6
|
+
if (!keywords) return [];
|
|
7
|
+
return keywords.trim().toLowerCase().split(' ').filter(k => !!k);
|
|
16
8
|
};
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
9
|
+
export const isEntityUserMatchedByKeyword = (owner, keyword) => owner.id.toLowerCase().includes(keyword) || !!owner.firstName?.toLowerCase().includes(keyword) || !!owner.lastName?.toString().toLowerCase().includes(keyword) || !!owner.email?.toString().toLowerCase().includes(keyword) || !!owner.uid?.toString().toLowerCase().includes(keyword);
|
|
10
|
+
export const isEntityMatchedByKeyword = (entity, keyword) => entity.id.toString().toLowerCase().includes(keyword) || entity.name.toLowerCase().includes(keyword) || entity.owners.some(owner => isEntityUserMatchedByKeyword(owner, keyword));
|
|
11
|
+
export const isEntityMatchedByKeywords = (entity, keywordsList) => keywordsList.length === 0 || keywordsList.every(k => isEntityMatchedByKeyword(entity, k));
|
|
12
|
+
export const searchEntities = (entityArray, entityMatchFunction, readActivity, canReadAnyGlobally, keywords) => {
|
|
13
|
+
const keywordsList = getKeywordsList(keywords);
|
|
14
|
+
const filteredEntities = entityArray.reduce((acc, e) => {
|
|
15
|
+
// exclude if cannot read any entity and does not have the read activity
|
|
16
|
+
if (!canReadAnyGlobally && !e.activities.includes(readActivity)) return acc;
|
|
17
|
+
// exclude if does not match, if any
|
|
18
|
+
if (!entityMatchFunction(e, keywordsList)) return acc;
|
|
19
|
+
// add entity to the corresponding tab filtered array
|
|
20
|
+
const tab = e.isDeleted ? MANAGE_TABLE_TAB.DELETED : MANAGE_TABLE_TAB.AVAILABLE;
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
22
|
+
const tabArray = acc[tab] ?? [];
|
|
23
|
+
tabArray.push(e);
|
|
24
|
+
acc[tab] = tabArray;
|
|
25
|
+
return acc;
|
|
26
|
+
}, {
|
|
27
|
+
[MANAGE_TABLE_TAB.AVAILABLE]: [],
|
|
28
|
+
[MANAGE_TABLE_TAB.DELETED]: []
|
|
29
|
+
});
|
|
30
|
+
return filteredEntities;
|
|
25
31
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
entity.owners.some(owner => (0, exports.isEntityUserMatchedByKeyword)(owner, keyword));
|
|
30
|
-
exports.isEntityMatchedByKeyword = isEntityMatchedByKeyword;
|
|
31
|
-
const isEntityMatchedByKeywords = (entity, keywordsList) => keywordsList.length === 0 || keywordsList.every(k => (0, exports.isEntityMatchedByKeyword)(entity, k));
|
|
32
|
-
exports.isEntityMatchedByKeywords = isEntityMatchedByKeywords;
|
|
33
|
-
const searchEntities = (entityArray, entityMatchFunction, readActivity, canReadAnyGlobally, keywords) => {
|
|
34
|
-
const keywordsList = (0, exports.getKeywordsList)(keywords);
|
|
35
|
-
const filteredEntities = entityArray.reduce((acc, e) => {
|
|
36
|
-
var _a;
|
|
37
|
-
// exclude if cannot read any entity and does not have the read activity
|
|
38
|
-
if (!canReadAnyGlobally && !e.activities.includes(readActivity))
|
|
39
|
-
return acc;
|
|
40
|
-
// exclude if does not match, if any
|
|
41
|
-
if (!entityMatchFunction(e, keywordsList))
|
|
42
|
-
return acc;
|
|
43
|
-
// add entity to the corresponding tab filtered array
|
|
44
|
-
const tab = e.isDeleted ? table_1.MANAGE_TABLE_TAB.DELETED : table_1.MANAGE_TABLE_TAB.AVAILABLE;
|
|
45
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
46
|
-
const tabArray = (_a = acc[tab]) !== null && _a !== void 0 ? _a : [];
|
|
47
|
-
tabArray.push(e);
|
|
48
|
-
acc[tab] = tabArray;
|
|
49
|
-
return acc;
|
|
50
|
-
}, { [table_1.MANAGE_TABLE_TAB.AVAILABLE]: [], [table_1.MANAGE_TABLE_TAB.DELETED]: [] });
|
|
51
|
-
return filteredEntities;
|
|
52
|
-
};
|
|
53
|
-
exports.searchEntities = searchEntities;
|
|
32
|
+
|
|
33
|
+
//#region Groups
|
|
34
|
+
|
|
54
35
|
const getGroupTab = (group, endDate) => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return table_1.GROUP_MANAGE_TABLE_TAB.PAST;
|
|
36
|
+
if (group.isDeleted) {
|
|
37
|
+
return GROUP_MANAGE_TABLE_TAB.DELETED;
|
|
38
|
+
} else if (!!group.id && isNowBeforeDate(endDate)) {
|
|
39
|
+
return GROUP_MANAGE_TABLE_TAB.CURRENT;
|
|
40
|
+
}
|
|
41
|
+
return GROUP_MANAGE_TABLE_TAB.PAST;
|
|
62
42
|
};
|
|
63
|
-
const searchGroups =
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
43
|
+
export const searchGroups = _ref => {
|
|
44
|
+
let {
|
|
45
|
+
groups,
|
|
46
|
+
modelArray: groupsArray,
|
|
47
|
+
externalTerms,
|
|
48
|
+
canReadyAnyGlobally,
|
|
49
|
+
keywords,
|
|
50
|
+
dateString
|
|
51
|
+
} = _ref;
|
|
52
|
+
const keywordsList = getKeywordsList(keywords);
|
|
53
|
+
const visibleGroups = canReadyAnyGlobally ? groupsArray : groupsAsAnythingButLearner(groups);
|
|
54
|
+
const filteredGroups = visibleGroups.reduce((acc, g) => {
|
|
55
|
+
// exclude if does not match keywords, if any
|
|
56
|
+
if (!isEntityMatchedByKeywords(g, keywordsList)) return acc;
|
|
57
|
+
const startDate = getStartDate(externalTerms, g);
|
|
58
|
+
const endDate = getEndDate(externalTerms, g);
|
|
59
|
+
// exclude if search dateString is not between group start and end dates
|
|
60
|
+
if (!!dateString && (getLocalMomentFromUtc(dateString) < getLocalMomentFromUtc(startDate) || getLocalMomentFromUtc(dateString) > getLocalMomentFromUtc(endDate))) {
|
|
61
|
+
return acc;
|
|
62
|
+
}
|
|
63
|
+
const tab = getGroupTab(g, endDate);
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
65
|
+
const tabArray = acc[tab] ?? [];
|
|
66
|
+
tabArray.push(g);
|
|
67
|
+
acc[tab] = tabArray;
|
|
68
|
+
return acc;
|
|
69
|
+
}, {
|
|
70
|
+
[GROUP_MANAGE_TABLE_TAB.CURRENT]: [],
|
|
71
|
+
[GROUP_MANAGE_TABLE_TAB.PAST]: [],
|
|
72
|
+
[GROUP_MANAGE_TABLE_TAB.DELETED]: []
|
|
73
|
+
});
|
|
74
|
+
return filteredGroups;
|
|
91
75
|
};
|
|
92
|
-
|
|
76
|
+
|
|
93
77
|
//#endregion Groups
|
|
78
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHUk9VUF9NQU5BR0VfVEFCTEVfVEFCIiwiTUFOQUdFX1RBQkxFX1RBQiIsImdldExvY2FsTW9tZW50RnJvbVV0YyIsImlzTm93QmVmb3JlRGF0ZSIsImdldEVuZERhdGUiLCJnZXRTdGFydERhdGUiLCJncm91cHNBc0FueXRoaW5nQnV0TGVhcm5lciIsImdldEtleXdvcmRzTGlzdCIsImtleXdvcmRzIiwidHJpbSIsInRvTG93ZXJDYXNlIiwic3BsaXQiLCJmaWx0ZXIiLCJrIiwiaXNFbnRpdHlVc2VyTWF0Y2hlZEJ5S2V5d29yZCIsIm93bmVyIiwia2V5d29yZCIsImlkIiwiaW5jbHVkZXMiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsInRvU3RyaW5nIiwiZW1haWwiLCJ1aWQiLCJpc0VudGl0eU1hdGNoZWRCeUtleXdvcmQiLCJlbnRpdHkiLCJuYW1lIiwib3duZXJzIiwic29tZSIsImlzRW50aXR5TWF0Y2hlZEJ5S2V5d29yZHMiLCJrZXl3b3Jkc0xpc3QiLCJsZW5ndGgiLCJldmVyeSIsInNlYXJjaEVudGl0aWVzIiwiZW50aXR5QXJyYXkiLCJlbnRpdHlNYXRjaEZ1bmN0aW9uIiwicmVhZEFjdGl2aXR5IiwiY2FuUmVhZEFueUdsb2JhbGx5IiwiZmlsdGVyZWRFbnRpdGllcyIsInJlZHVjZSIsImFjYyIsImUiLCJhY3Rpdml0aWVzIiwidGFiIiwiaXNEZWxldGVkIiwiREVMRVRFRCIsIkFWQUlMQUJMRSIsInRhYkFycmF5IiwicHVzaCIsImdldEdyb3VwVGFiIiwiZ3JvdXAiLCJlbmREYXRlIiwiQ1VSUkVOVCIsIlBBU1QiLCJzZWFyY2hHcm91cHMiLCJfcmVmIiwiZ3JvdXBzIiwibW9kZWxBcnJheSIsImdyb3Vwc0FycmF5IiwiZXh0ZXJuYWxUZXJtcyIsImNhblJlYWR5QW55R2xvYmFsbHkiLCJkYXRlU3RyaW5nIiwidmlzaWJsZUdyb3VwcyIsImZpbHRlcmVkR3JvdXBzIiwiZyIsInN0YXJ0RGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZWFyY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR1JPVVBfTUFOQUdFX1RBQkxFX1RBQiwgTUFOQUdFX1RBQkxFX1RBQiB9IGZyb20gJy4uL2NvbnN0YW50cy90YWJsZSdcbmltcG9ydCB7IEVudGl0eVVzZXIsIEV4dGVybmFsVGVybSwgR3JvdXAsIE1vZGVsQ29sbGVjdGlvbiB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TG9jYWxNb21lbnRGcm9tVXRjLCBpc05vd0JlZm9yZURhdGUgfSBmcm9tICcuL2RhdGUnXG5pbXBvcnQgeyBnZXRFbmREYXRlLCBnZXRTdGFydERhdGUgfSBmcm9tICcuL2dyb3VwRGF0ZXMnXG5pbXBvcnQgeyBncm91cHNBc0FueXRoaW5nQnV0TGVhcm5lciB9IGZyb20gJy4vZ3JvdXBSb2xlcydcblxuZXhwb3J0IGNvbnN0IGdldEtleXdvcmRzTGlzdCA9IChrZXl3b3Jkczogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG5cdGlmICgha2V5d29yZHMpIHJldHVybiBbXVxuXHRyZXR1cm4ga2V5d29yZHNcblx0XHQudHJpbSgpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQuc3BsaXQoJyAnKVxuXHRcdC5maWx0ZXIoayA9PiAhIWspXG59XG5cbmV4cG9ydCBjb25zdCBpc0VudGl0eVVzZXJNYXRjaGVkQnlLZXl3b3JkID0gKG93bmVyOiBFbnRpdHlVc2VyLCBrZXl3b3JkOiBzdHJpbmcpID0+XG5cdG93bmVyLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZCkgfHxcblx0ISFvd25lci5maXJzdE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZCkgfHxcblx0ISFvd25lci5sYXN0TmFtZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpIHx8XG5cdCEhb3duZXIuZW1haWw/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrZXl3b3JkKSB8fFxuXHQhIW93bmVyLnVpZD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG5cbmV4cG9ydCBjb25zdCBpc0VudGl0eU1hdGNoZWRCeUtleXdvcmQgPSAoZW50aXR5OiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgb3duZXJzOiBFbnRpdHlVc2VyW10gfSwga2V5d29yZDogc3RyaW5nKSA9PlxuXHRlbnRpdHkuaWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpIHx8XG5cdGVudGl0eS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZCkgfHxcblx0ZW50aXR5Lm93bmVycy5zb21lKG93bmVyID0+IGlzRW50aXR5VXNlck1hdGNoZWRCeUtleXdvcmQob3duZXIsIGtleXdvcmQpKVxuXG5leHBvcnQgY29uc3QgaXNFbnRpdHlNYXRjaGVkQnlLZXl3b3JkcyA9IChcblx0ZW50aXR5OiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgb3duZXJzOiBFbnRpdHlVc2VyW10gfSxcblx0a2V5d29yZHNMaXN0OiBzdHJpbmdbXVxuKSA9PiBrZXl3b3Jkc0xpc3QubGVuZ3RoID09PSAwIHx8IGtleXdvcmRzTGlzdC5ldmVyeShrID0+IGlzRW50aXR5TWF0Y2hlZEJ5S2V5d29yZChlbnRpdHksIGspKVxuXG5leHBvcnQgY29uc3Qgc2VhcmNoRW50aXRpZXMgPSA8VCBleHRlbmRzIHsgaXNEZWxldGVkOiBib29sZWFuOyBhY3Rpdml0aWVzOiBzdHJpbmdbXSB9Pihcblx0ZW50aXR5QXJyYXk6IFRbXSxcblx0ZW50aXR5TWF0Y2hGdW5jdGlvbjogKGVudGl0eTogVCwga2V5d29yZHNMaXN0OiBzdHJpbmdbXSkgPT4gYm9vbGVhbixcblx0cmVhZEFjdGl2aXR5OiBzdHJpbmcsXG5cdGNhblJlYWRBbnlHbG9iYWxseT86IGJvb2xlYW4sXG5cdGtleXdvcmRzPzogc3RyaW5nXG4pID0+IHtcblx0Y29uc3Qga2V5d29yZHNMaXN0ID0gZ2V0S2V5d29yZHNMaXN0KGtleXdvcmRzKVxuXHRjb25zdCBmaWx0ZXJlZEVudGl0aWVzID0gZW50aXR5QXJyYXkucmVkdWNlPFJlY29yZDxudW1iZXIsIFRbXT4+KFxuXHRcdChhY2MsIGUpID0+IHtcblx0XHRcdC8vIGV4Y2x1ZGUgaWYgY2Fubm90IHJlYWQgYW55IGVudGl0eSBhbmQgZG9lcyBub3QgaGF2ZSB0aGUgcmVhZCBhY3Rpdml0eVxuXHRcdFx0aWYgKCFjYW5SZWFkQW55R2xvYmFsbHkgJiYgIWUuYWN0aXZpdGllcy5pbmNsdWRlcyhyZWFkQWN0aXZpdHkpKSByZXR1cm4gYWNjXG5cdFx0XHQvLyBleGNsdWRlIGlmIGRvZXMgbm90IG1hdGNoLCBpZiBhbnlcblx0XHRcdGlmICghZW50aXR5TWF0Y2hGdW5jdGlvbihlLCBrZXl3b3Jkc0xpc3QpKSByZXR1cm4gYWNjXG5cdFx0XHQvLyBhZGQgZW50aXR5IHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhYiBmaWx0ZXJlZCBhcnJheVxuXHRcdFx0Y29uc3QgdGFiID0gZS5pc0RlbGV0ZWQgPyBNQU5BR0VfVEFCTEVfVEFCLkRFTEVURUQgOiBNQU5BR0VfVEFCTEVfVEFCLkFWQUlMQUJMRVxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cblx0XHRcdGNvbnN0IHRhYkFycmF5OiBUW10gPSBhY2NbdGFiXSA/PyBbXVxuXHRcdFx0dGFiQXJyYXkucHVzaChlKVxuXHRcdFx0YWNjW3RhYl0gPSB0YWJBcnJheVxuXHRcdFx0cmV0dXJuIGFjY1xuXHRcdH0sXG5cdFx0eyBbTUFOQUdFX1RBQkxFX1RBQi5BVkFJTEFCTEVdOiBbXSwgW01BTkFHRV9UQUJMRV9UQUIuREVMRVRFRF06IFtdIH1cblx0KVxuXHRyZXR1cm4gZmlsdGVyZWRFbnRpdGllc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE1vZGVsQXJyYXlQYXJhbXM8VE1vZGVsPiB7XG5cdG1vZGVsQXJyYXk6IFRNb2RlbFtdXG5cdGNhblJlYWR5QW55R2xvYmFsbHk/OiBib29sZWFuXG5cdGtleXdvcmRzPzogc3RyaW5nXG59XG5cbi8vI3JlZ2lvbiBHcm91cHNcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hHcm91cHNQYXJhbXMgZXh0ZW5kcyBTZWFyY2hNb2RlbEFycmF5UGFyYW1zPEdyb3VwPiB7XG5cdGdyb3VwczogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPlxuXHRleHRlcm5hbFRlcm1zOiBNb2RlbENvbGxlY3Rpb248RXh0ZXJuYWxUZXJtPlxuXHRkYXRlU3RyaW5nPzogc3RyaW5nXG59XG5cbmNvbnN0IGdldEdyb3VwVGFiID0gKGdyb3VwOiBHcm91cCwgZW5kRGF0ZTogc3RyaW5nKSA9PiB7XG5cdGlmIChncm91cC5pc0RlbGV0ZWQpIHtcblx0XHRyZXR1cm4gR1JPVVBfTUFOQUdFX1RBQkxFX1RBQi5ERUxFVEVEXG5cdH0gZWxzZSBpZiAoISFncm91cC5pZCAmJiBpc05vd0JlZm9yZURhdGUoZW5kRGF0ZSkpIHtcblx0XHRyZXR1cm4gR1JPVVBfTUFOQUdFX1RBQkxFX1RBQi5DVVJSRU5UXG5cdH1cblx0cmV0dXJuIEdST1VQX01BTkFHRV9UQUJMRV9UQUIuUEFTVFxufVxuXG5leHBvcnQgY29uc3Qgc2VhcmNoR3JvdXBzID0gKHtcblx0Z3JvdXBzLFxuXHRtb2RlbEFycmF5OiBncm91cHNBcnJheSxcblx0ZXh0ZXJuYWxUZXJtcyxcblx0Y2FuUmVhZHlBbnlHbG9iYWxseSxcblx0a2V5d29yZHMsXG5cdGRhdGVTdHJpbmdcbn06IFNlYXJjaEdyb3Vwc1BhcmFtcykgPT4ge1xuXHRjb25zdCBrZXl3b3Jkc0xpc3QgPSBnZXRLZXl3b3Jkc0xpc3Qoa2V5d29yZHMpXG5cdGNvbnN0IHZpc2libGVHcm91cHMgPSBjYW5SZWFkeUFueUdsb2JhbGx5ID8gZ3JvdXBzQXJyYXkgOiBncm91cHNBc0FueXRoaW5nQnV0TGVhcm5lcihncm91cHMpXG5cdGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gdmlzaWJsZUdyb3Vwcy5yZWR1Y2U8UmVjb3JkPG51bWJlciwgR3JvdXBbXT4+KFxuXHRcdChhY2MsIGcpID0+IHtcblx0XHRcdC8vIGV4Y2x1ZGUgaWYgZG9lcyBub3QgbWF0Y2gga2V5d29yZHMsIGlmIGFueVxuXHRcdFx0aWYgKCFpc0VudGl0eU1hdGNoZWRCeUtleXdvcmRzKGcsIGtleXdvcmRzTGlzdCkpIHJldHVybiBhY2Ncblx0XHRcdGNvbnN0IHN0YXJ0RGF0ZSA9IGdldFN0YXJ0RGF0ZShleHRlcm5hbFRlcm1zLCBnKVxuXHRcdFx0Y29uc3QgZW5kRGF0ZSA9IGdldEVuZERhdGUoZXh0ZXJuYWxUZXJtcywgZylcblx0XHRcdC8vIGV4Y2x1ZGUgaWYgc2VhcmNoIGRhdGVTdHJpbmcgaXMgbm90IGJldHdlZW4gZ3JvdXAgc3RhcnQgYW5kIGVuZCBkYXRlc1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhIWRhdGVTdHJpbmcgJiZcblx0XHRcdFx0KGdldExvY2FsTW9tZW50RnJvbVV0YyhkYXRlU3RyaW5nKSA8IGdldExvY2FsTW9tZW50RnJvbVV0YyhzdGFydERhdGUpIHx8XG5cdFx0XHRcdFx0Z2V0TG9jYWxNb21lbnRGcm9tVXRjKGRhdGVTdHJpbmcpID4gZ2V0TG9jYWxNb21lbnRGcm9tVXRjKGVuZERhdGUpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBhY2Ncblx0XHRcdH1cblx0XHRcdGNvbnN0IHRhYiA9IGdldEdyb3VwVGFiKGcsIGVuZERhdGUpXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuXHRcdFx0Y29uc3QgdGFiQXJyYXk6IEdyb3VwW10gPSBhY2NbdGFiXSA/PyBbXVxuXHRcdFx0dGFiQXJyYXkucHVzaChnKVxuXHRcdFx0YWNjW3RhYl0gPSB0YWJBcnJheVxuXHRcdFx0cmV0dXJuIGFjY1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0W0dST1VQX01BTkFHRV9UQUJMRV9UQUIuQ1VSUkVOVF06IFtdLFxuXHRcdFx0W0dST1VQX01BTkFHRV9UQUJMRV9UQUIuUEFTVF06IFtdLFxuXHRcdFx0W0dST1VQX01BTkFHRV9UQUJMRV9UQUIuREVMRVRFRF06IFtdXG5cdFx0fVxuXHQpXG5cdHJldHVybiBmaWx0ZXJlZEdyb3Vwc1xufVxuXG4vLyNlbmRyZWdpb24gR3JvdXBzXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHNCQUFzQixFQUFFQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFFN0UsU0FBU0MscUJBQXFCLEVBQUVDLGVBQWUsUUFBUSxRQUFRO0FBQy9ELFNBQVNDLFVBQVUsRUFBRUMsWUFBWSxRQUFRLGNBQWM7QUFDdkQsU0FBU0MsMEJBQTBCLFFBQVEsY0FBYztBQUV6RCxPQUFPLE1BQU1DLGVBQWUsR0FBSUMsUUFBNEIsSUFBSztFQUNoRSxJQUFJLENBQUNBLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDeEIsT0FBT0EsUUFBUSxDQUNiQyxJQUFJLENBQUMsQ0FBQyxDQUNOQyxXQUFXLENBQUMsQ0FBQyxDQUNiQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1ZDLE1BQU0sQ0FBQ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxPQUFPLE1BQU1DLDRCQUE0QixHQUFHQSxDQUFDQyxLQUFpQixFQUFFQyxPQUFlLEtBQzlFRCxLQUFLLENBQUNFLEVBQUUsQ0FBQ1AsV0FBVyxDQUFDLENBQUMsQ0FBQ1EsUUFBUSxDQUFDRixPQUFPLENBQUMsSUFDeEMsQ0FBQyxDQUFDRCxLQUFLLENBQUNJLFNBQVMsRUFBRVQsV0FBVyxDQUFDLENBQUMsQ0FBQ1EsUUFBUSxDQUFDRixPQUFPLENBQUMsSUFDbEQsQ0FBQyxDQUFDRCxLQUFLLENBQUNLLFFBQVEsRUFBRUMsUUFBUSxDQUFDLENBQUMsQ0FBQ1gsV0FBVyxDQUFDLENBQUMsQ0FBQ1EsUUFBUSxDQUFDRixPQUFPLENBQUMsSUFDNUQsQ0FBQyxDQUFDRCxLQUFLLENBQUNPLEtBQUssRUFBRUQsUUFBUSxDQUFDLENBQUMsQ0FBQ1gsV0FBVyxDQUFDLENB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
|
package/lib/utils/shard.js
CHANGED
|
@@ -1,45 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
8
|
-
const configuration_1 = require("../constants/configuration");
|
|
9
|
-
const shard_1 = require("../constants/shard");
|
|
10
|
-
const windowService_1 = require("../services/windowService");
|
|
11
|
-
function isPurdueShard() {
|
|
12
|
-
return getShardKey() === shard_1.SHARD.PURDUE;
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { getAppConfig } from '../constants/configuration';
|
|
3
|
+
import { SHARD } from '../constants/shard';
|
|
4
|
+
import { windowService } from '../services/windowService';
|
|
5
|
+
export function isPurdueShard() {
|
|
6
|
+
return getShardKey() === SHARD.PURDUE;
|
|
13
7
|
}
|
|
14
|
-
function isDemoShard() {
|
|
15
|
-
|
|
8
|
+
export function isDemoShard() {
|
|
9
|
+
return getShardKey() === SHARD.DEMO;
|
|
16
10
|
}
|
|
17
|
-
function getShardKey(host, localhostShardKey) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (shardKey.indexOf('.dev') === shardKey.length - 4) {
|
|
42
|
-
shardKey = shardKey.replace('.dev', '');
|
|
43
|
-
}
|
|
44
|
-
return shardKey;
|
|
11
|
+
export function getShardKey(host, localhostShardKey) {
|
|
12
|
+
const appConfig = getAppConfig();
|
|
13
|
+
const location = windowService.getLocation();
|
|
14
|
+
const finalHost = host || location.host;
|
|
15
|
+
const finalLocalhostShardKey = localhostShardKey || appConfig.LOCALHOST_SHARD_KEY;
|
|
16
|
+
const rootDomain = appConfig.ROOT_DOMAIN;
|
|
17
|
+
if (_.startsWith(finalHost, 'localhost') && !!finalLocalhostShardKey) {
|
|
18
|
+
return finalLocalhostShardKey;
|
|
19
|
+
}
|
|
20
|
+
if (_.startsWith(finalHost, 'localhost') || _.includes(finalHost, 'azurewebsites.net') || _.includes(finalHost, 'web.core.windows.net') || _.includes(finalHost, 'azureedge.net') || _.includes(finalHost, 'z01.azurefd.net') || _.includes(finalHost, 'ngrok.io')) {
|
|
21
|
+
return SHARD.PURDUE;
|
|
22
|
+
}
|
|
23
|
+
const urlParts = finalHost.split('.');
|
|
24
|
+
if (urlParts[0] === 'www' || urlParts[0] === 'dev' || !!rootDomain && urlParts[0] === rootDomain.split('.')[0]) {
|
|
25
|
+
return SHARD.ROOT;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// get subdomain by removing root domain parts
|
|
29
|
+
let shardKey = finalHost.replace(`.${rootDomain}`, '');
|
|
30
|
+
// exclude `.dev` from shardKey
|
|
31
|
+
if (shardKey.indexOf('.dev') === shardKey.length - 4) {
|
|
32
|
+
shardKey = shardKey.replace('.dev', '');
|
|
33
|
+
}
|
|
34
|
+
return shardKey;
|
|
45
35
|
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfIiwiZ2V0QXBwQ29uZmlnIiwiU0hBUkQiLCJ3aW5kb3dTZXJ2aWNlIiwiaXNQdXJkdWVTaGFyZCIsImdldFNoYXJkS2V5IiwiUFVSRFVFIiwiaXNEZW1vU2hhcmQiLCJERU1PIiwiaG9zdCIsImxvY2FsaG9zdFNoYXJkS2V5IiwiYXBwQ29uZmlnIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImZpbmFsSG9zdCIsImZpbmFsTG9jYWxob3N0U2hhcmRLZXkiLCJMT0NBTEhPU1RfU0hBUkRfS0VZIiwicm9vdERvbWFpbiIsIlJPT1RfRE9NQUlOIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwidXJsUGFydHMiLCJzcGxpdCIsIlJPT1QiLCJzaGFyZEtleSIsInJlcGxhY2UiLCJpbmRleE9mIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NoYXJkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IGdldEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWd1cmF0aW9uJ1xuaW1wb3J0IHsgU0hBUkQgfSBmcm9tICcuLi9jb25zdGFudHMvc2hhcmQnXG5pbXBvcnQgeyB3aW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvd2luZG93U2VydmljZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHVyZHVlU2hhcmQoKSB7XG5cdHJldHVybiBnZXRTaGFyZEtleSgpID09PSBTSEFSRC5QVVJEVUVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVtb1NoYXJkKCkge1xuXHRyZXR1cm4gZ2V0U2hhcmRLZXkoKSA9PT0gU0hBUkQuREVNT1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcmRLZXkoaG9zdD86IHN0cmluZywgbG9jYWxob3N0U2hhcmRLZXk/OiBzdHJpbmcpIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0Y29uc3QgbG9jYXRpb24gPSB3aW5kb3dTZXJ2aWNlLmdldExvY2F0aW9uKClcblx0Y29uc3QgZmluYWxIb3N0ID0gaG9zdCB8fCBsb2NhdGlvbi5ob3N0XG5cdGNvbnN0IGZpbmFsTG9jYWxob3N0U2hhcmRLZXkgPSBsb2NhbGhvc3RTaGFyZEtleSB8fCBhcHBDb25maWcuTE9DQUxIT1NUX1NIQVJEX0tFWVxuXHRjb25zdCByb290RG9tYWluID0gYXBwQ29uZmlnLlJPT1RfRE9NQUlOXG5cblx0aWYgKF8uc3RhcnRzV2l0aChmaW5hbEhvc3QsICdsb2NhbGhvc3QnKSAmJiAhIWZpbmFsTG9jYWxob3N0U2hhcmRLZXkpIHtcblx0XHRyZXR1cm4gZmluYWxMb2NhbGhvc3RTaGFyZEtleVxuXHR9XG5cblx0aWYgKFxuXHRcdF8uc3RhcnRzV2l0aChmaW5hbEhvc3QsICdsb2NhbGhvc3QnKSB8fFxuXHRcdF8uaW5jbHVkZXMoZmluYWxIb3N0LCAnYXp1cmV3ZWJzaXRlcy5uZXQnKSB8fFxuXHRcdF8uaW5jbHVkZXMoZmluYWxIb3N0LCAnd2ViLmNvcmUud2luZG93cy5uZXQnKSB8fFxuXHRcdF8uaW5jbHVkZXMoZmluYWxIb3N0LCAnYXp1cmVlZGdlLm5ldCcpIHx8XG5cdFx0Xy5pbmNsdWRlcyhmaW5hbEhvc3QsICd6MDEuYXp1cmVmZC5uZXQnKSB8fFxuXHRcdF8uaW5jbHVkZXMoZmluYWxIb3N0LCAnbmdyb2suaW8nKVxuXHQpIHtcblx0XHRyZXR1cm4gU0hBUkQuUFVSRFVFXG5cdH1cblxuXHRjb25zdCB1cmxQYXJ0cyA9IGZpbmFsSG9zdC5zcGxpdCgnLicpXG5cdGlmICh1cmxQYXJ0c1swXSA9PT0gJ3d3dycgfHwgdXJsUGFydHNbMF0gPT09ICdkZXYnIHx8ICghIXJvb3REb21haW4gJiYgdXJsUGFydHNbMF0gPT09IHJvb3REb21haW4uc3BsaXQoJy4nKVswXSkpIHtcblx0XHRyZXR1cm4gU0hBUkQuUk9PVFxuXHR9XG5cblx0Ly8gZ2V0IHN1YmRvbWFpbiBieSByZW1vdmluZyByb290IGRvbWFpbiBwYXJ0c1xuXHRsZXQgc2hhcmRLZXkgPSBmaW5hbEhvc3QucmVwbGFjZShgLiR7cm9vdERvbWFpbn1gLCAnJylcblx0Ly8gZXhjbHVkZSBgLmRldmAgZnJvbSBzaGFyZEtleVxuXHRpZiAoc2hhcmRLZXkuaW5kZXhPZignLmRldicpID09PSBzaGFyZEtleS5sZW5ndGggLSA0KSB7XG5cdFx0c2hhcmRLZXkgPSBzaGFyZEtleS5yZXBsYWNlKCcuZGV2JywgJycpXG5cdH1cblx0cmV0dXJuIHNoYXJkS2V5XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLENBQUMsTUFBTSxRQUFRO0FBQ3RCLFNBQVNDLFlBQVksUUFBUSw0QkFBNEI7QUFDekQsU0FBU0MsS0FBSyxRQUFRLG9CQUFvQjtBQUMxQyxTQUFTQyxhQUFhLFFBQVEsMkJBQTJCO0FBRXpELE9BQU8sU0FBU0MsYUFBYUEsQ0FBQSxFQUFHO0VBQy9CLE9BQU9DLFdBQVcsQ0FBQyxDQUFDLEtBQUtILEtBQUssQ0FBQ0ksTUFBTTtBQUN0QztBQUVBLE9BQU8sU0FBU0MsV0FBV0EsQ0FBQSxFQUFHO0VBQzdCLE9BQU9GLFdBQVcsQ0FBQyxDQUFDLEtBQUtILEtBQUssQ0FBQ00sSUFBSTtBQUNwQztBQUVBLE9BQU8sU0FBU0gsV0FBV0EsQ0FBQ0ksSUFBYSxFQUFFQyxpQkFBMEIsRUFBRTtFQUN0RSxNQUFNQyxTQUFTLEdBQUdWLFlBQVksQ0FBQyxDQUFDO0VBQ2hDLE1BQU1XLFFBQVEsR0FBR1QsYUFBYSxDQUFDVSxXQUFXLENBQUMsQ0FBQztFQUM1QyxNQUFNQyxTQUFTLEdBQUdMLElBQUksSUFBSUcsUUFBUSxDQUFDSCxJQUFJO0VBQ3ZDLE1BQU1NLHNCQUFzQixHQUFHTCxpQkFBaUIsSUFBSUMsU0FBUyxDQUFDSyxtQkFBbUI7RUFDakYsTUFBTUMsVUFBVSxHQUFHTixTQUFTLENBQUNPLFdBQVc7RUFFeEMsSUFBSWxCLENBQUMsQ0FBQ21CLFVBQVUsQ0FBQ0wsU0FBUyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQ0Msc0JBQXNCLEVBQUU7SUFDckUsT0FBT0Esc0JBQXNCO0VBQzlCO0VBRUEsSUFDQ2YsQ0FBQyxDQUFDbUIsVUFBVSxDQUFDTCxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQ3BDZCxDQUFDLENBQUNvQixRQUFRLENBQUNOLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxJQUMxQ2QsQ0FBQyxDQUFDb0IsUUFBUSxDQUFDTixTQUFTLEVBQUUsc0JBQXNCLENBQUMsSUFDN0NkLENBQUMsQ0FBQ29CLFFBQVEsQ0FBQ04sU0FBUyxFQUFFLGVBQWUsQ0FBQyxJQUN0Q2QsQ0FBQyxDQUFDb0IsUUFBUSxDQUFDTixTQUFTLEVBQUUsaUJBQWlCLENBQUMsSUFDeENkLENBQUMsQ0FBQ29CLFFBQVEsQ0FBQ04sU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUNoQztJQUNELE9BQU9aLEtBQUssQ0FBQ0ksTUFBTTtFQUNwQjtFQUVBLE1BQU1lLFFBQVEsR0FBR1AsU0FBUyxDQUFDUSxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQ3JDLElBQUlELFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUlBLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUssQ0FBQyxDQUFDSixVQUFVLElBQUlJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBS0osVUFBVSxDQUFDSyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFFLEVBQUU7SUFDakgsT0FBT3BCLEtBQUssQ0FBQ3FCLElBQUk7RUFDbEI7O0VBRUE7RUFDQSxJQUFJQyxRQUFRLEdBQUdWLFNBQVMsQ0FBQ1csT0FBTyxDQUFDLElBQUlSLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUN0RDtFQUNBLElBQUlPLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLRixRQUFRLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckRILFFBQVEsR0FBR0EsUUFBUSxDQUFDQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUN4QztFQUNBLE9BQU9ELFFBQVE7QUFDaEIiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/utils/sort.js
CHANGED
|
@@ -1,65 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const sortByAttribute = (attributeName, shouldSortAscending = true) => (a, b) => {
|
|
1
|
+
export const sortByAttribute = function (attributeName) {
|
|
2
|
+
let shouldSortAscending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
3
|
+
return (a, b) => {
|
|
5
4
|
const attrA = a[attributeName] ? a[attributeName].toUpperCase() : '';
|
|
6
5
|
const attrB = b[attributeName] ? b[attributeName].toUpperCase() : '';
|
|
7
6
|
let sortResult = 0;
|
|
8
7
|
if (attrA === '') {
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
else if (attrA === attrB) {
|
|
15
|
-
return 0;
|
|
8
|
+
sortResult = 1;
|
|
9
|
+
} else if (attrB === '') {
|
|
10
|
+
sortResult = -1;
|
|
11
|
+
} else if (attrA === attrB) {
|
|
12
|
+
return 0;
|
|
16
13
|
}
|
|
17
14
|
if (attrA < attrB) {
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
sortResult = 1;
|
|
15
|
+
sortResult = -1;
|
|
16
|
+
} else if (attrA > attrB) {
|
|
17
|
+
sortResult = 1;
|
|
22
18
|
}
|
|
23
19
|
return shouldSortAscending ? sortResult : -1 * sortResult;
|
|
20
|
+
};
|
|
24
21
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (a[attribute] === b[attribute]) {
|
|
28
|
-
return 0;
|
|
29
|
-
}
|
|
30
|
-
if (a[attribute] > b[attribute]) {
|
|
31
|
-
return 1;
|
|
32
|
-
}
|
|
33
|
-
if (a[attribute] < b[attribute]) {
|
|
34
|
-
return -1;
|
|
35
|
-
}
|
|
22
|
+
export const sortByAttributeNumeric = attribute => (a, b) => {
|
|
23
|
+
if (a[attribute] === b[attribute]) {
|
|
36
24
|
return 0;
|
|
25
|
+
}
|
|
26
|
+
if (a[attribute] > b[attribute]) {
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
if (a[attribute] < b[attribute]) {
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
return 0;
|
|
37
33
|
};
|
|
38
|
-
|
|
34
|
+
|
|
39
35
|
// Requires at least last name or email address for each user
|
|
40
|
-
const sortByNames = (a, b) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
36
|
+
export const sortByNames = (a, b) => {
|
|
37
|
+
if (!a.lastName && !a.email || !b.lastName && !b.email) {
|
|
38
|
+
throw new Error('Last name or email required');
|
|
39
|
+
}
|
|
40
|
+
// (last name or email) => first name
|
|
41
|
+
const lastNameA = a.lastName ? a.lastName.toLowerCase() : a.email ? a.email : '';
|
|
42
|
+
const lastNameB = b.lastName ? b.lastName.toLowerCase() : b.email ? b.email : '';
|
|
43
|
+
if (lastNameA !== lastNameB) {
|
|
44
|
+
return lastNameA > lastNameB ? 1 : -1;
|
|
45
|
+
}
|
|
46
|
+
const firstNameA = a.firstName ? a.firstName.toLowerCase() : '';
|
|
47
|
+
const firstNameB = b.firstName ? b.firstName.toLowerCase() : '';
|
|
48
|
+
if (firstNameA !== firstNameB) {
|
|
49
|
+
return firstNameA > firstNameB ? 1 : -1;
|
|
50
|
+
}
|
|
51
|
+
return 0;
|
|
56
52
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
export const sortByNameNatural = (a, b) => {
|
|
54
|
+
return a.name.trim().localeCompare(b.name.trim(), undefined, {
|
|
55
|
+
numeric: true,
|
|
56
|
+
sensitivity: 'base'
|
|
57
|
+
});
|
|
60
58
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return array.slice().sort((0, exports.sortByAttribute)(attributeName, shouldSortAscending));
|
|
59
|
+
export const sort = (array, attributeName, shouldSortAscending) => {
|
|
60
|
+
return array.slice().sort(sortByAttribute(attributeName, shouldSortAscending));
|
|
64
61
|
};
|
|
65
|
-
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzb3J0QnlBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVOYW1lIiwic2hvdWxkU29ydEFzY2VuZGluZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImEiLCJiIiwiYXR0ckEiLCJ0b1VwcGVyQ2FzZSIsImF0dHJCIiwic29ydFJlc3VsdCIsInNvcnRCeUF0dHJpYnV0ZU51bWVyaWMiLCJhdHRyaWJ1dGUiLCJzb3J0QnlOYW1lcyIsImxhc3ROYW1lIiwiZW1haWwiLCJFcnJvciIsImxhc3ROYW1lQSIsInRvTG93ZXJDYXNlIiwibGFzdE5hbWVCIiwiZmlyc3ROYW1lQSIsImZpcnN0TmFtZSIsImZpcnN0TmFtZUIiLCJzb3J0QnlOYW1lTmF0dXJhbCIsIm5hbWUiLCJ0cmltIiwibG9jYWxlQ29tcGFyZSIsIm51bWVyaWMiLCJzZW5zaXRpdml0eSIsInNvcnQiLCJhcnJheSIsInNsaWNlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uYWxSZWNvcmQgfSBmcm9tICcuLi90eXBlcy9PcHRpb25hbFJlY29yZCdcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi90eXBlcy9Vc2VyJ1xuXG5leHBvcnQgY29uc3Qgc29ydEJ5QXR0cmlidXRlID1cblx0PEsgZXh0ZW5kcyBrZXlvZiBULCBUIGV4dGVuZHMgT3B0aW9uYWxSZWNvcmQ8Sywgc3RyaW5nPj4oYXR0cmlidXRlTmFtZTogSywgc2hvdWxkU29ydEFzY2VuZGluZyA9IHRydWUpID0+XG5cdChhOiBULCBiOiBUKSA9PiB7XG5cdFx0Y29uc3QgYXR0ckEgPSBhW2F0dHJpYnV0ZU5hbWVdID8gYVthdHRyaWJ1dGVOYW1lXS50b1VwcGVyQ2FzZSgpIDogJydcblx0XHRjb25zdCBhdHRyQiA9IGJbYXR0cmlidXRlTmFtZV0gPyBiW2F0dHJpYnV0ZU5hbWVdLnRvVXBwZXJDYXNlKCkgOiAnJ1xuXHRcdGxldCBzb3J0UmVzdWx0ID0gMFxuXHRcdGlmIChhdHRyQSA9PT0gJycpIHtcblx0XHRcdHNvcnRSZXN1bHQgPSAxXG5cdFx0fSBlbHNlIGlmIChhdHRyQiA9PT0gJycpIHtcblx0XHRcdHNvcnRSZXN1bHQgPSAtMVxuXHRcdH0gZWxzZSBpZiAoYXR0ckEgPT09IGF0dHJCKSB7XG5cdFx0XHRyZXR1cm4gMFxuXHRcdH1cblx0XHRpZiAoYXR0ckEgPCBhdHRyQikge1xuXHRcdFx0c29ydFJlc3VsdCA9IC0xXG5cdFx0fSBlbHNlIGlmIChhdHRyQSA+IGF0dHJCKSB7XG5cdFx0XHRzb3J0UmVzdWx0ID0gMVxuXHRcdH1cblx0XHRyZXR1cm4gc2hvdWxkU29ydEFzY2VuZGluZyA/IHNvcnRSZXN1bHQgOiAtMSAqIHNvcnRSZXN1bHRcblx0fVxuXG5leHBvcnQgY29uc3Qgc29ydEJ5QXR0cmlidXRlTnVtZXJpYyA9XG5cdDxUPihhdHRyaWJ1dGU6IGtleW9mIFQpID0+XG5cdChhOiBULCBiOiBUKSA9PiB7XG5cdFx0aWYgKGFbYXR0cmlidXRlXSA9PT0gYlthdHRyaWJ1dGVdKSB7XG5cdFx0XHRyZXR1cm4gMFxuXHRcdH1cblx0XHRpZiAoYVthdHRyaWJ1dGVdID4gYlthdHRyaWJ1dGVdKSB7XG5cdFx0XHRyZXR1cm4gMVxuXHRcdH1cblx0XHRpZiAoYVthdHRyaWJ1dGVdIDwgYlthdHRyaWJ1dGVdKSB7XG5cdFx0XHRyZXR1cm4gLTFcblx0XHR9XG5cdFx0cmV0dXJuIDBcblx0fVxuXG4vLyBSZXF1aXJlcyBhdCBsZWFzdCBsYXN0IG5hbWUgb3IgZW1haWwgYWRkcmVzcyBmb3IgZWFjaCB1c2VyXG5leHBvcnQgY29uc3Qgc29ydEJ5TmFtZXMgPSAoYTogVXNlciwgYjogVXNlcikgPT4ge1xuXHRpZiAoKCFhLmxhc3ROYW1lICYmICFhLmVtYWlsKSB8fCAoIWIubGFzdE5hbWUgJiYgIWIuZW1haWwpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdMYXN0IG5hbWUgb3IgZW1haWwgcmVxdWlyZWQnKVxuXHR9XG5cdC8vIChsYXN0IG5hbWUgb3IgZW1haWwpID0+IGZpcnN0IG5hbWVcblx0Y29uc3QgbGFzdE5hbWVBID0gYS5sYXN0TmFtZSA/IGEubGFzdE5hbWUudG9Mb3dlckNhc2UoKSA6IGEuZW1haWwgPyBhLmVtYWlsIDogJydcblx0Y29uc3QgbGFzdE5hbWVCID0gYi5sYXN0TmFtZSA/IGIubGFzdE5hbWUudG9Mb3dlckNhc2UoKSA6IGIuZW1haWwgPyBiLmVtYWlsIDogJydcblx0aWYgKGxhc3ROYW1lQSAhPT0gbGFzdE5hbWVCKSB7XG5cdFx0cmV0dXJuIGxhc3ROYW1lQSA+IGxhc3ROYW1lQiA/IDEgOiAtMVxuXHR9XG5cdGNvbnN0IGZpcnN0TmFtZUEgPSBhLmZpcnN0TmFtZSA/IGEuZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCkgOiAnJ1xuXHRjb25zdCBmaXJzdE5hbWVCID0gYi5maXJzdE5hbWUgPyBiLmZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpIDogJydcblx0aWYgKGZpcnN0TmFtZUEgIT09IGZpcnN0TmFtZUIpIHtcblx0XHRyZXR1cm4gZmlyc3ROYW1lQSA+IGZpcnN0TmFtZUIgPyAxIDogLTFcblx0fVxuXHRyZXR1cm4gMFxufVxuXG5leHBvcnQgY29uc3Qgc29ydEJ5TmFtZU5hdHVyYWwgPSAoYTogeyBuYW1lOiBzdHJpbmcgfSwgYjogeyBuYW1lOiBzdHJpbmcgfSkgPT4ge1xuXHRyZXR1cm4gYS5uYW1lLnRyaW0oKS5sb2NhbGVDb21wYXJlKGIubmFtZS50cmltKCksIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pXG59XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gKGFycmF5OiBhbnlbXSwgYXR0cmlidXRlTmFtZTogc3RyaW5nLCBzaG91bGRTb3J0QXNjZW5kaW5nOiBib29sZWFuKSA9PiB7XG5cdHJldHVybiBhcnJheS5zbGljZSgpLnNvcnQoc29ydEJ5QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHNob3VsZFNvcnRBc2NlbmRpbmcpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFH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
|
package/lib/utils/string.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
function isPurdueAliasOrPuid(aliasOrPuid) {
|
|
6
|
-
const isPuid = /^\d{10}$/.test(aliasOrPuid);
|
|
7
|
-
const isAlias = /^[a-z0-9]{2,8}$/i.test(aliasOrPuid);
|
|
8
|
-
return isPuid || isAlias;
|
|
1
|
+
export function isPurdueAliasOrPuid(aliasOrPuid) {
|
|
2
|
+
const isPuid = /^\d{10}$/.test(aliasOrPuid);
|
|
3
|
+
const isAlias = /^[a-z0-9]{2,8}$/i.test(aliasOrPuid);
|
|
4
|
+
return isPuid || isAlias;
|
|
9
5
|
}
|
|
6
|
+
|
|
10
7
|
// https://stackoverflow.com/a/1373724
|
|
11
|
-
function isEmail(email) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
export function isEmail(email) {
|
|
9
|
+
// eslint-disable-next-line
|
|
10
|
+
const regexEmail = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
|
|
11
|
+
return regexEmail.test(email);
|
|
15
12
|
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1B1cmR1ZUFsaWFzT3JQdWlkIiwiYWxpYXNPclB1aWQiLCJpc1B1aWQiLCJ0ZXN0IiwiaXNBbGlhcyIsImlzRW1haWwiLCJlbWFpbCIsInJlZ2V4RW1haWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc3RyaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc1B1cmR1ZUFsaWFzT3JQdWlkKGFsaWFzT3JQdWlkOiBzdHJpbmcpIHtcblx0Y29uc3QgaXNQdWlkID0gL15cXGR7MTB9JC8udGVzdChhbGlhc09yUHVpZClcblx0Y29uc3QgaXNBbGlhcyA9IC9eW2EtejAtOV17Miw4fSQvaS50ZXN0KGFsaWFzT3JQdWlkKVxuXHRyZXR1cm4gaXNQdWlkIHx8IGlzQWxpYXNcbn1cblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEzNzM3MjRcbmV4cG9ydCBmdW5jdGlvbiBpc0VtYWlsKGVtYWlsOiBzdHJpbmcpIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cdGNvbnN0IHJlZ2V4RW1haWwgPSAvKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkvXG5cdHJldHVybiByZWdleEVtYWlsLnRlc3QoZW1haWwpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0EsbUJBQW1CQSxDQUFDQyxXQUFtQixFQUFFO0VBQ3hELE1BQU1DLE1BQU0sR0FBRyxVQUFVLENBQUNDLElBQUksQ0FBQ0YsV0FBVyxDQUFDO0VBQzNDLE1BQU1HLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQ0QsSUFBSSxDQUFDRixXQUFXLENBQUM7RUFDcEQsT0FBT0MsTUFBTSxJQUFJRSxPQUFPO0FBQ3pCOztBQUVBO0FBQ0EsT0FBTyxTQUFTQyxPQUFPQSxDQUFDQyxLQUFhLEVBQUU7RUFDdEM7RUFDQSxNQUFNQyxVQUFVLEdBQUcsNGFBQTRhO0VBQy9iLE9BQU9BLFVBQVUsQ0FBQ0osSUFBSSxDQUFDRyxLQUFLLENBQUM7QUFDOUIiLCJpZ25vcmVMaXN0IjpbXX0=
|