@gen3/core 0.10.47 → 0.10.48

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.
Files changed (34) hide show
  1. package/dist/cjs/index.js +185 -33
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/dts/features/aiSearch/aiSearchSlice.d.ts +430 -6
  4. package/dist/dts/features/app/store.d.ts +3 -1
  5. package/dist/dts/features/authz/authzMappingSlice.d.ts +331 -61
  6. package/dist/dts/features/cohort/cohortSlice.d.ts +6 -6
  7. package/dist/dts/features/download/downloadStatusApi.d.ts +269 -5
  8. package/dist/dts/features/fence/credentialsApi.d.ts +619 -7
  9. package/dist/dts/features/fence/fenceApi.d.ts +136 -4
  10. package/dist/dts/features/fence/jwtApi.d.ts +136 -4
  11. package/dist/dts/features/gen3/gen3Api.d.ts +1 -1
  12. package/dist/dts/features/gen3Apps/Gen3App.d.ts +10 -9
  13. package/dist/dts/features/gen3Apps/Gen3AppRTKQ.d.ts +19 -0
  14. package/dist/dts/features/gen3Apps/constants.d.ts +1 -0
  15. package/dist/dts/features/gen3Apps/gen3AppsSlice.d.ts +2 -2
  16. package/dist/dts/features/gen3Apps/index.d.ts +4 -3
  17. package/dist/dts/features/graphQL/graphQLSlice.d.ts +137 -5
  18. package/dist/dts/features/guppy/guppyApi.d.ts +2 -2
  19. package/dist/dts/features/guppy/guppyDownloadSlice.d.ts +164 -4
  20. package/dist/dts/features/guppy/guppySlice.d.ts +2012 -15
  21. package/dist/dts/features/metadata/metadataSlice.d.ts +930 -9
  22. package/dist/dts/features/submission/submissionApi.d.ts +919 -1
  23. package/dist/dts/features/user/externalLoginsSlice.d.ts +527 -5
  24. package/dist/dts/features/user/hooks.d.ts +1 -1
  25. package/dist/dts/features/user/userSliceRTK.d.ts +1386 -189
  26. package/dist/dts/features/workspace/workspacesSlice.d.ts +402 -6
  27. package/dist/dts/hooks.d.ts +5 -5
  28. package/dist/dts/reducers.d.ts +25 -5
  29. package/dist/dts/store.d.ts +25 -34
  30. package/dist/esm/index.js +166 -35
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/index.d.ts +8767 -911
  33. package/package.json +2 -2
  34. package/dist/dts/features/dataLibrary/types.d.ts +0 -4
package/dist/cjs/index.js CHANGED
@@ -4,19 +4,37 @@ var toolkit = require('@reduxjs/toolkit');
4
4
  var react = require('@reduxjs/toolkit/query/react');
5
5
  var React = require('react');
6
6
  var reactRedux = require('react-redux');
7
- var react$1 = require('@reduxjs/toolkit/dist/query/react');
8
7
  var cookiesNext = require('cookies-next');
9
8
  var query = require('@reduxjs/toolkit/query');
10
9
  var lodash = require('lodash');
11
10
  var Queue = require('queue');
12
11
  var jsonpathPlus = require('jsonpath-plus');
13
12
  var uuid = require('uuid');
14
- require('redux-persist');
13
+ var reduxPersist = require('redux-persist');
15
14
  var reactCookie = require('react-cookie');
16
15
  var useSWR = require('swr');
17
16
  var flat = require('flat');
18
17
  var Papa = require('papaparse');
19
18
 
19
+ function _interopNamespaceDefault(e) {
20
+ var n = Object.create(null);
21
+ if (e) {
22
+ Object.keys(e).forEach(function (k) {
23
+ if (k !== 'default') {
24
+ var d = Object.getOwnPropertyDescriptor(e, k);
25
+ Object.defineProperty(n, k, d.get ? d : {
26
+ enumerable: true,
27
+ get: function () { return e[k]; }
28
+ });
29
+ }
30
+ });
31
+ }
32
+ n.default = e;
33
+ return Object.freeze(n);
34
+ }
35
+
36
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
37
+
20
38
  const GEN3_COMMONS_NAME = process.env.GEN3_COMMONS_NAME || 'gen3';
21
39
  const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';
22
40
  const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';
