@gen3/core 0.10.94 → 0.10.95

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 (50) hide show
  1. package/dist/cjs/index.js +386 -122
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/dts/constants.d.ts +1 -0
  4. package/dist/dts/constants.d.ts.map +1 -1
  5. package/dist/dts/features/cohort/cohortSlice.d.ts +152 -77
  6. package/dist/dts/features/cohort/cohortSlice.d.ts.map +1 -1
  7. package/dist/dts/features/cohort/index.d.ts +2 -2
  8. package/dist/dts/features/cohort/index.d.ts.map +1 -1
  9. package/dist/dts/features/cohort/reducers.d.ts +2 -2
  10. package/dist/dts/features/cohort/utils.d.ts +2 -0
  11. package/dist/dts/features/cohort/utils.d.ts.map +1 -0
  12. package/dist/dts/features/filters/filters.d.ts +17 -0
  13. package/dist/dts/features/filters/filters.d.ts.map +1 -1
  14. package/dist/dts/features/filters/index.d.ts +2 -2
  15. package/dist/dts/features/filters/index.d.ts.map +1 -1
  16. package/dist/dts/features/filters/tests/filters.unit.test.d.ts +2 -0
  17. package/dist/dts/features/filters/tests/filters.unit.test.d.ts.map +1 -0
  18. package/dist/dts/features/gen3Apps/Gen3AppRTKQ.d.ts +4 -8
  19. package/dist/dts/features/gen3Apps/Gen3AppRTKQ.d.ts.map +1 -1
  20. package/dist/dts/features/guppy/guppySlice.d.ts +3 -1
  21. package/dist/dts/features/guppy/guppySlice.d.ts.map +1 -1
  22. package/dist/dts/features/guppy/index.d.ts +2 -0
  23. package/dist/dts/features/guppy/index.d.ts.map +1 -1
  24. package/dist/dts/features/guppy/processing.d.ts +20 -0
  25. package/dist/dts/features/guppy/processing.d.ts.map +1 -0
  26. package/dist/dts/features/guppy/tests/processing.unit.test.d.ts +2 -0
  27. package/dist/dts/features/guppy/tests/processing.unit.test.d.ts.map +1 -0
  28. package/dist/dts/features/requestor/index.d.ts +2 -0
  29. package/dist/dts/features/requestor/index.d.ts.map +1 -0
  30. package/dist/dts/features/requestor/requestorSlice.d.ts +298 -0
  31. package/dist/dts/features/requestor/requestorSlice.d.ts.map +1 -0
  32. package/dist/dts/features/user/index.d.ts +2 -2
  33. package/dist/dts/features/user/index.d.ts.map +1 -1
  34. package/dist/dts/features/user/userSliceRTK.d.ts +171 -4
  35. package/dist/dts/features/user/userSliceRTK.d.ts.map +1 -1
  36. package/dist/dts/hooks.d.ts +2 -2
  37. package/dist/dts/index.d.ts +1 -0
  38. package/dist/dts/index.d.ts.map +1 -1
  39. package/dist/dts/reducers.d.ts +3 -3
  40. package/dist/dts/store.d.ts +4 -4
  41. package/dist/dts/types/index.d.ts +12 -6
  42. package/dist/dts/types/index.d.ts.map +1 -1
  43. package/dist/dts/utils/extractvalues.d.ts +1 -4
  44. package/dist/dts/utils/extractvalues.d.ts.map +1 -1
  45. package/dist/dts/utils/fetch.d.ts +1 -1
  46. package/dist/dts/utils/fetch.d.ts.map +1 -1
  47. package/dist/esm/index.js +371 -124
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/index.d.ts +5459 -4916
  50. package/package.json +2 -2
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createSelector, createAsyncThunk, createSlice, combineReducers, configureStore, nanoid } from '@reduxjs/toolkit';
1
+ import { createSelector, createAsyncThunk, createSlice, createEntityAdapter, nanoid, combineReducers, configureStore } from '@reduxjs/toolkit';
2
2
  import { createApi, fetchBaseQuery, buildCreateApi, coreModule, reactHooksModule } from '@reduxjs/toolkit/query/react';
3
3
  import { getCookie } from 'cookies-next';
4
4
  import { QueryStatus, setupListeners } from '@reduxjs/toolkit/query';
@@ -15,9 +15,9 @@ import { openDB } from 'idb';
15
15
  import { v5 } from 'uuid';
16
16
  import { CookiesProvider } from 'react-cookie';
17
17
  import useSWR from 'swr';
18
- import { JSONPath } from 'jsonpath-plus';
19
18
  import { flatten } from 'flat';
20
19
  import Papa from 'papaparse';
20
+ import { JSONPath } from 'jsonpath-plus';
21
21
  import Queue from 'queue';
22
22
 
23
23
  const GEN3_COMMONS_NAME = process.env.NEXT_PUBLIC_GEN3_COMMONS_NAME || 'gen3';
