@gen3/frontend 0.12.65 → 0.12.67

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 (148) hide show
  1. package/dist/dts/components/Content/FormContent.d.ts +2 -1
  2. package/dist/dts/components/Content/FormContent.d.ts.map +1 -1
  3. package/dist/dts/components/Content/FormContent.js +2 -2
  4. package/dist/dts/components/Content/FormContent.js.map +1 -1
  5. package/dist/dts/components/facets/EnumFacet.js +1 -2
  6. package/dist/dts/components/facets/EnumFacet.js.map +1 -1
  7. package/dist/dts/components/facets/FacetControlsHeader.d.ts.map +1 -1
  8. package/dist/dts/components/facets/FacetControlsHeader.js +2 -2
  9. package/dist/dts/components/facets/FacetControlsHeader.js.map +1 -1
  10. package/dist/dts/components/facets/FacetEnumList.d.ts.map +1 -1
  11. package/dist/dts/components/facets/FacetEnumList.js +18 -7
  12. package/dist/dts/components/facets/FacetEnumList.js.map +1 -1
  13. package/dist/dts/components/facets/components.d.ts +1 -1
  14. package/dist/dts/components/facets/components.d.ts.map +1 -1
  15. package/dist/dts/components/facets/components.js +1 -1
  16. package/dist/dts/components/facets/components.js.map +1 -1
  17. package/dist/dts/components/facets/createFacetCard.d.ts.map +1 -1
  18. package/dist/dts/components/facets/createFacetCard.js +1 -1
  19. package/dist/dts/components/facets/createFacetCard.js.map +1 -1
  20. package/dist/dts/components/facets/createFacetCard.unit.test.d.ts +2 -0
  21. package/dist/dts/components/facets/createFacetCard.unit.test.d.ts.map +1 -0
  22. package/dist/dts/components/facets/createFacetCard.unit.test.js +56 -0
  23. package/dist/dts/components/facets/createFacetCard.unit.test.js.map +1 -0
  24. package/dist/dts/components/facets/utils.d.ts.map +1 -1
  25. package/dist/dts/components/facets/utils.js +1 -0
  26. package/dist/dts/components/facets/utils.js.map +1 -1
  27. package/dist/dts/components/facets/utils.unit.test.js +40 -2
  28. package/dist/dts/components/facets/utils.unit.test.js.map +1 -1
  29. package/dist/dts/features/CohortBuilder/QueryExpression/LogicalOperatorLabel.d.ts +8 -0
  30. package/dist/dts/features/CohortBuilder/QueryExpression/LogicalOperatorLabel.d.ts.map +1 -0
  31. package/dist/dts/features/CohortBuilder/QueryExpression/LogicalOperatorLabel.js +4 -0
  32. package/dist/dts/features/CohortBuilder/QueryExpression/LogicalOperatorLabel.js.map +1 -0
  33. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpression.d.ts +2 -1
  34. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpression.d.ts.map +1 -1
  35. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpression.js +2 -1
  36. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpression.js.map +1 -1
  37. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionContext.d.ts +1 -0
  38. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionContext.d.ts.map +1 -1
  39. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionContext.js +1 -0
  40. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionContext.js.map +1 -1
  41. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.d.ts.map +1 -1
  42. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.js +4 -3
  43. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.js.map +1 -1
  44. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.unit.test.d.ts +2 -0
  45. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.unit.test.d.ts.map +1 -0
  46. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.unit.test.js +72 -0
  47. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.unit.test.js.map +1 -0
  48. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.d.ts +1 -0
  49. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.d.ts.map +1 -1
  50. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.js +39 -28
  51. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.js.map +1 -1
  52. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.unit.test.d.ts +2 -0
  53. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.unit.test.d.ts.map +1 -0
  54. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.unit.test.js +38 -0
  55. package/dist/dts/features/CohortBuilder/QueryExpression/QueryRepresentation.unit.test.js.map +1 -0
  56. package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest → GenericRegistrationAccessRequest}/FormContentViews.d.ts +3 -2
  57. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/FormContentViews.d.ts.map +1 -0
  58. package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest → GenericRegistrationAccessRequest}/FormContentViews.js +3 -3
  59. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/FormContentViews.js.map +1 -0
  60. package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest → GenericRegistrationAccessRequest}/FormContentViews.stories.d.ts +3 -1
  61. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/FormContentViews.stories.d.ts.map +1 -0
  62. package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest → GenericRegistrationAccessRequest}/FormContentViews.stories.js +1 -1
  63. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/FormContentViews.stories.js.map +1 -0
  64. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/GenericRegistrationAccessRequestOutcome.d.ts +7 -0
  65. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/GenericRegistrationAccessRequestOutcome.d.ts.map +1 -0
  66. package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest/StudyRegistrationAccessRequestOutcome.js → GenericRegistrationAccessRequest/GenericRegistrationAccessRequestOutcome.js} +3 -3
  67. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/GenericRegistrationAccessRequestOutcome.js.map +1 -0
  68. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/index.d.ts +8 -0
  69. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/index.d.ts.map +1 -0
  70. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/index.js +10 -0
  71. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/index.js.map +1 -0
  72. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/types.d.ts +35 -0
  73. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/types.d.ts.map +1 -0
  74. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/types.js.map +1 -0
  75. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/useGenericRegistration.d.ts +12 -0
  76. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/useGenericRegistration.d.ts.map +1 -0
  77. package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest/useStudyRegistration.js → GenericRegistrationAccessRequest/useGenericRegistration.js} +31 -44
  78. package/dist/dts/features/DiscoveryForms/GenericRegistrationAccessRequest/useGenericRegistration.js.map +1 -0
  79. package/dist/dts/features/Study/StudyDetails/StudyDetailsHeaderButtons.d.ts.map +1 -1
  80. package/dist/dts/features/Study/StudyDetails/StudyDetailsHeaderButtons.js +40 -35
  81. package/dist/dts/features/Study/StudyDetails/StudyDetailsHeaderButtons.js.map +1 -1
  82. package/dist/dts/features/Workspace/utils.js +1 -1
  83. package/dist/dts/features/Workspace/utils.js.map +1 -1
  84. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/data.d.ts +2 -2
  85. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/data.d.ts.map +1 -1
  86. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/data.js +3 -3
  87. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/data.js.map +1 -1
  88. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/index.d.ts +6 -6
  89. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/index.d.ts.map +1 -1
  90. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/index.js +5 -5
  91. package/dist/dts/pages/StudyForms/StudyRegistrationAccessRequest/index.js.map +1 -1
  92. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/data.d.ts +4 -0
  93. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/data.d.ts.map +1 -0
  94. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/data.js +32 -0
  95. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/data.js.map +1 -0
  96. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/index.d.ts +9 -0
  97. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/index.d.ts.map +1 -0
  98. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/index.js +12 -0
  99. package/dist/dts/pages/StudyForms/VLMDSubmissionAccessRequest/index.js.map +1 -0
  100. package/dist/index/cjs/{QueryPanel-DNGXxrpC.js → QueryPanel-aGaJfxNv.js} +2 -2
  101. package/dist/index/cjs/{QueryPanel-DNGXxrpC.js.map → QueryPanel-aGaJfxNv.js.map} +1 -1
  102. package/dist/index/cjs/{index-7sUtTikC.js → index-Br1lKHDn.js} +199 -99
  103. package/dist/index/cjs/index-Br1lKHDn.js.map +1 -0
  104. package/dist/index/cjs/index.js +1 -1
  105. package/dist/index/esm/{QueryPanel-C3JVntIb.js → QueryPanel-C0nNrzSx.js} +2 -2
  106. package/dist/index/esm/{QueryPanel-C3JVntIb.js.map → QueryPanel-C0nNrzSx.js.map} +1 -1
  107. package/dist/index/esm/{index-B_0ks9Pi.js → index-CDgLCUE3.js} +201 -101
  108. package/dist/index/esm/index-CDgLCUE3.js.map +1 -0
  109. package/dist/index/esm/index.js +1 -1
  110. package/dist/index.d.ts +4 -1
  111. package/dist/pages/cjs/{CohortBuilder-DircXqXL.js → CohortBuilder-rF69uCsJ.js} +2 -2
  112. package/dist/pages/cjs/{CohortBuilder-DircXqXL.js.map → CohortBuilder-rF69uCsJ.js.map} +1 -1
  113. package/dist/pages/cjs/{QueryPanel-qYWbo2Cb.js → QueryPanel-JOL_9n8f.js} +2 -2
  114. package/dist/pages/cjs/{QueryPanel-qYWbo2Cb.js.map → QueryPanel-JOL_9n8f.js.map} +1 -1
  115. package/dist/pages/cjs/{index-BQzYPjdE.js → index-Dbd5m3GQ.js} +200 -100
  116. package/dist/pages/cjs/index-Dbd5m3GQ.js.map +1 -0
  117. package/dist/pages/cjs/index.js +1 -1
  118. package/dist/pages/esm/{CohortBuilder-CI9PAFLd.js → CohortBuilder-D3EM-FLr.js} +2 -2
  119. package/dist/pages/esm/{CohortBuilder-CI9PAFLd.js.map → CohortBuilder-D3EM-FLr.js.map} +1 -1
  120. package/dist/pages/esm/{QueryPanel-BEqldpr5.js → QueryPanel-0Znj4lFa.js} +2 -2
  121. package/dist/pages/esm/{QueryPanel-BEqldpr5.js.map → QueryPanel-0Znj4lFa.js.map} +1 -1
  122. package/dist/pages/esm/{index-BoZwM5wd.js → index-CxrByAhv.js} +202 -102
  123. package/dist/pages/esm/index-CxrByAhv.js.map +1 -0
  124. package/dist/pages/esm/index.js +1 -1
  125. package/dist/pages.d.ts +1 -0
  126. package/package.json +4 -3
  127. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/FormContentViews.d.ts.map +0 -1
  128. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/FormContentViews.js.map +0 -1
  129. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/FormContentViews.stories.d.ts.map +0 -1
  130. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/FormContentViews.stories.js.map +0 -1
  131. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/StudyRegistrationAccessRequestOutcome.d.ts +0 -7
  132. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/StudyRegistrationAccessRequestOutcome.d.ts.map +0 -1
  133. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/StudyRegistrationAccessRequestOutcome.js.map +0 -1
  134. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/index.d.ts +0 -7
  135. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/index.d.ts.map +0 -1
  136. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/index.js +0 -11
  137. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/index.js.map +0 -1
  138. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/types.d.ts +0 -20
  139. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/types.d.ts.map +0 -1
  140. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/types.js.map +0 -1
  141. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/useStudyRegistration.d.ts +0 -11
  142. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/useStudyRegistration.d.ts.map +0 -1
  143. package/dist/dts/features/DiscoveryForms/StudyRegistrationAccessRequest/useStudyRegistration.js.map +0 -1
  144. package/dist/index/cjs/index-7sUtTikC.js.map +0 -1
  145. package/dist/index/esm/index-B_0ks9Pi.js.map +0 -1
  146. package/dist/pages/cjs/index-BQzYPjdE.js.map +0 -1
  147. package/dist/pages/esm/index-BoZwM5wd.js.map +0 -1
  148. /package/dist/dts/features/DiscoveryForms/{StudyRegistrationAccessRequest → GenericRegistrationAccessRequest}/types.js +0 -0