@@ -63,9 +81,11 @@ const useCoreStore = reactRedux.createStoreHook(CoreContext);
63
81
  * See: https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api
64
82
  * @returns: created core API.
65
83
  */ const coreCreateApi = react.buildCreateApi(react.coreModule(), react.reactHooksModule({
66
- useSelector: useCoreSelector,
67
- useStore: useCoreStore,
68
- useDispatch: useCoreDispatch
84
+ hooks: {
85
+ useSelector: useCoreSelector,
86
+ useStore: useCoreStore,
87
+ useDispatch: useCoreDispatch
88
+ }
69
89
  }));
70
90
 
71
91
  /**
@@ -200,7 +220,7 @@ const selectHeadersWithCSRFToken = toolkit.createSelector([
200
220
  * @returns: The generated base API
201
221
  */ const gen3Api = coreCreateApi({
202
222
  reducerPath: 'gen3Services',
203
- baseQuery: react$1.fetchBaseQuery({
223
+ baseQuery: react.fetchBaseQuery({
204
224
  baseUrl: `${GEN3_API}`,
205
225
  prepareHeaders: (headers, { getState })=>{
206
226
  const csrfToken = selectCSRFToken(getState());
@@ -592,8 +612,8 @@ const slice$2 = toolkit.createSlice({
592
612
  initialState: initialState$2,
593
613
  reducers: {
594
614
  addGen3AppMetadata: (state, action)=>{
595
- const { id, requiredEntityTypes } = action.payload;
596
- state.gen3Apps[id] = {
615
+ const { name, requiredEntityTypes } = action.payload;
616
+ state.gen3Apps[name] = {
597
617
  ...action.payload,
598
618
  // need to turn a ReadonlyArray into a mutable array for immer's WritableDraft
599
619
  requiredEntityTypes: [
@@ -605,8 +625,8 @@ const slice$2 = toolkit.createSlice({
605
625
  });
606
626
  const gen3AppReducer = slice$2.reducer;
607
627
  const { addGen3AppMetadata } = slice$2.actions;
608
- const selectGen3AppMetadataById = (state, appId)=>state.gen3Apps.gen3Apps[appId];
609
- const selectGen3AppById = (appId)=>lookupGen3App(appId); // TODO: memoize this selector
628
+ const selectGen3AppMetadataByName = (state, appName)=>state.gen3Apps.gen3Apps[appName];
629
+ const selectGen3AppByName = (appName)=>lookupGen3App(appName); // TODO: memoize this selector
610
630
 
611
631
  const initialState$1 = {};
612
632
  // TODO: document what this does
@@ -733,8 +753,7 @@ const cohortsAdapter = createEntityAdapter<Cohort>({
733
753
  }
734
754
  };
735
755
  }
736
- },
737
- extraReducers: {}
756
+ }
738
757
  });
739
758
  // Filter actions: addFilter, removeFilter, updateFilter
740
759
  const { updateCohortFilter, removeCohortFilter, clearCohortFilters } = cohortSlice.actions;
@@ -999,12 +1018,13 @@ const { useGetAggMDSQuery, useGetMDSQuery, useGetTagsQuery, useGetDataQuery, use
999
1018
 
1000
1019
  // using a random uuid v4 as the namespace
1001
1020
  const GEN3_APP_NAMESPACE = '7bfaa818-c69c-457e-8d87-413cf60c25f0';
1021
+
1002
1022
  const getGen3AppId = (name, version)=>{
1003
1023
  const nameVersion = `${name}::${version}`;
1004
1024
  return uuid.v5(nameVersion, GEN3_APP_NAMESPACE);
1005
1025
  };
1006
1026
  /**
1007
- * TODO: can't tell what anything in this directory is doing.
1027
+ * Creates a Gen3App that is dynamically loaded
1008
1028
  */ const createGen3App = ({ App, name, version, requiredEntityTypes })=>{
1009
1029
  // create a stable id for this app
1010
1030
  const nameVersion = `${name}::${version}`;
@@ -1016,20 +1036,95 @@ const getGen3AppId = (name, version)=>{
1016
1036
  // need to register its name, category, path, data requirements
1017
1037
  // this will be used to build page3
1018
1038
  // click app link
1039
+ // const store = configureStore({
1040
+ // // TODO allow user to pass in a reducer in CreateGen3AppOptions?
1041
+ // reducer: (state) => state,
1042
+ // devTools: {
1043
+ // name: `${nameVersion}::${id}`,
1044
+ // },
1045
+ // });
1046
+ const Gen3AppWrapper = (props)=>{
1047
+ React.useEffect(()=>{
1048
+ document.title = `GEN3 - ${name}`;
1049
+ });
1050
+ return /*#__PURE__*/ React.createElement(App, props);
1051
+ };
1052
+ // add the app to the store
1053
+ coreStore.dispatch(addGen3AppMetadata({
1054
+ id,
1055
+ name,
1056
+ version,
1057
+ requiredEntityTypes
1058
+ }));
1059
+ registerGen3App(name, Gen3AppWrapper);
1060
+ return Gen3AppWrapper;
1061
+ };
1062
+ // ----------------------------------------------------------------------------------------
1063
+ // Apps with Local Storage
1064
+ //
1065
+ const createAppStore = (options)=>{
1066
+ const { name, version, reducers, middleware } = options;
1067
+ const nameVersion = `${name}::${version}`;
1068
+ const id = uuid.v5(nameVersion, GEN3_APP_NAMESPACE);
1019
1069
  const store = toolkit.configureStore({
1020
- // TODO allow user to pass in a reducer in CreateGen3AppOptions?
1021
- reducer: (state)=>state,
1070
+ reducer: reducers,
1022
1071
  devTools: {
1023
1072
  name: `${nameVersion}::${id}`
1024
- }
1073
+ },
1074
+ middleware: (getDefaultMiddleware)=>middleware ? getDefaultMiddleware({
1075
+ serializableCheck: {
1076
+ ignoredActions: [
1077
+ reduxPersist.FLUSH,
1078
+ reduxPersist.REHYDRATE,
1079
+ reduxPersist.PAUSE,
1080
+ reduxPersist.PERSIST,
1081
+ reduxPersist.PURGE,
1082
+ reduxPersist.REGISTER
1083
+ ]
1084
+ }
1085
+ }).concat(middleware) : getDefaultMiddleware({
1086
+ serializableCheck: {
1087
+ ignoredActions: [
1088
+ reduxPersist.FLUSH,
1089
+ reduxPersist.REHYDRATE,
1090
+ reduxPersist.PAUSE,
1091
+ reduxPersist.PERSIST,
1092
+ reduxPersist.PURGE,
1093
+ reduxPersist.REGISTER
1094
+ ]
1095
+ }
1096
+ })
1025
1097
  });
1026
- const Gen3AppWrapper = ()=>{
1098
+ const context = /*#__PURE__*/ React.createContext(undefined);
1099
+ const useAppSelector = reactRedux.createSelectorHook(context);
1100
+ const useAppDispatch = reactRedux.createDispatchHook(context);
1101
+ const useAppStore = reactRedux.createStoreHook(context);
1102
+ return {
1103
+ id: id,
1104
+ AppStore: store,
1105
+ AppContext: context,
1106
+ useAppSelector: useAppSelector,
1107
+ useAppDispatch: useAppDispatch,
1108
+ useAppStore: useAppStore
1109
+ };
1110
+ };
1111
+ const createGen3AppWithOwnStore = (options)=>{
1112
+ const { App, id, name, version, requiredEntityTypes, store, context } = options;
1113
+ // need to create store and provider.
1114
+ // return a component representing this app
1115
+ // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added
1116
+ // a route can be setup for the app
1117
+ // need to register its name, category, path, data requirements
1118
+ // this will be used to build page3
1119
+ // click app link
1120
+ const Gen3AppWrapper = (props)=>{
1027
1121
  React.useEffect(()=>{
1028
1122
  document.title = `GEN3 - ${name}`;
1029
1123
  });
1030
1124
  return /*#__PURE__*/ React.createElement(reactRedux.Provider, {
1031
- store: store
1032
- }, /*#__PURE__*/ React.createElement(reactCookie.CookiesProvider, null, /*#__PURE__*/ React.createElement(App, null)));
1125
+ store: store,
1126
+ context: context
1127
+ }, /*#__PURE__*/ React.createElement(reactCookie.CookiesProvider, null, /*#__PURE__*/ React.createElement(App, props)));
1033
1128
  };
1034
1129
  // add the app to the store
1035
1130
  coreStore.dispatch(addGen3AppMetadata({
@@ -1038,10 +1133,69 @@ const getGen3AppId = (name, version)=>{
1038
1133
  version,
1039
1134
  requiredEntityTypes
1040
1135
  }));
1041
- registerGen3App(id, Gen3AppWrapper);
1136
+ registerGen3App(name, Gen3AppWrapper);
1042
1137
  return Gen3AppWrapper;
1043
1138
  };
1044
1139
 
1140
+ const createAppApiForRTKQ = (reducerPath, baseQuery)=>{
1141
+ const appContext = React__namespace.createContext(undefined);
1142
+ const useAppSelector = reactRedux.createSelectorHook(appContext);
1143
+ const useAppDispatch = reactRedux.createDispatchHook(appContext);
1144
+ const useAppStore = reactRedux.createStoreHook(appContext);
1145
+ const appCreateApi = react.buildCreateApi(react.coreModule(), react.reactHooksModule({
1146
+ hooks: {
1147
+ useDispatch: useAppDispatch,
1148
+ useSelector: useAppSelector,
1149
+ useStore: useAppStore
1150
+ }
1151
+ }));
1152
+ const appRTKQApi = appCreateApi({
1153
+ reducerPath: reducerPath,
1154
+ baseQuery: baseQuery ?? react.fetchBaseQuery({
1155
+ baseUrl: `${GEN3_API}`,
1156
+ prepareHeaders: (headers)=>{
1157
+ headers.set('Content-Type', 'application/json');
1158
+ let accessToken = undefined;
1159
+ if (process.env.NODE_ENV === 'development') {
1160
+ // NOTE: This cookie can only be accessed from the client side
1161
+ // in development mode. Otherwise, the cookie is set as httpOnly
1162
+ accessToken = cookiesNext.getCookie('credentials_token');
1163
+ }
1164
+ if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);
1165
+ return headers;
1166
+ }
1167
+ }),
1168
+ endpoints: ()=>({})
1169
+ });
1170
+ const appMiddleware = appRTKQApi.middleware;
1171
+ const appStore = toolkit.configureStore({
1172
+ reducer: {
1173
+ [appRTKQApi.reducerPath]: appRTKQApi.reducer
1174
+ },
1175
+ middleware: (getDefaultMiddleware)=>getDefaultMiddleware({
1176
+ serializableCheck: {
1177
+ ignoredActions: [
1178
+ reduxPersist.FLUSH,
1179
+ reduxPersist.REHYDRATE,
1180
+ reduxPersist.PAUSE,
1181
+ reduxPersist.PERSIST,
1182
+ reduxPersist.PURGE,
1183
+ reduxPersist.REGISTER
1184
+ ]
1185
+ }
1186
+ }).concat(appMiddleware)
1187
+ });
1188
+ return {
1189
+ useAppSelector: useAppSelector,
1190
+ useAppDispatch: useAppDispatch,
1191
+ useAppStore: useAppStore,
1192
+ AppContext: appContext,
1193
+ appApi: appRTKQApi,
1194
+ appContext: appContext,
1195
+ appStore: appStore
1196
+ };
1197
+ };
1198
+
1045
1199
  const graphQLWithTags = gen3Api.enhanceEndpoints({
1046
1200
  addTagTypes: [
1047
1201
  'graphQL'
@@ -1498,14 +1652,14 @@ const useGetStatus = ()=>{
1498
1652
  }
1499
1653
  }),
1500
1654
  getFieldCountSummary: builder.query({
1501
- query: ({ type, field, filters })=>{
1655
+ query: ({ type, field, filters, accessibility = exports.Accessibility.ALL })=>{
1502
1656
  const gqlFilters = convertFilterSetToGqlFilter(filters);
1503
- const query = `query ($filter: JSON) {
1657
+ const query = `query summary ($filter: JSON) {
1504
1658
  _aggregation {
1505
- ${type} (filter: $filter) {
1659
+ ${type} (filter: $filter, accessibility: ${accessibility}) {
1506
1660
  ${field} {
1507
1661
  histogram {
1508
- sum
1662
+ sum,
1509
1663
  }
1510
1664
  }
1511
1665
  }
@@ -1603,12 +1757,7 @@ const useGetArrayTypes = ()=>{
1603
1757
  return data ? data['indices'] : {};
1604
1758
  }
1605
1759
  };
1606
- const { useGetRawDataAndTotalCountsQuery, useGetAccessibleDataQuery, useGetAllFieldsForTypeQuery, useGetAggsQuery, useGetSubAggsQuery, useGetCountsQuery, useGetFieldCountSummaryQuery, useGetFieldsForIndexQuery, useGeneralGQLQuery, useLazyGeneralGQLQuery } = explorerApi;
1607
- const EmptyAggData = {};
1608
- const selectAggDataForIndex = (state, index, field)=>{
1609
- const data = state.guppyApi.aggs[index]?.[field]?.histogram;
1610
- return data ?? EmptyAggData;
1611
- };
1760
+ const { useGetRawDataAndTotalCountsQuery, useGetAccessibleDataQuery, useGetAllFieldsForTypeQuery, useGetAggsQuery, useLazyGetAggsQuery, useGetSubAggsQuery, useGetCountsQuery, useGetFieldCountSummaryQuery, useGetFieldsForIndexQuery, useGeneralGQLQuery, useLazyGeneralGQLQuery } = explorerApi;
1612
1761
 
1613
1762
  /**
1614
1763
  * Flattens a deep nested JSON object skipping
@@ -2099,7 +2248,10 @@ exports.clearCohortFilters = clearCohortFilters;
2099
2248
  exports.cohortReducer = cohortReducer;
2100
2249
  exports.convertFilterSetToGqlFilter = convertFilterSetToGqlFilter;
2101
2250
  exports.coreStore = coreStore;
2251
+ exports.createAppApiForRTKQ = createAppApiForRTKQ;
2252
+ exports.createAppStore = createAppStore;
2102
2253
  exports.createGen3App = createGen3App;
2254
+ exports.createGen3AppWithOwnStore = createGen3AppWithOwnStore;
2103
2255
  exports.createUseCoreDataHook = createUseCoreDataHook;
2104
2256
  exports.downloadFromGuppyToBlob = downloadFromGuppyToBlob;
2105
2257
  exports.downloadJSONDataFromGuppy = downloadJSONDataFromGuppy;
@@ -2152,7 +2304,6 @@ exports.rawDataQueryStrForEachField = rawDataQueryStrForEachField;
2152
2304
  exports.removeCohortFilter = removeCohortFilter;
2153
2305
  exports.resetUserState = resetUserState;
2154
2306
  exports.resourcePathFromProjectID = resourcePathFromProjectID;
2155
- exports.selectAggDataForIndex = selectAggDataForIndex;
2156
2307
  exports.selectAuthzMappingData = selectAuthzMappingData;
2157
2308
  exports.selectCSRFToken = selectCSRFToken;
2158
2309
  exports.selectCSRFTokenData = selectCSRFTokenData;
@@ -2162,8 +2313,8 @@ exports.selectCurrentCohortId = selectCurrentCohortId;
2162
2313
  exports.selectCurrentCohortName = selectCurrentCohortName;
2163
2314
  exports.selectCurrentMessage = selectCurrentMessage;
2164
2315
  exports.selectCurrentModal = selectCurrentModal;
2165
- exports.selectGen3AppById = selectGen3AppById;
2166
- exports.selectGen3AppMetadataById = selectGen3AppMetadataById;
2316
+ exports.selectGen3AppByName = selectGen3AppByName;
2317
+ exports.selectGen3AppMetadataByName = selectGen3AppMetadataByName;
2167
2318
  exports.selectHeadersWithCSRFToken = selectHeadersWithCSRFToken;
2168
2319
  exports.selectIndexFilters = selectIndexFilters;
2169
2320
  exports.selectIndexedFilterByName = selectIndexedFilterByName;
@@ -2224,6 +2375,7 @@ exports.useIsExternalConnectedQuery = useIsExternalConnectedQuery;
2224
2375
  exports.useIsUserLoggedIn = useIsUserLoggedIn;
2225
2376
  exports.useLazyFetchUserDetailsQuery = useLazyFetchUserDetailsQuery;
2226
2377
  exports.useLazyGeneralGQLQuery = useLazyGeneralGQLQuery;
2378
+ exports.useLazyGetAggsQuery = useLazyGetAggsQuery;
2227
2379
  exports.useLazyGetCrosswalkDataQuery = useLazyGetCrosswalkDataQuery;
2228
2380
  exports.useLazyGetExternalLoginsQuery = useLazyGetExternalLoginsQuery;
2229
2381
  exports.useLazyGetProjectsQuery = useLazyGetProjectsQuery;