@@ -40,6 +40,7 @@ const GEN3_DATA_LIBRARY_API = process.env.NEXT_PUBLIC_GEN3_DATA_LIBRARY_API || `
40
40
  const GEN3_CROSSWALK_API = process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;
41
41
  const GEN3_SOWER_API = process.env.NEXT_PUBLIC_GEN3_SOWER_API || `${GEN3_API}/jobs`;
42
42
  const GEN3_MANIFEST_API = process.env.NEXT_PUBLIC_GEN3_MANIFEST_API || `${GEN3_API}/manifests`;
43
+ const GEN3_REQUESTOR_API = process.env.NEXT_PUBLIC_GEN3_REQUESTOR_API || `${GEN3_API}/requestor`;
43
44
  var Accessibility = /*#__PURE__*/ function(Accessibility) {
44
45
  Accessibility["ACCESSIBLE"] = "accessible";
45
46
  Accessibility["UNACCESSIBLE"] = "unaccessible";
@@ -180,7 +181,7 @@ const userAuthApi = createApi({
180
181
  const EMPTY_USER = {
181
182
  username: undefined
182
183
  };
183
- const { useFetchUserDetailsQuery, useLazyFetchUserDetailsQuery, useGetCSRFQuery } = userAuthApi;
184
+ const { useFetchUserDetailsQuery, useLazyFetchUserDetailsQuery, useGetCSRFQuery, useLazyGetCSRFQuery } = userAuthApi;
184
185
  const userAuthApiMiddleware = userAuthApi.middleware;
185
186
  const userAuthApiReducerPath = userAuthApi.reducerPath;
186
187
  const userAuthApiReducer = userAuthApi.reducer;
@@ -396,7 +397,7 @@ const useCoreDispatch = useDispatch.withTypes();
396
397
  });
397
398
  const isAuthenticated = (loginStatus)=>loginStatus === 'authenticated';
398
399
  const isPending = (loginStatus)=>loginStatus === 'pending';
399
- const initialState$7 = {
400
+ const initialState$8 = {
400
401
  status: 'uninitialized',
401
402
  loginStatus: 'unauthenticated',
402
403
  error: undefined
@@ -407,9 +408,9 @@ const initialState$7 = {
407
408
  * @returns: status messages wrapped around fetchUserState response dict
408
409
  */ const slice$4 = createSlice({
409
410
  name: 'fence/user',
410
- initialState: initialState$7,
411
+ initialState: initialState$8,
411
412
  reducers: {
412
- resetUserState: ()=>initialState$7
413
+ resetUserState: ()=>initialState$8
413
414
  },
414
415
  extraReducers: (builder)=>{
415
416
  builder.addCase(fetchUserState.fulfilled, (_, action)=>{
@@ -551,11 +552,11 @@ const { useGetExternalLoginsQuery, useLazyGetExternalLoginsQuery, useLazyIsExter
551
552
  }
552
553
  };
553
554
 
554
- const initialState$6 = {};
555
+ const initialState$7 = {};
555
556
  // TODO: document what this does
556
557
  const slice$3 = createSlice({
557
558
  name: 'drsResolver',
558
- initialState: initialState$6,
559
+ initialState: initialState$7,
559
560
  reducers: {
560
561
  setDRSHostnames: (_state, action)=>{
561
562
  return action.payload;
@@ -576,12 +577,12 @@ const lookupGen3App = (id)=>{
576
577
  return REGISTRY[id];
577
578
  };
578
579
 
579
- const initialState$5 = {
580
+ const initialState$6 = {
580
581
  gen3Apps: {}
581
582
  };
582
583
  const slice$2 = createSlice({
583
584
  name: 'gen3Apps',
584
- initialState: initialState$5,
585
+ initialState: initialState$6,
585
586
  reducers: {
586
587
  addGen3AppMetadata: (state, action)=>{
587
588
  const { name, requiredEntityTypes } = action.payload;
@@ -612,13 +613,13 @@ const selectGen3AppByName = (appName)=>lookupGen3App(appName); // TODO: memoize
612
613
  Modals["GeneralErrorModal"] = "GeneralErrorModal";
613
614
  return Modals;
614
615
  }({});
615
- const initialState$4 = {
616
+ const initialState$5 = {
616
617
  currentModal: null
617
618
  };
618
619
  //Creates a modal slice for tracking showModal and hideModal state.
619
620
  const slice$1 = createSlice({
620
621
  name: 'modals',
621
- initialState: initialState$4,
622
+ initialState: initialState$5,
622
623
  reducers: {
623
624
  showModal: (state, action)=>{
624
625
  state.currentModal = action.payload.modal;
@@ -688,7 +689,7 @@ const isTimeGreaterThan = (startTime, minutes)=>{
688
689
  };
689
690
 
690
691
  const NO_WORKSPACE_ID = 'none';
691
- const initialState$3 = {
692
+ const initialState$4 = {
692
693
  id: NO_WORKSPACE_ID,
693
694
  status: WorkspaceStatus.NotFound,
694
695
  requestedStatus: RequestedWorkspaceStatus.Unset,
@@ -696,7 +697,7 @@ const initialState$3 = {
696
697
  };
697
698
  const slice = createSlice({
698
699
  name: 'ActiveWorkspace',
699
- initialState: initialState$3,
700
+ initialState: initialState$4,
700
701
  reducers: {
701
702
  setActiveWorkspaceId: (state, action)=>{
702
703
  state = {
@@ -786,119 +787,260 @@ const guppyAPISliceMiddleware = guppyApi.middleware;
786
787
  const guppyApiSliceReducerPath = guppyApi.reducerPath;
787
788
  const guppyApiReducer = guppyApi.reducer;
788
789
 
789
- const EmptyCohort = {
790
- id: 'default',
791
- name: 'Filters',
792
- filters: {},
793
- modified_datetime: new Date().toISOString()
790
+ /**
791
+ * Cohorts in Gen3 are defined as a set of filters for each index in the data.
792
+ * This means one cohort id defined for all "tabs" in CohortBuilder (explorer)
793
+ * Switching a cohort is means that all the cohorts for the index changes.
794
+ */ const UNSAVED_COHORT_NAME = 'Unsaved_Cohort';
795
+ const NULL_COHORT_ID = 'null_cohort_id';
796
+ const newCohort = ({ filters = {}, customName })=>{
797
+ const ts = new Date();
798
+ const newName = customName;
799
+ const newId = createCohortId();
800
+ return {
801
+ name: newName,
802
+ id: newId,
803
+ filters: filters ?? {},
804
+ modified: false,
805
+ saved: false,
806
+ modified_datetime: ts.toISOString()
807
+ };
794
808
  };
795
- const initialCohortState = {
796
- cohort: {
797
- ...EmptyCohort
809
+ const createCohortId = ()=>nanoid();
810
+ const cohortsAdapter = createEntityAdapter({
811
+ sortComparer: (a, b)=>{
812
+ if (a.modified_datetime <= b.modified_datetime) return 1;
813
+ else return -1;
814
+ },
815
+ selectId: (cohort)=>cohort.id
816
+ });
817
+ // Create an initial unsaved cohort
818
+ const initialCohort = newCohort({
819
+ customName: UNSAVED_COHORT_NAME
820
+ });
821
+ const emptyInitialState = cohortsAdapter.getInitialState({
822
+ currentCohort: initialCohort.id,
823
+ message: undefined
824
+ });
825
+ // Set the initial cohort in the adapter state
826
+ const initialState$3 = cohortsAdapter.setOne(emptyInitialState, initialCohort);
827
+ const getCurrentCohort = (state)=>{
828
+ if (state.currentCohort) {
829
+ return state.currentCohort;
798
830
  }
831
+ return NULL_COHORT_ID;
799
832
  };
800
- // TODO: start using this adapter
801
- /*
802
- const cohortsAdapter = createEntityAdapter<Cohort>({
803
- sortComparer: (a, b) => {
804
- if (a.modified_datetime <= b.modified_datetime) return 1;
805
- else return -1;
806
- },
807
- });
808
- */ /**
833
+ /**
809
834
  * Redux slice for cohort filters
810
835
  */ const cohortSlice = createSlice({
811
836
  name: 'cohort',
812
- initialState: initialCohortState,
837
+ initialState: initialState$3,
813
838
  reducers: {
839
+ addNewDefaultUnsavedCohort: (state)=>{
840
+ const cohort = newCohort({
841
+ customName: UNSAVED_COHORT_NAME
842
+ });
843
+ cohortsAdapter.addOne(state, cohort);
844
+ state.currentCohort = cohort.id;
845
+ state.message = [
846
+ `newCohort|${cohort.name}|${cohort.id}`
847
+ ];
848
+ },
849
+ updateCohortName: (state, action)=>{
850
+ cohortsAdapter.updateOne(state, {
851
+ id: getCurrentCohort(state),
852
+ changes: {
853
+ name: action.payload,
854
+ modified: true,
855
+ modified_datetime: new Date().toISOString()
856
+ }
857
+ });
858
+ },
859
+ removeCohort: (state, action)=>{
860
+ const removedCohort = state.entities[action?.payload?.id || getCurrentCohort(state)];
861
+ cohortsAdapter.removeOne(state, action?.payload?.id || getCurrentCohort(state));
862
+ if (action?.payload.shouldShowMessage) {
863
+ state.message = [
864
+ `deleteCohort|${removedCohort?.name}|${state.currentCohort}`
865
+ ];
866
+ }
867
+ },
814
868
  // adds a filter to the cohort filter set at the given index
815
869
  updateCohortFilter: (state, action)=>{
816
870
  const { index, field, filter } = action.payload;
817
- return {
818
- cohort: {
819
- ...state.cohort,
871
+ const currentCohortId = getCurrentCohort(state);
872
+ if (!state.entities[currentCohortId]) {
873
+ return;
874
+ }
875
+ cohortsAdapter.updateOne(state, {
876
+ id: currentCohortId,
877
+ changes: {
820
878
  filters: {
821
- ...state.cohort.filters,
879
+ ...state.entities[currentCohortId].filters,
822
880
  [index]: {
823
- mode: state.cohort.filters?.[index]?.mode ?? 'and',
881
+ mode: state.entities[currentCohortId]?.filters[index]?.mode ?? 'and',
824
882
  root: {
825
- ...state.cohort.filters?.[index]?.root ?? {},
883
+ ...state.entities[currentCohortId]?.filters[index]?.root ?? {},
826
884
  [field]: filter
827
885
  }
828
886
  }
829
- }
887
+ },
888
+ modified: true,
889
+ modified_datetime: new Date().toISOString()
830
890
  }
831
- };
891
+ });
832
892
  },
833
893
  setCohortFilter: (state, action)=>{
834
894
  const { index, filters } = action.payload;
835
- return {
836
- cohort: {
837
- ...state.cohort,
895
+ const currentCohortId = getCurrentCohort(state);
896
+ if (!state.entities[currentCohortId]) {
897
+ console.error(`no cohort with id=${currentCohortId} defined`);
898
+ return;
899
+ }
900
+ cohortsAdapter.updateOne(state, {
901
+ id: currentCohortId,
902
+ changes: {
838
903
  filters: {
839
- ...state.cohort.filters,
904
+ ...state.entities[currentCohortId].filters,
840
905
  [index]: filters
841
- }
906
+ },
907
+ modified: true,
908
+ modified_datetime: new Date().toISOString()
842
909
  }
843
- };
910
+ });
844
911
  },
845
912
  setCohortIndexFilters: (state, action)=>{
846
- return {
847
- cohort: {
848
- ...state.cohort,
849
- filters: {
850
- ...action.payload.filters
851
- }
913
+ const currentCohortId = getCurrentCohort(state);
914
+ if (!state.entities[currentCohortId]) {
915
+ console.error(`no cohort with id=${currentCohortId} defined`);
916
+ return;
917
+ }
918
+ cohortsAdapter.updateOne(state, {
919
+ id: currentCohortId,
920
+ changes: {
921
+ filters: action.payload.filters,
922
+ modified: true,
923
+ modified_datetime: new Date().toISOString()
852
924
  }
853
- };
925
+ });
854
926
  },
855
927
  // removes a filter to the cohort filter set at the given index
856
928
  removeCohortFilter: (state, action)=>{
857
929
  const { index, field } = action.payload;
858
- const filters = state.cohort?.filters?.[index]?.root;
930
+ const currentCohortId = getCurrentCohort(state);
931
+ if (!state.entities[currentCohortId]) {
932
+ console.error(`no cohort with id=${currentCohortId} defined`);
933
+ return;
934
+ }
935
+ const filters = state.entities[currentCohortId]?.filters[index]?.root;
859
936
  if (!filters) {
860
937
  return;
861
938
  }
862
939
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
863
940
  const { [field]: _a, ...updated } = filters;
864
- return {
865
- cohort: {
866
- ...state.cohort,
941
+ cohortsAdapter.updateOne(state, {
942
+ id: currentCohortId,
943
+ changes: {
867
944
  filters: {
868
- ...state.cohort.filters,
945
+ ...state.entities[currentCohortId]?.filters,
869
946
  [index]: {
870
- mode: state.cohort.filters[index].mode,
947
+ mode: state.entities[currentCohortId].filters[index].mode,
871
948
  root: updated
872
949
  }
873
- }
950
+ },
951
+ modified: true,
952
+ modified_datetime: new Date().toISOString()
874
953
  }
875
- };
954
+ });
876
955
  },
877
956
  // removes all filters from the cohort filter set at the given index
878
957
  clearCohortFilters: (state, action)=>{
879
958
  const { index } = action.payload;
880
- return {
881
- cohort: {
882
- ...state.cohort,
959
+ const currentCohortId = getCurrentCohort(state);
960
+ if (!state.entities[currentCohortId]) {
961
+ console.error(`no cohort with id=${currentCohortId} defined`);
962
+ return;
963
+ }
964
+ const filters = state.entities[currentCohortId]?.filters[index]?.root;
965
+ if (!filters) {
966
+ return;
967
+ }
968
+ cohortsAdapter.updateOne(state, {
969
+ id: currentCohortId,
970
+ changes: {
883
971
  filters: {
884
- ...state.cohort.filters,
972
+ ...state.entities[currentCohortId]?.filters,
885
973
  [index]: {
886
- // empty filter set
887
974
  mode: 'and',
888
975
  root: {}
889
976
  }
890
- }
977
+ },
978
+ modified: true,
979
+ modified_datetime: new Date().toISOString()
891
980
  }
892
- };
981
+ });
982
+ },
983
+ discardCohortChanges: (state, action)=>{
984
+ const { index, id, filters } = action.payload;
985
+ const cohortId = id ?? getCurrentCohort(state);
986
+ cohortsAdapter.updateOne(state, {
987
+ id: cohortId,
988
+ changes: {
989
+ filters: {
990
+ ...state.entities[cohortId].filters,
991
+ [index]: filters || {
992
+ mode: 'and',
993
+ root: {}
994
+ }
995
+ },
996
+ modified: false,
997
+ modified_datetime: new Date().toISOString()
998
+ }
999
+ });
1000
+ },
1001
+ setCurrentCohortId: (state, action)=>{
1002
+ state.currentCohort = action.payload;
1003
+ },
1004
+ /** @hidden */ setCohortList: (state, action)=>{
1005
+ if (!action.payload) {
1006
+ cohortsAdapter.removeMany(state, state.ids);
1007
+ } else {
1008
+ cohortsAdapter.upsertMany(state, [
1009
+ ...action.payload
1010
+ ]);
1011
+ }
893
1012
  }
894
1013
  }
895
1014
  });
1015
+ /**
1016
+ * Returns the selectors for the cohorts EntityAdapter
1017
+ * @param state - the CoreState
1018
+ *
1019
+ * @hidden
1020
+ */ const cohortSelectors = cohortsAdapter.getSelectors((state)=>state.cohorts.cohort);
1021
+ /**
1022
+ * Returns an array of all the cohorts
1023
+ * @param state - the CoreState
1024
+ * @category Cohort
1025
+ * @category Selectors
1026
+ */ const selectAllCohorts = (state)=>cohortSelectors.selectEntities(state);
1027
+ const getCurrentCohortFromCoreState = (state)=>{
1028
+ if (state.cohorts.cohort.currentCohort) {
1029
+ return state.cohorts.cohort.currentCohort;
1030
+ }
1031
+ return NULL_COHORT_ID;
1032
+ };
896
1033
  // Filter actions: addFilter, removeFilter, updateFilter
897
- const { updateCohortFilter, setCohortFilter, setCohortIndexFilters, removeCohortFilter, clearCohortFilters } = cohortSlice.actions;
898
- const selectCohortFilters = (state)=>state.cohorts.cohort.cohort.filters;
899
- const selectCurrentCohortId = (state)=>state.cohorts.cohort.cohort.id;
900
- const selectCurrentCohort = (state)=>state.cohorts.cohort.cohort;
901
- const selectCurrentCohortName = (state)=>state.cohorts.cohort.cohort.name;
1034
+ const { updateCohortFilter, setCohortFilter, setCohortIndexFilters, removeCohortFilter, clearCohortFilters, removeCohort, discardCohortChanges, addNewDefaultUnsavedCohort, setCurrentCohortId, setCohortList } = cohortSlice.actions;
1035
+ const selectCohortFilters = (state)=>{
1036
+ const currentCohortId = getCurrentCohortFromCoreState(state);
1037
+ return state.cohorts.cohort.entities[currentCohortId]?.filters;
1038
+ };
1039
+ const selectCurrentCohortId = (state)=>{
1040
+ return getCurrentCohort(state.cohorts.cohort);
1041
+ };
1042
+ const selectCurrentCohort = (state)=>cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state));
1043
+ const selectCurrentCohortName = (state)=>cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state)).name;
902
1044
  /**
903
1045
  * Select a filter by its name from the current cohort. If the filter is not found
904
1046
  * returns undefined.
@@ -906,7 +1048,40 @@ const selectCurrentCohortName = (state)=>state.cohorts.cohort.cohort.name;
906
1048
  * @param index which cohort index to select from
907
1049
  * @param name name of the filter to select
908
1050
  */ const selectIndexedFilterByName = (state, index, name)=>{
909
- return state.cohorts.cohort.cohort.filters[index]?.root[name];
1051
+ return cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state)).filters[index]?.root[name];
1052
+ };
1053
+ /**
1054
+ * a thunk to optionally create a caseSet when switching cohorts.
1055
+ * Note the assumption if the caseset member has ids then the caseset has previously been created.
1056
+ */ const setActiveCohort = (cohortId)=>async (dispatch /* getState */ )=>{
1057
+ dispatch(setCurrentCohortId(cohortId));
1058
+ };
1059
+ /**
1060
+ * Returns all the cohorts in the state
1061
+ * @param state - the CoreState
1062
+ *
1063
+ * @category Cohort
1064
+ * @category Selectors
1065
+ */ const selectAvailableCohorts = (state)=>cohortSelectors.selectAll(state);
1066
+ /**
1067
+ * Returns if the current cohort is modified
1068
+ * @param state - the CoreState
1069
+ * @category Cohort
1070
+ * @category Selectors
1071
+ * @hidden
1072
+ */ const selectCurrentCohortModified = (state)=>{
1073
+ const cohort = cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state));
1074
+ return cohort?.modified;
1075
+ };
1076
+ /**
1077
+ * Returns if the current cohort has been saved
1078
+ * @param state - the CoreState
1079
+ * @category Cohort
1080
+ * @category Selectors
1081
+ * @hidden
1082
+ */ const selectCurrentCohortSaved = (state)=>{
1083
+ const cohort = cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state));
1084
+ return cohort?.saved;
910
1085
  };
911
1086
  const EmptyFilterSet = {
912
1087
  mode: 'and',
@@ -918,8 +1093,23 @@ const EmptyFilterSet = {
918
1093
  * @param state - Core
919
1094
  * @param index which cohort index to select from
920
1095
  */ const selectIndexFilters = (state, index)=>{
921
- return state.cohorts.cohort.cohort.filters?.[index] ?? EmptyFilterSet; // TODO: check if this is undefined
1096
+ const cohort = cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state));
1097
+ if (!cohort) {
1098
+ console.error('No Cohort Defined');
1099
+ }
1100
+ return cohort?.filters?.[index] ?? EmptyFilterSet;
922
1101
  };
1102
+ const setActiveCohortList = (cohorts)=>async (dispatch, getState)=>{
1103
+ // set the list of all cohorts
1104
+ if (cohorts) {
1105
+ dispatch(setCohortList(cohorts));
1106
+ return;
1107
+ }
1108
+ const availableCohorts = selectAllCohorts(getState());
1109
+ if (Object.keys(availableCohorts).length === 0) {
1110
+ dispatch(addNewDefaultUnsavedCohort());
1111
+ }
1112
+ };
923
1113
  const cohortReducer = cohortSlice.reducer;
924
1114
 
925
1115
  const initialState$2 = {};
@@ -1038,7 +1228,7 @@ const persistConfig = {
1038
1228
  version: 1,
1039
1229
  storage,
1040
1230
  whitelist: [
1041
- 'cohort',
1231
+ 'cohorts',
1042
1232
  'activeWorkspace'
1043
1233
  ]
1044
1234
  };
@@ -1278,13 +1468,13 @@ const fetchFencePresignedURL = async ({ guid, method = 'GET', onAbort = ()=>null
1278
1468
  } : {}
1279
1469
  });
1280
1470
  if (!response.ok) {
1281
- throw new HTTPError(response.status, response.statusText);
1471
+ throw new HTTPError(response.status, response.statusText, response.text());
1282
1472
  }
1283
1473
  if (response.status === 204) {
1284
1474
  // no content so return null
1285
1475
  return null;
1286
1476
  }
1287
- return response.json();
1477
+ return await response.json();
1288
1478
  };
1289
1479
 
1290
1480
  const queryWTSFederatedLoginStatus = async (signal)=>{
@@ -3066,9 +3256,11 @@ const createGen3AppWithOwnStore = (options)=>{
3066
3256
  return Gen3AppWrapper;
3067
3257
  };
3068
3258
 
3069
- const createAppApiForRTKQ = (reducerPath, baseQuery)=>{
3259
+ const createAppApiForRTKQ = (reducerPath, name, version, additionalReducers, baseQuery)=>{
3260
+ const nameVersion = `${name}::${version}`;
3261
+ const id = v5(nameVersion, GEN3_APP_NAMESPACE);
3070
3262
  const appContext = React.createContext(null);
3071
- const useAppSelector = useSelector.withTypes();
3263
+ const useAppSelector = createSelectorHook(appContext);
3072
3264
  const useAppDispatch = createDispatchHook(appContext);
3073
3265
  const useAppStore = createStoreHook(appContext);
3074
3266
  const appCreateApi = buildCreateApi(coreModule(), reactHooksModule({
@@ -3084,13 +3276,12 @@ const createAppApiForRTKQ = (reducerPath, baseQuery)=>{
3084
3276
  baseUrl: `${GEN3_API}`,
3085
3277
  prepareHeaders: (headers)=>{
3086
3278
  headers.set('Content-Type', 'application/json');
3087
- let accessToken = undefined;
3088
3279
  if (process.env.NODE_ENV === 'development') {
3089
3280
  // NOTE: This cookie can only be accessed from the client side
3090
3281
  // in development mode. Otherwise, the cookie is set as httpOnly
3091
- accessToken = getCookie('credentials_token');
3282
+ const accessToken = getCookie('credentials_token');
3283
+ if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);
3092
3284
  }
3093
- if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);
3094
3285
  return headers;
3095
3286
  }
3096
3287
  }),
@@ -3098,8 +3289,12 @@ const createAppApiForRTKQ = (reducerPath, baseQuery)=>{
3098
3289
  });
3099
3290
  const appMiddleware = appRTKQApi.middleware;
3100
3291
  const appStore = configureStore({
3292
+ devTools: {
3293
+ name: `${nameVersion}::${id}`
3294
+ },
3101
3295
  reducer: {
3102
- [appRTKQApi.reducerPath]: appRTKQApi.reducer
3296
+ [appRTKQApi.reducerPath]: appRTKQApi.reducer,
3297
+ ...additionalReducers
3103
3298
  },
3104
3299
  middleware: (getDefaultMiddleware)=>getDefaultMiddleware({
3105
3300
  serializableCheck: {
@@ -3328,8 +3523,12 @@ const groupSharedFields = (data)=>{
3328
3523
  }, {});
3329
3524
  };
3330
3525
 
3331
- const statusEndpoint = '/_status';
3332
- const processHistogramResponse = (data)=>{
3526
+ /**
3527
+ * Processes the histogram data from the given input object and returns an aggregated data object.
3528
+ *
3529
+ * @param {Record<string, unknown>} data - The input data object containing histogram information.
3530
+ * @returns {AggregationsData} An object containing the processed histogram data, structured as key-value pairs.
3531
+ */ const processHistogramResponse = (data)=>{
3333
3532
  const valueData = JSONPath({
3334
3533
  json: data,
3335
3534
  path: '$..histogram',
@@ -3349,6 +3548,42 @@ const processHistogramResponse = (data)=>{
3349
3548
  }, {});
3350
3549
  return results;
3351
3550
  };
3551
+ /**
3552
+ * Adjusts histogram data in the provided object by rounding counts below a specified minimum value.
3553
+ *
3554
+ * This function traverses the input object for histogram data and updates it such that all count values
3555
+ * falling below the defined `minValue` are set to `-1`. By default, the `minValue` is set to `100`.
3556
+ *
3557
+ * @param {Record<string, unknown>} origData - The original input data containing histogram structures to modify.
3558
+ * @param {number} [minValue=100] - The minimum value of histogram counts. Counts below this value are replaced with `-1`.
3559
+ * @returns {Record<string, unknown>} - A new object containing the modified histogram data while preserving other properties.
3560
+ */ const roundHistogramResponse = (origData, minValue = 100)=>{
3561
+ const data = {
3562
+ ...origData
3563
+ };
3564
+ const pointerData = JSONPath({
3565
+ json: data,
3566
+ path: '$..histogram',
3567
+ resultType: 'pointer'
3568
+ });
3569
+ if (pointerData.length === 0) {
3570
+ return {};
3571
+ }
3572
+ pointerData.forEach((element)=>{
3573
+ const key = element.slice(1).replace(/\//g, '.');
3574
+ const histogramData = JSONPath({
3575
+ json: data,
3576
+ path: key,
3577
+ resultType: 'value'
3578
+ });
3579
+ histogramData[0].forEach((x)=>{
3580
+ x.count = x.count < minValue ? -1 : x.count;
3581
+ });
3582
+ });
3583
+ return data;
3584
+ };
3585
+
3586
+ const statusEndpoint = '/_status';
3352
3587
  const fetchJson = async (url)=>{
3353
3588
  const res = await fetch(url, {
3354
3589
  method: 'GET',
@@ -3461,24 +3696,7 @@ const useGetStatus = ()=>{
3461
3696
  }),
3462
3697
  getAggs: builder.query({
3463
3698
  query: ({ type, fields, filters, accessibility = Accessibility.ALL })=>{
3464
- const queryStart = isFilterEmpty(filters) ? `
3465
- query getAggs {
3466
- _aggregation {
3467
- ${type} (accessibility: ${accessibility}) {` : `query getAggs ($filter: JSON) {
3468
- _aggregation {
3469
- ${type} (filter: $filter, filterSelf: false, accessibility: ${accessibility}) {`;
3470
- const query = `${queryStart}
3471
- ${fields.map((field)=>histogramQueryStrForEachField(field))}
3472
- }
3473
- }
3474
- }`;
3475
- const queryBody = {
3476
- query: query,
3477
- variables: {
3478
- filter: convertFilterSetToGqlFilter(filters)
3479
- }
3480
- };
3481
- return queryBody;
3699
+ return buildGetAggregationQuery(type, fields, filters, accessibility, false);
3482
3700
  },
3483
3701
  transformResponse: (response, _meta, args)=>{
3484
3702
  return processHistogramResponse(response?.data?._aggregation[args.type] ?? {});
@@ -3486,24 +3704,7 @@ const useGetStatus = ()=>{
3486
3704
  }),
3487
3705
  getAggsNoFilterSelf: builder.query({
3488
3706
  query: ({ type, fields, filters, accessibility = Accessibility.ALL })=>{
3489
- const queryStart = isFilterEmpty(filters) ? `
3490
- query getAggs {
3491
- _aggregation {
3492
- ${type} (accessibility: ${accessibility}) {` : `query getAggs ($filter: JSON) {
3493
- _aggregation {
3494
- ${type} (filter: $filter, filterSelf: true, accessibility: ${accessibility}) {`;
3495
- const query = `${queryStart}
3496
- ${fields.map((field)=>histogramQueryStrForEachField(field))}
3497
- }
3498
- }
3499
- }`;
3500
- const queryBody = {
3501
- query: query,
3502
- variables: {
3503
- filter: convertFilterSetToGqlFilter(filters)
3504
- }
3505
- };
3506
- return queryBody;
3707
+ return buildGetAggregationQuery(type, fields, filters, accessibility, true);
3507
3708
  },
3508
3709
  transformResponse: (response, _meta, args)=>{
3509
3710
  return processHistogramResponse(response?.data?._aggregation[args.type] ?? {});
@@ -3689,6 +3890,26 @@ const useGetIndexFields = (index)=>{
3689
3890
  const { data } = useGetFieldsForIndexQuery(index);
3690
3891
  return data ?? [];
3691
3892
  };
3893
+ const buildGetAggregationQuery = (type, fields, filters, accessibility = Accessibility.ALL, filterSelf = false)=>{
3894
+ const queryStart = isFilterEmpty(filters) ? `
3895
+ query getAggs {
3896
+ _aggregation {
3897
+ ${type} (accessibility: ${accessibility}) {` : `query getAggs ($filter: JSON) {
3898
+ _aggregation {
3899
+ ${type} (filter: $filter, filterSelf: ${filterSelf ? 'true' : 'false'}, accessibility: ${accessibility}) {`;
3900
+ const query = `${queryStart}
3901
+ ${fields.map((field)=>histogramQueryStrForEachField(field))}
3902
+ }
3903
+ }
3904
+ }`;
3905
+ const queryBody = {
3906
+ query: query,
3907
+ variables: {
3908
+ filter: convertFilterSetToGqlFilter(filters)
3909
+ }
3910
+ };
3911
+ return queryBody;
3912
+ };
3692
3913
  const { useGetRawDataAndTotalCountsQuery, useGetAccessibleDataQuery, useGetAllFieldsForTypeQuery, useGetAggsQuery, useGetAggsNoFilterSelfQuery, useLazyGetAggsQuery, useGetSubAggsQuery, useGetCountsQuery, useGetFieldCountSummaryQuery, useGetFieldsForIndexQuery, useGetSharedFieldsForIndexQuery, useGeneralGQLQuery, useLazyGeneralGQLQuery } = explorerApi;
3693
3914
 
3694
3915
  /**
@@ -3969,6 +4190,32 @@ const queryMultipleMDSRecords = async (guids, useAggMDS = false, signal)=>{
3969
4190
  });
3970
4191
  };
3971
4192
 
4193
+ /**
4194
+ * Defines requester service using a base URL and expected endpoints. Derived from gen3Api core API.
4195
+ *
4196
+ * @param endpoints - Defines endpoints used in discovery page
4197
+ * @param request - Queries Requestor service
4198
+ * @see https://github.com/uc-cdis/requestor?tab=readme-ov-file#requestor
4199
+ * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/requestor/master/docs/openapi.yaml#/Query/list_requests_request_get
4200
+ * @returns: Object of request made
4201
+ */ const requestorApi = gen3Api.injectEndpoints({
4202
+ endpoints: (builder)=>({
4203
+ request: builder.query({
4204
+ query: (queryBody)=>({
4205
+ url: `${GEN3_REQUESTOR_API}/request`,
4206
+ method: 'POST',
4207
+ credentials: 'include',
4208
+ headers: {
4209
+ Accept: 'application/json',
4210
+ 'Content-Type': 'application/json'
4211
+ },
4212
+ body: JSON.stringify(queryBody)
4213
+ })
4214
+ })
4215
+ })
4216
+ });
4217
+ const { useRequestQuery, useLazyRequestQuery } = requestorApi;
4218
+
3972
4219
  /**
3973
4220
  * Creates a loadingStatusApi for checking the status of a sower data download job
3974
4221
  * @param getJobList Shows the list of jobs currently running
@@ -4058,7 +4305,7 @@ const extractValuesFromObject = (jsonPathMappings, obj)=>{
4058
4305
  };
4059
4306
  for(const key in jsonPathMappings){
4060
4307
  if (key in Object.keys(jsonPathMappings)) {
4061
- // Extract value from object and store it in the result.
4308
+ // Extract value from an object and store it in the result.
4062
4309
  result[key] = extractObjectValue(jsonPathMappings[key], obj);
4063
4310
  }
4064
4311
  }
@@ -4347,5 +4594,5 @@ const selectPaymodelStatus = createSelector(paymodelStatusSelector, (status)=>st
4347
4594
  const isWorkspaceActive = (status)=>status === WorkspaceStatus.Running || status === WorkspaceStatus.Launching || status === WorkspaceStatus.Terminating;
4348
4595
  const isWorkspaceRunningOrStopping = (status)=>status === WorkspaceStatus.Running || status === WorkspaceStatus.Terminating;
4349
4596
 
4350
- export { Accessibility, CoreProvider, DataLibraryStoreMode, EmptyWorkspaceStatusResponse, GEN3_API, GEN3_AUTHZ_API, GEN3_COMMONS_NAME, GEN3_CROSSWALK_API, GEN3_DOMAIN, GEN3_DOWNLOADS_ENDPOINT, GEN3_FENCE_API, GEN3_GUPPY_API, GEN3_MANIFEST_API, GEN3_MDS_API, GEN3_REDIRECT_URL, GEN3_SOWER_API, GEN3_SUBMISSION_API, GEN3_WORKSPACE_API, HTTPError, HTTPErrorMessages, HttpMethod, Modals, PodConditionType, PodStatus, RequestedWorkspaceStatus, WorkspaceStatus, buildListItemsGroupedByDataset, clearActiveWorkspaceId, clearCohortFilters, convertFilterSetToGqlFilter, coreStore, createAppApiForRTKQ, createAppStore, createGen3App, createGen3AppWithOwnStore, createUseCoreDataHook, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, drsHostnamesReducer, extractEnumFilterValue, extractFieldNameFromFullFieldName, extractFileDatasetsInRecords, extractFilterValue, extractIndexAndFieldNameFromFullFieldName, extractIndexFromDataLibraryCohort, extractIndexFromFullFieldName, fetchFence, fetchFencePresignedURL, fetchJSONDataFromURL, fetchJson, fetchUserState, fieldNameToTitle, gen3Api, getCurrentTimestamp, getFederatedLoginStatus, getGen3AppId, getNumberOfItemsInDatalist, getTimestamp, graphQLAPI, graphQLWithTags, groupSharedFields, guppyAPISliceMiddleware, guppyApi, guppyApiReducer, guppyApiSliceReducerPath, handleOperation, hideModal, isAdditionalDataItem, isArray, isAuthenticated, isCohortItem, isDataLibraryAPIResponse, isDatalistAPI, isErrorWithMessage, isFetchBaseQueryError, isFetchError, isFetchParseError, isFileItem, isFilterEmpty, isFilterSet, isGuppyAggregationData, isHistogramData, isHistogramDataAArray, isHistogramDataAnEnum, isHistogramDataArray, isHistogramDataArrayARange, isHistogramDataArrayAnEnum, isHistogramDataCollection, isHistogramRangeData, isHttpStatusError, isIntersection, isJSONObject, isJSONValue, isJSONValueArray, isNotDefined, isObject, isOperationWithField, isOperatorWithFieldAndArrayOfOperands, isPending, isProgramUrl, isRootUrl, isString, isTimeGreaterThan, isUnion, isWorkspaceActive, isWorkspaceRunningOrStopping, listifyMethodsFromMapping, logoutFence, manifestApi, manifestTags, prepareUrl$1 as prepareUrl, prependIndexToFieldName, processHistogramResponse, projectCodeFromResourcePath, queryMultipleMDSRecords, rawDataQueryStrForEachField, removeCohortFilter, resetUserState, resourcePathFromProjectID, selectActiveWorkspaceId, selectActiveWorkspaceStatus, selectAllCohortFiltersCollapsed, selectAuthzMappingData, selectCSRFToken, selectCSRFTokenData, selectCohortFilterCombineMode, selectCohortFilterExpanded, selectCohortFilters, selectCurrentCohort, selectCurrentCohortId, selectCurrentCohortName, selectCurrentMessage, selectCurrentModal, selectGen3AppByName, selectGen3AppMetadataByName, selectHeadersWithCSRFToken, selectIndexFilters, selectIndexedFilterByName, selectPaymodelStatus, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, selectSharedFilters, selectSharedFiltersForFields, selectShouldShareFilters, selectUser, selectUserAuthStatus, selectUserData, selectUserDetails, selectUserLoginStatus, selectWorkspaceStatus, selectWorkspaceStatusFromService, setActiveWorkspace, setActiveWorkspaceId, setActiveWorkspaceStatus, setCohortFilter, setCohortFilterCombineMode, setCohortIndexFilters, setDRSHostnames, setRequestedWorkspaceStatus, setSharedFilters, setShouldShareFilters, setupCoreStore, showModal, submissionApi, toggleCohortBuilderAllFilters, toggleCohortBuilderCategoryFilter, trimFirstFieldNameToTitle, updateCohortFilter, useAddCohortManifestMutation, useAddFileManifestMutation, useAddMetadataManifestMutation, useAddNewCredentialMutation, useAskQuestionMutation, useAuthorizeFromCredentialsMutation, useCoreDispatch, useCoreSelector, useDataLibrary, useDownloadFromGuppyMutation, useFetchUserDetailsQuery, useGeneralGQLQuery, useGetAISearchStatusQuery, useGetAISearchVersionQuery, useGetAccessibleDataQuery, useGetActivePayModelQuery, useGetAggMDSQuery, useGetAggsNoFilterSelfQuery, useGetAggsQuery, useGetAllFieldsForTypeQuery, useGetArrayTypes, useGetAuthzMappingsQuery, useGetCSRFQuery, useGetCohortManifestQuery, useGetCountsQuery, useGetCredentialsQuery, useGetCrosswalkDataQuery, useGetDataQuery, useGetDictionaryQuery, useGetDownloadQuery, useGetExternalLoginsQuery, useGetFederatedLoginStatus, useGetFieldCountSummaryQuery, useGetFieldsForIndexQuery, useGetFileFromManifestQuery, useGetFileManifestQuery, useGetIndexAggMDSQuery, useGetIndexFields, useGetJWKKeysQuery, useGetLoginProvidersQuery, useGetMDSQuery, useGetManifestServiceStatusQuery, useGetMetadataByIdQuery, useGetMetadataFromManifestQuery, useGetMetadataManifestQuery, useGetProjectsDetailsQuery, useGetProjectsQuery, useGetRawDataAndTotalCountsQuery, useGetSharedFieldsForIndexQuery, useGetSowerJobListQuery, useGetSowerJobStatusQuery, useGetSowerOutputQuery, useGetSowerServiceStatusQuery, useGetStatus, useGetSubAggsQuery, useGetSubmissionGraphQLQuery, useGetSubmissionsQuery, useGetTagsQuery, useGetWorkspaceOptionsQuery, useGetWorkspacePayModelsQuery, useGetWorkspaceStatusQuery, useGraphQLQuery, useIsExternalConnectedQuery, useIsUserLoggedIn, useLaunchWorkspaceMutation, useLazyFetchUserDetailsQuery, useLazyGeneralGQLQuery, useLazyGetAggsQuery, useLazyGetAuthzMappingsQuery, useLazyGetCrosswalkDataQuery, useLazyGetDownloadQuery, useLazyGetExternalLoginsQuery, useLazyGetManifestServiceStatusQuery, useLazyGetProjectsQuery, useLazyGetSowerJobListQuery, useLazyGetSubmissionGraphQLQuery, useLazyIsExternalConnectedQuery, usePrevious, useRemoveCredentialMutation, useSetCurrentPayModelMutation, useSubmitSowerJobMutation, useTerminateWorkspaceMutation, useUserAuth, userHasCreateOrUpdateOnAnyProject, userHasDataUpload, userHasMethodForServiceOnProject, userHasMethodForServiceOnResource, userHasMethodOnAnyProject, userHasSheepdogProgramAdmin, userHasSheepdogProjectAdmin };
4597
+ export { Accessibility, CoreProvider, DataLibraryStoreMode, EmptyWorkspaceStatusResponse, GEN3_API, GEN3_AUTHZ_API, GEN3_COMMONS_NAME, GEN3_CROSSWALK_API, GEN3_DOMAIN, GEN3_DOWNLOADS_ENDPOINT, GEN3_FENCE_API, GEN3_GUPPY_API, GEN3_MANIFEST_API, GEN3_MDS_API, GEN3_REDIRECT_URL, GEN3_SOWER_API, GEN3_SUBMISSION_API, GEN3_WORKSPACE_API, HTTPError, HTTPErrorMessages, HttpMethod, Modals, PodConditionType, PodStatus, RequestedWorkspaceStatus, WorkspaceStatus, addNewDefaultUnsavedCohort, buildGetAggregationQuery, buildListItemsGroupedByDataset, clearActiveWorkspaceId, clearCohortFilters, cohortReducer, convertFilterSetToGqlFilter, convertFilterToGqlFilter, coreStore, createAppApiForRTKQ, createAppStore, createGen3App, createGen3AppWithOwnStore, createUseCoreDataHook, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, drsHostnamesReducer, extractEnumFilterValue, extractFieldNameFromFullFieldName, extractFileDatasetsInRecords, extractFilterValue, extractIndexAndFieldNameFromFullFieldName, extractIndexFromDataLibraryCohort, extractIndexFromFullFieldName, fetchFence, fetchFencePresignedURL, fetchJSONDataFromURL, fetchJson, fetchUserState, fieldNameToTitle, gen3Api, getCurrentTimestamp, getFederatedLoginStatus, getGen3AppId, getNumberOfItemsInDatalist, getTimestamp, graphQLAPI, graphQLWithTags, groupSharedFields, guppyAPISliceMiddleware, guppyApi, guppyApiReducer, guppyApiSliceReducerPath, handleOperation, hideModal, histogramQueryStrForEachField, isAdditionalDataItem, isArray, isAuthenticated, isCohortItem, isDataLibraryAPIResponse, isDatalistAPI, isErrorWithMessage, isFetchBaseQueryError, isFetchError, isFetchParseError, isFileItem, isFilterEmpty, isFilterSet, isGuppyAggregationData, isHistogramData, isHistogramDataAArray, isHistogramDataAnEnum, isHistogramDataArray, isHistogramDataArrayARange, isHistogramDataArrayAnEnum, isHistogramDataCollection, isHistogramRangeData, isHttpStatusError, isIntersection, isJSONObject, isJSONValue, isJSONValueArray, isNotDefined, isObject, isOperationWithField, isOperatorWithFieldAndArrayOfOperands, isPending, isProgramUrl, isRootUrl, isString, isTimeGreaterThan, isUnion, isWorkspaceActive, isWorkspaceRunningOrStopping, listifyMethodsFromMapping, logoutFence, manifestApi, manifestTags, nestedHistogramQueryStrForEachField, prepareUrl$1 as prepareUrl, prependIndexToFieldName, processHistogramResponse, projectCodeFromResourcePath, queryMultipleMDSRecords, rawDataQueryStrForEachField, removeCohort, removeCohortFilter, requestorApi, resetUserState, resourcePathFromProjectID, roundHistogramResponse, selectActiveWorkspaceId, selectActiveWorkspaceStatus, selectAllCohortFiltersCollapsed, selectAuthzMappingData, selectAvailableCohorts, selectCSRFToken, selectCSRFTokenData, selectCohortFilterCombineMode, selectCohortFilterExpanded, selectCohortFilters, selectCurrentCohort, selectCurrentCohortId, selectCurrentCohortModified, selectCurrentCohortName, selectCurrentCohortSaved, selectCurrentMessage, selectCurrentModal, selectGen3AppByName, selectGen3AppMetadataByName, selectHeadersWithCSRFToken, selectIndexFilters, selectIndexedFilterByName, selectPaymodelStatus, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, selectSharedFilters, selectSharedFiltersForFields, selectShouldShareFilters, selectUser, selectUserAuthStatus, selectUserData, selectUserDetails, selectUserLoginStatus, selectWorkspaceStatus, selectWorkspaceStatusFromService, setActiveCohort, setActiveCohortList, setActiveWorkspace, setActiveWorkspaceId, setActiveWorkspaceStatus, setCohortFilter, setCohortFilterCombineMode, setCohortIndexFilters, setDRSHostnames, setRequestedWorkspaceStatus, setSharedFilters, setShouldShareFilters, setupCoreStore, showModal, submissionApi, toggleCohortBuilderAllFilters, toggleCohortBuilderCategoryFilter, trimFirstFieldNameToTitle, updateCohortFilter, useAddCohortManifestMutation, useAddFileManifestMutation, useAddMetadataManifestMutation, useAddNewCredentialMutation, useAskQuestionMutation, useAuthorizeFromCredentialsMutation, useCoreDispatch, useCoreSelector, useDataLibrary, useDownloadFromGuppyMutation, useFetchUserDetailsQuery, useGeneralGQLQuery, useGetAISearchStatusQuery, useGetAISearchVersionQuery, useGetAccessibleDataQuery, useGetActivePayModelQuery, useGetAggMDSQuery, useGetAggsNoFilterSelfQuery, useGetAggsQuery, useGetAllFieldsForTypeQuery, useGetArrayTypes, useGetAuthzMappingsQuery, useGetCSRFQuery, useGetCohortManifestQuery, useGetCountsQuery, useGetCredentialsQuery, useGetCrosswalkDataQuery, useGetDataQuery, useGetDictionaryQuery, useGetDownloadQuery, useGetExternalLoginsQuery, useGetFederatedLoginStatus, useGetFieldCountSummaryQuery, useGetFieldsForIndexQuery, useGetFileFromManifestQuery, useGetFileManifestQuery, useGetIndexAggMDSQuery, useGetIndexFields, useGetJWKKeysQuery, useGetLoginProvidersQuery, useGetMDSQuery, useGetManifestServiceStatusQuery, useGetMetadataByIdQuery, useGetMetadataFromManifestQuery, useGetMetadataManifestQuery, useGetProjectsDetailsQuery, useGetProjectsQuery, useGetRawDataAndTotalCountsQuery, useGetSharedFieldsForIndexQuery, useGetSowerJobListQuery, useGetSowerJobStatusQuery, useGetSowerOutputQuery, useGetSowerServiceStatusQuery, useGetStatus, useGetSubAggsQuery, useGetSubmissionGraphQLQuery, useGetSubmissionsQuery, useGetTagsQuery, useGetWorkspaceOptionsQuery, useGetWorkspacePayModelsQuery, useGetWorkspaceStatusQuery, useGraphQLQuery, useIsExternalConnectedQuery, useIsUserLoggedIn, useLaunchWorkspaceMutation, useLazyFetchUserDetailsQuery, useLazyGeneralGQLQuery, useLazyGetAggsQuery, useLazyGetAuthzMappingsQuery, useLazyGetCSRFQuery, useLazyGetCrosswalkDataQuery, useLazyGetDownloadQuery, useLazyGetExternalLoginsQuery, useLazyGetManifestServiceStatusQuery, useLazyGetProjectsQuery, useLazyGetSowerJobListQuery, useLazyGetSubmissionGraphQLQuery, useLazyIsExternalConnectedQuery, useLazyRequestQuery, usePrevious, useRemoveCredentialMutation, useRequestQuery, useSetCurrentPayModelMutation, useSubmitSowerJobMutation, useTerminateWorkspaceMutation, useUserAuth, userHasCreateOrUpdateOnAnyProject, userHasDataUpload, userHasMethodForServiceOnProject, userHasMethodForServiceOnResource, userHasMethodOnAnyProject, userHasSheepdogProgramAdmin, userHasSheepdogProjectAdmin };
4351
4598
  //# sourceMappingURL=index.js.map