@@ -10,7 +10,7 @@ import _, { toString, capitalize as capitalize$1, isArray, omitBy, some, isNumbe
10
10
  import Link from 'next/link';
11
11
  import { FaExternalLinkAlt, FaExclamationTriangle, FaExclamation, FaQuestion, FaAngleDoubleLeft, FaAngleDoubleRight, FaCaretDown, FaEyeSlash, FaEye, FaExclamationCircle, FaPencilAlt, FaUndo, FaPlus, FaCircle, FaVideo, FaRegQuestionCircle, FaGraduationCap, FaUser, FaRegStopCircle } from 'react-icons/fa';
12
12
  import { Icon } from '@iconify-icon/react';
13
- import { useCoreSelector, selectUserDetails, selectUserAuthStatus, isAuthenticated, WorkspaceStatus, useGetAuthzResourcesQuery, useUserRequestQuery, useCreateRequestMutation, getRemoteSupportServiceRegistry, isHttpStatusError, GEN3_COMMONS_NAME, useAskQuestionMutation, useGetAggsQuery, Accessibility, useGetStatsAggregationsQuery, fieldNameToLabel, isObject as isObject$1, isIncludes, selectAvailableCohorts, useLazyGetObjectIdsQuery, EmptyFilterSet as EmptyFilterSet$1, selectCurrentCohortFilters, useCustomRangeQuery, usePrevious, selectCohortFilters, filterSetToOperation, useCoreDispatch, selectAllCohorts as selectAllCohorts$1, selectCurrentCohort as selectCurrentCohort$1, setCurrentCohortId as setCurrentCohortId$1, updateCohortName as updateCohortName$1, createNewCohort as createNewCohort$1, duplicateCohort, removeCohort as removeCohort$1, setCohortFilter as setCohortFilter$1, updateCohortFilter as updateCohortFilter$1, removeCohortFilter as removeCohortFilter$1, clearCohortFilters as clearCohortFilters$1, handleOperation, buildNestedFilterForOperation, selectCurrentCohortId, selectCurrentCohortModified, selectCurrentCohortSaved, setCohortIndexFilters, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortName, selectShouldShareFilters, selectSharedFilters, useLazyGetCountsQuery, selectIndexFilters, isOperationWithField, extractEnumFilterValue, selectIndexedFilterByName, isOperatorWithFieldAndArrayOfOperands, trimFirstfieldNameToLabel, setShouldShareFilters, CohortStorage, createAppStore, GEN3_API, GEN3_FENCE_API, useIsUserLoggedIn, GEN3_DOMAIN, DataLibraryStoreMode, useDataLibrary, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useGetIndexAggMDSQuery, useGetRawDataAndTotalCountsQuery, humanify, selectCart, selectCartItem, removeItemsFromCart, CART_LIMIT, addItemsToCart, isJSONValue, showModal, Modals, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, coreStore, fetchJSONDataFromURL, GEN3_MANIFEST_API, useGetCountsQuery, isIntersection, useGeneralGQLQuery, convertFilterSetToGqlFilter, customQueryStrForField, selectAllCohortFiltersCollapsed, toggleCohortBuilderAllFilters, getGen3AppId, createAppApiForRTKQ, useGetDictionaryQuery, hideModal, GEN3_GUPPY_API, HttpMethod, groupSharedFields, useGetCSRFQuery, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, selectCurrentModal, useGetAuthzMappingsQuery, useGetExternalLoginsQuery, useGetLoginProvidersQuery, GEN3_REDIRECT_URL, useGetProjectsDetailsQuery, useGetSubmissionsQuery, useLaunchWorkspaceMutation, useTerminateWorkspaceMutation, useGetWorkspacePayModelsQuery, selectActiveWorkspaceStatus, setRequestedWorkspaceStatus, RequestedWorkspaceStatus, setActiveWorkspaceStatus, isFetchBaseQueryError, isSerializedError, normalizeRtkError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectRequestedWorkspaceStatus, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, useGetWorkspaceStatusQuery, GEN3_WORKSPACE_API, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, HTTPUserFriendlyErrorMessages, getFederatedLoginStatus, queryMultipleMDSRecords, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery, selectHeadersWithCSRFToken, selectCSRFToken } from '@gen3/core';
13
+ import { useCoreSelector, selectUserDetails, selectUserAuthStatus, isAuthenticated, WorkspaceStatus, useGetAuthzResourcesQuery, useUserRequestQuery, useCreateRequestMutation, getRemoteSupportServiceRegistry, isHttpStatusError, GEN3_COMMONS_NAME, useAskQuestionMutation, useGetAggsQuery, Accessibility, useGetStatsAggregationsQuery, fieldNameToLabel, isObject as isObject$1, isIncludes, selectAvailableCohorts, useLazyGetObjectIdsQuery, EmptyFilterSet as EmptyFilterSet$1, selectCurrentCohortFilters, useCustomRangeQuery, usePrevious, selectCohortFilters, filterSetToOperation, useCoreDispatch, selectAllCohorts as selectAllCohorts$1, selectCurrentCohort as selectCurrentCohort$1, setCurrentCohortId as setCurrentCohortId$1, updateCohortName as updateCohortName$1, createNewCohort as createNewCohort$1, duplicateCohort, removeCohort as removeCohort$1, setCohortFilter as setCohortFilter$1, updateCohortFilter as updateCohortFilter$1, removeCohortFilter as removeCohortFilter$1, clearCohortFilters as clearCohortFilters$1, handleOperation, buildNestedFilterForOperation, selectCurrentCohortId, selectCurrentCohortModified, selectCurrentCohortSaved, setCohortIndexFilters, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortName, selectShouldShareFilters, selectSharedFilters, useLazyGetCountsQuery, selectIndexFilters, isOperationWithField, extractEnumFilterValue, selectIndexedFilterByName, isOperatorWithFieldAndArrayOfOperands, trimFirstfieldNameToLabel, setShouldShareFilters, CohortStorage, createAppStore, GEN3_API, GEN3_FENCE_API, selectAuthzMappingData, userHasMethodForServiceOnResource as userHasMethodForServiceOnResource$1, useIsUserLoggedIn, GEN3_DOMAIN, DataLibraryStoreMode, useDataLibrary, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, useGetAggMDSQuery, useGetIndexAggMDSQuery, useGetRawDataAndTotalCountsQuery, humanify, selectCart, selectCartItem, removeItemsFromCart, CART_LIMIT, addItemsToCart, isJSONValue, showModal, Modals, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, coreStore, fetchJSONDataFromURL, GEN3_MANIFEST_API, useGetCountsQuery, isIntersection, useGeneralGQLQuery, convertFilterSetToGqlFilter, customQueryStrForField, selectAllCohortFiltersCollapsed, toggleCohortBuilderAllFilters, getGen3AppId, createAppApiForRTKQ, useGetDictionaryQuery, hideModal, GEN3_GUPPY_API, HttpMethod, groupSharedFields, useGetCSRFQuery, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, selectCurrentModal, useGetAuthzMappingsQuery, useGetExternalLoginsQuery, useGetLoginProvidersQuery, GEN3_REDIRECT_URL, useGetProjectsDetailsQuery, useGetSubmissionsQuery, useLaunchWorkspaceMutation, useTerminateWorkspaceMutation, useGetWorkspacePayModelsQuery, selectActiveWorkspaceStatus, setRequestedWorkspaceStatus, RequestedWorkspaceStatus, setActiveWorkspaceStatus, isFetchBaseQueryError, isSerializedError, normalizeRtkError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectRequestedWorkspaceStatus, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, useGetWorkspaceStatusQuery, GEN3_WORKSPACE_API, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, HTTPUserFriendlyErrorMessages, getFederatedLoginStatus, queryMultipleMDSRecords, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery, selectHeadersWithCSRFToken, selectCSRFToken } from '@gen3/core';
14
14
  import { useDeepCompareMemo, useDeepCompareEffect, useDeepCompareCallback } from 'use-deep-compare';
15
15
  import 'swr';
16
16
  import { getCookie } from 'cookies-next';
@@ -21,7 +21,7 @@ import { notifications, cleanNotifications, showNotification } from '@mantine/no
21
21
  import { useResizeObserver, useElementSize, useClickOutside, useScrollIntoView, useDisclosure, useDidUpdate, mergeRefs, useReducedMotion, useDebouncedValue, useViewportSize, useMediaQuery, useLocalStorage, useClipboard, useFullscreenDocument, getHotkeyHandler } from '@mantine/hooks';
22
22
  import { modals } from '@mantine/modals';
23
23
  import Markdown from 'react-markdown';
24
- import { MdLogin, MdInfo, MdClose, MdKeyboardArrowUp, MdKeyboardArrowDown, MdPlayArrow, MdArrowDropDown, MdAddCircle, MdRemoveCircle, MdSearch, MdDownload, MdTrendingDown, MdReplay, MdHorizontalSplit, MdOutlineHorizontalSplit, MdBarChart, MdAdd, MdContentCopy, MdOutlineArrowBack, MdOutlineArrowForward, MdWarning, MdExpandLess, MdExpandMore, MdFlip, MdLockOutline, MdLibraryAdd, MdKeyboardDoubleArrowLeft, MdOutlineWatchLater, MdOutlineLockOpen, MdOutlineLock, MdUndo, MdDragIndicator, MdShoppingCart, MdPerson, MdSave, MdGroup, MdOutlineBarChart, MdOutlineSearch, MdFormatQuote, MdDelete, MdOutlineRemoveCircle } from 'react-icons/md';
24
+ import { MdLogin, MdInfo, MdClose, MdKeyboardArrowUp, MdKeyboardArrowDown, MdPlayArrow, MdArrowDropDown, MdAddCircle, MdRemoveCircle, MdSearch, MdDownload, MdTrendingDown, MdReplay, MdHorizontalSplit, MdOutlineHorizontalSplit, MdBarChart, MdAdd, MdContentCopy, MdOutlineArrowBack, MdOutlineArrowForward, MdWarning, MdExpandLess, MdExpandMore, MdSettings, MdFlip, MdLockOutline, MdLibraryAdd, MdKeyboardDoubleArrowLeft, MdOutlineWatchLater, MdOutlineLockOpen, MdOutlineLock, MdUndo, MdDragIndicator, MdShoppingCart, MdPerson, MdSave, MdGroup, MdOutlineBarChart, MdOutlineSearch, MdFormatQuote, MdDelete, MdOutlineRemoveCircle } from 'react-icons/md';
25
25
  import { AiOutlineLogin, AiOutlineDash } from 'react-icons/ai';
26
26
  import { PiDotsThreeCircleThin, PiTrash, PiSparkleFill, PiCaretUpFill, PiCaretDownFill, PiCaretUpDownFill, PiCaretCircleDownFill } from 'react-icons/pi';
27
27
  import Head from 'next/head';
@@ -1825,7 +1825,7 @@ function hashCode(str) {
1825
1825
  * @param {string} props.keyString - For mantine form to identify elements
1826
1826
  * @param {FormContentProps['form']} props.form - @mantine/form useForm() object
1827
1827
  * @returns {JSX.Element} A JSX element that renders the content dynamically based on the input type and properties.
1828
- */ const FormContent = ({ text, label, initialValue, dropdownData, description, placeholder, disabled, required, tooltip, className = '', type = ContentType.Text, keyString, form })=>{
1828
+ */ const FormContent = ({ text, label, initialValue, dropdownData, description, placeholder, disabled, required, tooltip, className = '', autosize = false, type = ContentType.Text, keyString, form })=>{
1829
1829
  //code for tooltips on form items
1830
1830
  let inputContainer;
1831
1831
  if (tooltip) {
@@ -1951,7 +1951,8 @@ function hashCode(str) {
1951
1951
  disabled: disabled || form.submitting,
1952
1952
  required: required,
1953
1953
  inputContainer: inputContainer,
1954
- ...form.getInputProps(keyString)
1954
+ ...form.getInputProps(keyString),
1955
+ autosize: autosize
1955
1956
  }, form.key(keyString));
1956
1957
  }
1957
1958
  default:
@@ -8551,6 +8552,7 @@ const OverflowTooltippedLabel = ({ children, label, className = 'flex-grow font-
8551
8552
 
8552
8553
  const QueryExpressionContext = /*#__PURE__*/ React__default.createContext({
8553
8554
  displayOnly: false,
8555
+ showLogicalOperators: false,
8554
8556
  fieldsAreFlat: true,
8555
8557
  cohortId: null,
8556
8558
  cohortName: 'default',
@@ -8611,6 +8613,12 @@ const QueryExpressionsExpandedContext = /*#__PURE__*/ React__default.createConte
8611
8613
  ()=>null
8612
8614
  ]);
8613
8615
 
8616
+ const LogicalOperatorLabel = ({ operator, className = '' })=>/*#__PURE__*/ jsx("span", {
8617
+ className: `flex items-center justify-center px-1 text-xs font-bold uppercase text-base-darkest ${className}`,
8618
+ "data-testid": `query-logical-operator-${operator}`,
8619
+ children: operator
8620
+ });
8621
+
8614
8622
  const RemoveButton$1 = ({ value })=>/*#__PURE__*/ jsx(ActionIcon, {
8615
8623
  size: "xs",
8616
8624
  color: "base.0",
@@ -8672,9 +8680,23 @@ const isRangeOperation = (x)=>{
8672
8680
  const isNestedFilter = (x)=>{
8673
8681
  return 'path' in x;
8674
8682
  };
8675
- const IncludeExcludeQueryElement = ({ index, field, path, operator, operands, displayOnly = false })=>{
8683
+ const buildSetOperation = (field, operator, operands, combineMode)=>combineMode === 'and' ? {
8684
+ operator: 'and',
8685
+ operands: operands.map((value)=>({
8686
+ operator,
8687
+ field,
8688
+ operands: [
8689
+ value
8690
+ ]
8691
+ }))
8692
+ } : {
8693
+ operator,
8694
+ field,
8695
+ operands
8696
+ };
8697
+ const IncludeExcludeQueryElement = ({ index, field, path, operator, operands, displayOnly = false, combineMode = 'or' })=>{
8676
8698
  const [queryExpressionsExpanded, setQueryExpressionsExpanded] = useContext(QueryExpressionsExpandedContext);
8677
- const { cohortId: currentCohortId, useRemoveFilter, useUpdateFilters, shouldShowSummary, fieldsAreFlat } = useContext(QueryExpressionContext);
8699
+ const { cohortId: currentCohortId, useRemoveFilter, useUpdateFilters, shouldShowSummary, fieldsAreFlat, showLogicalOperators } = useContext(QueryExpressionContext);
8678
8700
  const removeCohortFilter = useRemoveFilter();
8679
8701
  const updateCohortFilter = useUpdateFilters();
8680
8702
  useDeepCompareEffect(()=>{
@@ -8765,45 +8787,45 @@ const IncludeExcludeQueryElement = ({ index, field, path, operator, operands, di
8765
8787
  gap: "xs",
8766
8788
  children: operandsArray.map((x, i)=>{
8767
8789
  const value = x.toString();
8768
- return /*#__PURE__*/ jsx(Badge, {
8769
- "data-testid": `query-rep-${field}-${value}-${i}`,
8770
- variant: "filled",
8771
- color: "accent.5",
8772
- size: "md",
8773
- className: `normal-case items-center max-w-[162px] cursor-pointer hover:bg-accent-darker pl-2 ${displayOnly ? 'pr-3' : 'pr-0'}`,
8774
- rightSection: !displayOnly && /*#__PURE__*/ jsx(RemoveButton$1, {
8775
- value: value
8776
- }),
8777
- onClick: ()=>{
8778
- if (displayOnly) return;
8779
- const newOperands = operandsArray.filter((o)=>o !== x);
8780
- if (currentCohortId && newOperands.length === 0) {
8781
- setQueryExpressionsExpanded({
8782
- type: 'clear',
8783
- cohortId: currentCohortId,
8784
- field: fieldToUpdate
8785
- });
8786
- removeCohortFilter(index, fieldToUpdate);
8787
- } else {
8788
- updateCohortFilter(index, fieldToUpdate, fieldsAreFlat ? {
8789
- operator: operator,
8790
- field: field,
8791
- operands: newOperands
8792
- } : buildNestedFilterForOperation(fieldToUpdate, {
8793
- operator: operator,
8794
- field: field,
8795
- operands: newOperands
8796
- }));
8797
- }
8798
- },
8799
- children: /*#__PURE__*/ jsx(OverflowTooltippedLabel, {
8800
- label: value,
8801
- className: "flex-grow text-md font-content",
8802
- children: /*#__PURE__*/ jsx(QueryRepresentationLabel, {
8803
- value: value.toString(),
8804
- field: field
8790
+ return /*#__PURE__*/ jsxs(React__default.Fragment, {
8791
+ children: [
8792
+ showLogicalOperators && i > 0 && /*#__PURE__*/ jsx(LogicalOperatorLabel, {
8793
+ operator: combineMode
8794
+ }),
8795
+ /*#__PURE__*/ jsx(Badge, {
8796
+ "data-testid": `query-rep-${field}-${value}-${i}`,
8797
+ variant: "filled",
8798
+ color: "accent.5",
8799
+ size: "md",
8800
+ className: `normal-case items-center max-w-[162px] cursor-pointer hover:bg-accent-darker pl-2 ${displayOnly ? 'pr-3' : 'pr-0'}`,
8801
+ rightSection: !displayOnly && /*#__PURE__*/ jsx(RemoveButton$1, {
8802
+ value: value
8803
+ }),
8804
+ onClick: ()=>{
8805
+ if (displayOnly) return;
8806
+ const newOperands = operandsArray.filter((o)=>o !== x);
8807
+ if (currentCohortId && newOperands.length === 0) {
8808
+ setQueryExpressionsExpanded({
8809
+ type: 'clear',
8810
+ cohortId: currentCohortId,
8811
+ field: fieldToUpdate
8812
+ });
8813
+ removeCohortFilter(index, fieldToUpdate);
8814
+ } else {
8815
+ const updatedOperation = buildSetOperation(field, operator, newOperands, combineMode);
8816
+ updateCohortFilter(index, fieldToUpdate, fieldsAreFlat ? updatedOperation : buildNestedFilterForOperation(fieldToUpdate, updatedOperation));
8817
+ }
8818
+ },
8819
+ children: /*#__PURE__*/ jsx(OverflowTooltippedLabel, {
8820
+ label: value,
8821
+ className: "flex-grow text-md font-content",
8822
+ children: /*#__PURE__*/ jsx(QueryRepresentationLabel, {
8823
+ value: value.toString(),
8824
+ field: field
8825
+ })
8826
+ })
8805
8827
  })
8806
- })
8828
+ ]
8807
8829
  }, `query-rep-${field}-${value}-${i}`);
8808
8830
  })
8809
8831
  })
@@ -9051,6 +9073,25 @@ const QueryElement = ({ index, field, path, children, displayOnly = false })=>{
9051
9073
  upper: f.operands[1]
9052
9074
  }, f.operands[0].field);
9053
9075
  }
9076
+ const enumOperands = f.operands.filter(isIncludes);
9077
+ const field = enumOperands[0]?.field;
9078
+ if (enumOperands.length === f.operands.length && field && enumOperands.every((operand)=>operand.field === field)) {
9079
+ return /*#__PURE__*/ jsx(QueryElement, {
9080
+ field: field,
9081
+ index: this.index,
9082
+ path: this.path,
9083
+ displayOnly: this.displayOnly,
9084
+ children: /*#__PURE__*/ jsx(IncludeExcludeQueryElement, {
9085
+ field: field,
9086
+ operator: enumOperands[0].operator,
9087
+ operands: enumOperands.flatMap((operand)=>operand.operands),
9088
+ combineMode: "and",
9089
+ index: this.index,
9090
+ path: this.path,
9091
+ displayOnly: this.displayOnly
9092
+ })
9093
+ }, field);
9094
+ }
9054
9095
  // TODO: handle deeper nesting
9055
9096
  return null;
9056
9097
  };
@@ -9367,7 +9408,7 @@ const QueryExpressionSection = ({ index, showImportExport = false, displayOnly =
9367
9408
  const [filtersSectionCollapsed, setFiltersSectionCollapsed] = useState(true);
9368
9409
  const filtersRef = useRef(null);
9369
9410
  const [QESectionHeight, setQESectionHeight] = useState(0);
9370
- const { cohortName, cohortId, useClearCohortFilters, useGetFilters } = useContext(QueryExpressionContext);
9411
+ const { cohortName, cohortId, showLogicalOperators, useClearCohortFilters, useGetFilters } = useContext(QueryExpressionContext);
9371
9412
  const clearCohortFilters = useClearCohortFilters();
9372
9413
  const filters = useGetFilters(index);
9373
9414
  useDeepCompareEffect(()=>{
@@ -9508,8 +9549,16 @@ const QueryExpressionSection = ({ index, showImportExport = false, displayOnly =
9508
9549
  "data-testid": "text-no-active-cohort-filter",
9509
9550
  className: "flex items-center font-content h-10",
9510
9551
  children: "No filters currently applied."
9511
- }) : Object.keys(filters.root).map((k)=>{
9512
- return convertFilterToComponent(filters.root[k], index, '.', displayOnly);
9552
+ }) : Object.keys(filters.root).map((k, indexInFilters)=>{
9553
+ return /*#__PURE__*/ jsxs(React__default.Fragment, {
9554
+ children: [
9555
+ showLogicalOperators && indexInFilters > 0 && /*#__PURE__*/ jsx(LogicalOperatorLabel, {
9556
+ operator: filters.mode,
9557
+ className: "mr-1 mb-2"
9558
+ }),
9559
+ convertFilterToComponent(filters.root[k], index, '.', displayOnly)
9560
+ ]
9561
+ }, k);
9513
9562
  })
9514
9563
  })
9515
9564
  ]
@@ -9556,7 +9605,7 @@ const SUMMARY_THRESHOLD = 10;
9556
9605
  */ const DefaultShouldShowSummary = (field, count)=>{
9557
9606
  return count > SUMMARY_THRESHOLD;
9558
9607
  };
9559
- const QueryExpression = ({ index, shouldShowSummary = DefaultShouldShowSummary, hooks, fieldsAreFlat = true })=>{
9608
+ const QueryExpression = ({ index, shouldShowSummary = DefaultShouldShowSummary, hooks, fieldsAreFlat = true, showLogicalOperators = false })=>{
9560
9609
  const currentCohortId = useCoreSelector((state)=>selectCurrentCohortId(state));
9561
9610
  const currentCohortName = useCoreSelector((state)=>selectCurrentCohortName(state));
9562
9611
  return /*#__PURE__*/ jsx(QueryExpressionContext.Provider, {
@@ -9564,6 +9613,7 @@ const QueryExpression = ({ index, shouldShowSummary = DefaultShouldShowSummary,
9564
9613
  cohortName: currentCohortName,
9565
9614
  cohortId: currentCohortId,
9566
9615
  displayOnly: false,
9616
+ showLogicalOperators,
9567
9617
  fieldsAreFlat: fieldsAreFlat,
9568
9618
  shouldShowSummary: shouldShowSummary,
9569
9619
  useClearCohortFilters: ()=>{
@@ -9859,6 +9909,7 @@ const classifyFacets = (data, index, fieldMapping = [], facetDefinitionsFromConf
9859
9909
  moveValuesToBottom: facetDef?.moveValuesToBottom,
9860
9910
  excludeValues: facetDef?.excludeValues,
9861
9911
  defaultSort: facetDef?.defaultSort,
9912
+ showMatchModeSelector: facetDef?.showMatchModeSelector,
9862
9913
  valueLabel: facetDef?.valueLabel,
9863
9914
  range: facetDef?.range ? {
9864
9915
  minimum: facetDef.range?.minimum ?? Math.floor(Number(value[0].key[0])),
@@ -11121,7 +11172,7 @@ inline-flex
11121
11172
  items-center
11122
11173
  hover:text-primary-lightest
11123
11174
  `;
11124
- const controlsIconStyle = 'text-secondary-contrast hover:text-secondary-lighter';
11175
+ const controlsIconStyle = 'text-secondary-contrast hover:text-secondary-contrast-lighter';
11125
11176
  const FacetText = tw.div`
11126
11177
  text-secondary-contrast font-heading font-semibold text-sm break-words
11127
11178
  `;
@@ -11244,12 +11295,11 @@ flex items-start justify-between items-center flex-nowrap bg-secondary px-1.5 ro
11244
11295
  if (toggleExpandFilter) toggleExpandFilter(field, true);
11245
11296
  if (toggleSettings) toggleSettings();
11246
11297
  },
11247
- "aria-label": "Search",
11298
+ "aria-label": "Filter settings",
11248
11299
  className: header.iconStyle,
11249
- children: /*#__PURE__*/ jsx(Icon, {
11250
- width: 12,
11251
- height: 12,
11252
- icon: "gen3:settings",
11300
+ children: /*#__PURE__*/ jsx(MdSettings, {
11301
+ size: "1.35em",
11302
+ className: header.iconStyle,
11253
11303
  "aria-hidden": "true"
11254
11304
  })
11255
11305
  })
@@ -12570,8 +12620,8 @@ const FacetEnumList = ({ field, facetName, hooks, valueLabel, isSettings = false
12570
12620
  const searchInputRef = useRef(null);
12571
12621
  const settingRef = useRef(null);
12572
12622
  const [searchTerm, setSearchTerm] = useState('');
12573
- // const [combineMode, setCombineMode] = useState<'or' | 'and'>('or');
12574
12623
  const { data, enumFilters, combineMode, isSuccess, error } = hooks.useGetFacetData(field);
12624
+ const [selectedCombineMode, setSelectedCombineMode] = useState(combineMode ?? 'or');
12575
12625
  const [selectedEnums, setSelectedEnums] = useState(enumFilters ?? []);
12576
12626
  const totalCount = hooks?.useTotalCounts ? hooks.useTotalCounts() : 1;
12577
12627
  const clearFilters = hooks.useClearFilter();
@@ -12605,6 +12655,17 @@ const FacetEnumList = ({ field, facetName, hooks, valueLabel, isSettings = false
12605
12655
  }, [
12606
12656
  enumFilters
12607
12657
  ]);
12658
+ useEffect(()=>{
12659
+ // Existing filters are the source of truth when loading or externally
12660
+ // updating a cohort. Keep a user's selected mode when the facet is empty
12661
+ // so they can choose "Match all" before selecting values.
12662
+ if ((enumFilters?.length ?? 0) > 0) {
12663
+ setSelectedCombineMode(combineMode ?? 'or');
12664
+ }
12665
+ }, [
12666
+ combineMode,
12667
+ enumFilters
12668
+ ]);
12608
12669
  const maxValuesToDisplay = DEFAULT_VISIBLE_ITEMS$1;
12609
12670
  // update filters when checkbox is selected
12610
12671
  const handleChange = (value, checked)=>{
@@ -12619,13 +12680,15 @@ const FacetEnumList = ({ field, facetName, hooks, valueLabel, isSettings = false
12619
12680
  ] : [
12620
12681
  value
12621
12682
  ];
12622
- updateFacetEnum(field, updated, updateFacetFilters, clearFilters, combineMode);
12683
+ updateFacetEnum(field, updated, updateFacetFilters, clearFilters, selectedCombineMode);
12623
12684
  } else {
12624
12685
  const updated = selectedEnums?.filter((x)=>x !== value);
12625
- updateFacetEnum(field, updated ?? [], updateFacetFilters, clearFilters, combineMode);
12686
+ updateFacetEnum(field, updated ?? [], updateFacetFilters, clearFilters, selectedCombineMode);
12626
12687
  }
12627
12688
  };
12628
12689
  const handleCombineModeChange = (mode)=>{
12690
+ setSelectedCombineMode(mode);
12691
+ if ((selectedEnums?.length ?? 0) === 0) return;
12629
12692
  updateFacetEnum(field, selectedEnums ?? [], updateFacetFilters, clearFilters, mode);
12630
12693
  };
12631
12694
  const [facetChartData, setFacetChartData] = useState({
@@ -12760,23 +12823,24 @@ const FacetEnumList = ({ field, facetName, hooks, valueLabel, isSettings = false
12760
12823
  indicator: 'bg-accent text-accent-contrast'
12761
12824
  },
12762
12825
  ref: settingRef,
12763
- value: combineMode,
12826
+ value: selectedCombineMode,
12827
+ "aria-label": "How selected facet values are matched",
12764
12828
  onChange: (value)=>{
12765
12829
  handleCombineModeChange(value);
12766
12830
  },
12767
12831
  data: [
12768
12832
  {
12769
- label: 'AND',
12770
- value: 'and'
12833
+ label: 'Match any',
12834
+ value: 'or'
12771
12835
  },
12772
12836
  {
12773
- label: 'OR',
12774
- value: 'or'
12837
+ label: 'Match all',
12838
+ value: 'and'
12775
12839
  }
12776
12840
  ]
12777
12841
  }),
12778
12842
  /*#__PURE__*/ jsx(Tooltip, {
12779
- label: "Combine filters with AND or OR 2",
12843
+ label: "Match any includes cases with at least one selected value. Match all requires every selected value.",
12780
12844
  children: /*#__PURE__*/ jsx(Icon, {
12781
12845
  icon: "gen3:info",
12782
12846
  height: 12,
@@ -13612,6 +13676,7 @@ const createFacetCard = ({ facetDefinition, valueLabel, hooks: dataFunctions, fa
13612
13676
  width: width,
13613
13677
  hooks: dataFunctions,
13614
13678
  showPercent: showPercent,
13679
+ showSettings: facetDefinition?.showMatchModeSelector,
13615
13680
  sharedWithIndices: facetDefinition?.sharedWithIndices,
13616
13681
  defaultSort: facetDefinition?.defaultSort,
13617
13682
  moveValuesToBottom: facetDefinition?.moveValuesToBottom ?? [],
@@ -16417,17 +16482,11 @@ const SinglePageStudyDetailsPanel = ({ data, studyConfig, authorization })=>{
16417
16482
  });
16418
16483
  };
16419
16484
 
16420
- const userCanRegisterStudy = (userInfo, studyRegistrationAuthZ)=>{
16421
- const actions = userInfo?.authz && studyRegistrationAuthZ ? userInfo.authz[studyRegistrationAuthZ] : undefined;
16422
- const method = 'access';
16423
- const service = 'study_registration';
16424
- return actions?.some((x)=>(x.service === service || x.service === '*') && (x.method === method || x.method === '*')) ?? false;
16425
- };
16426
-
16427
16485
  const StudyDetailsHeaderButtons = ({ onClose, permalink })=>{
16428
16486
  const userInfo = useCoreSelector((state)=>selectUserDetails(state));
16429
16487
  const requiresLogin = !userInfo.active;
16430
16488
  const { discoveryConfig: config } = useDiscoveryContext();
16489
+ const router = useRouter();
16431
16490
  const index = config.minimalFieldMapping.uid;
16432
16491
  const { studyDetails } = useStudyContext();
16433
16492
  const studyUID = toString(studyDetails[index]);
@@ -16435,44 +16494,55 @@ const StudyDetailsHeaderButtons = ({ onClose, permalink })=>{
16435
16494
  const studyRegistrationAuthZ = studyDetails.registration_authz;
16436
16495
  const studyProjectNumber = studyDetails.project_number;
16437
16496
  const showSubmitButton = config.detailView.showSubmitButton;
16438
- const router = useRouter();
16439
- const isStudyRegisterable = userCanRegisterStudy(userInfo, studyRegistrationAuthZ);
16440
- const handleRegisterButtonClick = ()=>{
16497
+ const userAuthMapping = useCoreSelector((state)=>selectAuthzMappingData(state));
16498
+ const userHasStudyRegistrationAccess = userHasMethodForServiceOnResource$1('access', 'study_registration', toString(studyRegistrationAuthZ), userAuthMapping);
16499
+ const isStudyRegistered = studyDetails.is_registered;
16500
+ // Study is not yet registered — show register/request-access/login button
16501
+ const showStudyRegistrationButton = showSubmitButton && isStudyRegistered === false;
16502
+ // Study is registered — show appropriate VLMD submission button based on auth state
16503
+ const showSubmitVLMDButton = showSubmitButton && isStudyRegistered && !requiresLogin && userHasStudyRegistrationAccess;
16504
+ const showRequestVLMDAccessButton = showSubmitButton && isStudyRegistered && !requiresLogin && !userHasStudyRegistrationAccess;
16505
+ const showLoginToSubmitVLMDButton = showSubmitButton && isStudyRegistered && requiresLogin;
16506
+ const studyNavQuery = {
16507
+ studyUID,
16508
+ studyName,
16509
+ studyRegistrationAuthZ: toString(studyRegistrationAuthZ),
16510
+ studyProjectNumber
16511
+ };
16512
+ const handleStudyRegistrationClick = ()=>{
16441
16513
  if (requiresLogin) {
16442
16514
  void router.push('/Login');
16443
- } else if (isStudyRegisterable) {
16515
+ } else if (userHasStudyRegistrationAccess) {
16444
16516
  void router.push({
16445
16517
  pathname: '/study-reg',
16446
- query: {
16447
- studyUID: studyUID,
16448
- studyName: studyName,
16449
- studyRegistrationAuthZ: studyRegistrationAuthZ,
16450
- studyProjectNumber: studyProjectNumber
16451
- }
16518
+ query: studyNavQuery
16452
16519
  }, '/study-reg');
16453
16520
  } else {
16454
16521
  void router.push({
16455
16522
  pathname: '/study-reg/request-access',
16456
- query: {
16457
- studyUID: studyUID,
16458
- studyName: studyName,
16459
- studyRegistrationAuthZ: studyRegistrationAuthZ,
16460
- studyProjectNumber: studyProjectNumber
16461
- }
16523
+ query: studyNavQuery
16462
16524
  }, '/study-reg/request-access');
16463
16525
  }
16464
16526
  };
16465
- const submitButtonText = useMemo(()=>{
16466
- if (requiresLogin) {
16467
- return 'Login to Register This Study';
16468
- } else if (isStudyRegisterable) {
16469
- return 'Register Study';
16470
- } else {
16471
- return `Request Access to Register this Study`;
16472
- }
16527
+ const handleSubmitVLMDClick = ()=>{
16528
+ void router.push({
16529
+ pathname: '/vlmd-submission',
16530
+ query: studyNavQuery
16531
+ }, '/vlmd-submission');
16532
+ };
16533
+ const handleRequestVLMDAccessClick = ()=>{
16534
+ void router.push({
16535
+ pathname: '/vlmd-submission/request-access',
16536
+ query: studyNavQuery
16537
+ }, '/vlmd-submission/request-access');
16538
+ };
16539
+ const studyRegistrationButtonText = useMemo(()=>{
16540
+ if (requiresLogin) return 'Login to Register This Study';
16541
+ if (userHasStudyRegistrationAccess) return 'Register This Study';
16542
+ return 'Request Access to Register This Study';
16473
16543
  }, [
16474
16544
  requiresLogin,
16475
- isStudyRegisterable
16545
+ userHasStudyRegistrationAccess
16476
16546
  ]);
16477
16547
  return /*#__PURE__*/ jsxs(Fragment, {
16478
16548
  children: [
@@ -16482,15 +16552,45 @@ const StudyDetailsHeaderButtons = ({ onClose, permalink })=>{
16482
16552
  variant: "outline",
16483
16553
  children: "Back"
16484
16554
  }),
16485
- showSubmitButton && /*#__PURE__*/ jsx(Button, {
16555
+ showStudyRegistrationButton && /*#__PURE__*/ jsx(Button, {
16486
16556
  leftSection: /*#__PURE__*/ jsx(FiLogIn, {
16487
16557
  size: 14
16488
16558
  }),
16489
16559
  variant: "subtle",
16490
16560
  color: "black",
16491
16561
  size: "xs",
16492
- onClick: handleRegisterButtonClick,
16493
- children: submitButtonText
16562
+ onClick: handleStudyRegistrationClick,
16563
+ children: studyRegistrationButtonText
16564
+ }),
16565
+ showSubmitVLMDButton && /*#__PURE__*/ jsx(Button, {
16566
+ leftSection: /*#__PURE__*/ jsx(FiLogIn, {
16567
+ size: 14
16568
+ }),
16569
+ variant: "subtle",
16570
+ color: "black",
16571
+ size: "xs",
16572
+ onClick: handleSubmitVLMDClick,
16573
+ children: "Submit Variable-level Metadata"
16574
+ }),
16575
+ showRequestVLMDAccessButton && /*#__PURE__*/ jsx(Button, {
16576
+ leftSection: /*#__PURE__*/ jsx(FiLogIn, {
16577
+ size: 14
16578
+ }),
16579
+ variant: "subtle",
16580
+ color: "black",
16581
+ size: "xs",
16582
+ onClick: handleRequestVLMDAccessClick,
16583
+ children: "Request Access to Submit Variable-level Metadata"
16584
+ }),
16585
+ showLoginToSubmitVLMDButton && /*#__PURE__*/ jsx(Button, {
16586
+ leftSection: /*#__PURE__*/ jsx(FiLogIn, {
16587
+ size: 14
16588
+ }),
16589
+ variant: "subtle",
16590
+ color: "black",
16591
+ size: "xs",
16592
+ onClick: ()=>void router.push('/Login'),
16593
+ children: "Login to Submit Variable-level Metadata"
16494
16594
  }),
16495
16595
  /*#__PURE__*/ jsx(CopyButton, {
16496
16596
  value: permalink,
@@ -24303,7 +24403,7 @@ const DiscoveryPageGetServerSideProps = async ()=>{
24303
24403
  }
24304
24404
  };
24305
24405
 
24306
- const QueryPanel = dynamic(()=>import('./QueryPanel-BEqldpr5.js'), {
24406
+ const QueryPanel = dynamic(()=>import('./QueryPanel-0Znj4lFa.js'), {
24307
24407
  ssr: false
24308
24408
  });
24309
24409
  const QueryPage = ({ headerProps, footerProps, configuration: queryProps })=>{
@@ -24537,7 +24637,7 @@ const getActiveTab = (router)=>{
24537
24637
  else if (typeof activeTab === 'object') return activeTab[0];
24538
24638
  return undefined;
24539
24639
  };
24540
- const CohortBuilder = dynamic(()=>import('./CohortBuilder-CI9PAFLd.js'), {
24640
+ const CohortBuilder = dynamic(()=>import('./CohortBuilder-D3EM-FLr.js'), {
24541
24641
  ssr: false
24542
24642
  });
24543
24643
  const ExplorerPage = ({ headerProps, footerProps, explorerConfig, headerMetadata, tabsLayout, sharedFiltersMap })=>{
@@ -26995,7 +27095,7 @@ const ExternalLoginsStatus = ()=>{
26995
27095
  };
26996
27096
 
26997
27097
  const PaymentNumberToString = (x, undefinedValue = 'N/A', precision = 2)=>{
26998
- if (!x || Number.isNaN(x)) return undefinedValue;
27098
+ if (typeof x !== 'number' || Number.isNaN(x)) return undefinedValue;
26999
27099
  return x.toFixed(precision);
27000
27100
  };
27001
27101
 
@@ -32386,4 +32486,4 @@ const AnalysisPageGetServerSideProps = async ()=>{
32386
32486
  };
32387
32487
 
32388
32488
  export { ProfilePage as $, AISearchPage as A, ColorThemePageGetServerSideProps as B, CountsValue as C, DropdownPanel as D, ErrorCard as E, CrosswalkPage as F, CrosswalkPageGetServerSideProps as G, Custom403Page as H, Custom403PageGetServerSideProps as I, Custom404Page as J, Custom404PageGetServerSideProps as K, DictionaryPage as L, DataLibraryPage as M, DataLibraryPageGetServerSideProps as N, DictionaryPageGetServerSideProps as O, DiscoveryPageGetServerSideProps as P, QueryExpression as Q, DiscoveryPage as R, ExplorerPage as S, ExplorerPageGetServerSideProps as T, ExplorerPageGetServerSidePropsForConfigId as U, LandingPage as V, LandingPageGetServerSideProps as W, LoginPage as X, LoginPageGetServerSideProps as Y, NotebookLitePage as Z, NotebookLitePageGetStaticProps as _, processRangeData as a, ProfilePageGetServerSideProps as a0, QueryPage as a1, QueryPageGetServerSideProps as a2, RepositoryPage as a3, RepositoryPageGetServerSideProps as a4, SubmissionPageGetServerSideProps as a5, SubmissionPage as a6, TabbedCohortBuilderPage as a7, TabbedCohortBuilderPageGetServerSideProps as a8, WorkspaceNoAccessPage as a9, WorkspaceNoAccessPageServerSideProps as aa, WorkspacePage as ab, WorkspacePageGetServerSideProps as ac, GqlQueryEditor$1 as ad, useToggleExpandFilter as b, useFilterExpandedState as c, useClearFilters as d, extractRangeValues$1 as e, useGetFacetFilters as f, getAllFieldsFromFilterConfigs as g, useUpdateFilters as h, useSetCohortFilterCombineState as i, useCohortFilterCombineState as j, classifyFacets as k, DownloadsPanel as l, CollapsableCharts as m, Charts as n, ExplorerTable as o, processBucketData as p, CohortManager as q, removeIntersectionFromEnum as r, AISearchPageGetServerSideProps as s, toDisplayName$1 as t, useFieldNameToLabel as u, AnalysisPage as v, AnalysisPageGetServerSideProps as w, ClinicalDataAnalysisPage as x, ClinicalDataAnalysisServerSideProps as y, ColorThemePage as z };
32389
- //# sourceMappingURL=index-BoZwM5wd.js.map
32489
+ //# sourceMappingURL=index-CxrByAhv.js.map