diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx index 8f8bc253e..74fd6d4cb 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx @@ -1,23 +1,36 @@ +import { GeneOntologyFilter } from 'app/components/AnnotationFilter/GeneOntologyFilter' import { AnnotatedObjectNameFilter, AnnotatedObjectShapeTypeFilter, FilterSection, } from 'app/components/Filters' -import { useDatasets } from 'app/hooks/useDatasets' +import { useDatasetsFilterData } from 'app/hooks/useDatasetsFilterData' import { useI18n } from 'app/hooks/useI18n' -export function AnnotationMetadataFilterSection() { - const { objectNames, objectShapeTypes } = useDatasets() +export function AnnotationMetadataFilterSection({ + depositionPageVariant, +}: { + depositionPageVariant?: boolean +}) { + const { objectNames, objectShapeTypes } = useDatasetsFilterData() const { t } = useI18n() return ( + {depositionPageVariant && ( +

+ {t('depositionAnnotationsOnly')} +

+ )} + + {depositionPageVariant && } +
) diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/DatasetFilter.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/DatasetFilter.tsx index 349c0a7f4..21c68fd84 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/DatasetFilter.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/DatasetFilter.tsx @@ -1,6 +1,6 @@ +import { ErrorBoundary } from 'app/components/ErrorBoundary' import { FilterPanel } from 'app/components/Filters' -import { ErrorBoundary } from '../ErrorBoundary' import { AnnotationMetadataFilterSection } from './AnnotationMetadataFilterSection' import { HardwareFilterSection } from './HardwareFilterSection' import { IncludedContentsFilterSection } from './IncludedContentsFilterSection' @@ -9,11 +9,19 @@ import { SampleAndExperimentFilterSection } from './SampleAndExperimentFilterSec import { TiltSeriesMetadataFilterSection } from './TiltSeriesMetadataFilterSection' import { TomogramMetadataFilterSection } from './TomogramMetadataFilterSection' -export function DatasetFilter() { +export function DatasetFilter({ + depositionPageVariant, +}: { + depositionPageVariant?: boolean +}) { const filters = [ { logId: 'included-contents-filter', - filter: , + filter: ( + + ), }, { logId: 'name-or-id-filter', @@ -37,7 +45,11 @@ export function DatasetFilter() { }, { logId: 'annotation-metadata-filter', - filter: , + filter: ( + + ), }, ] diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/HardwareFilterSection.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/HardwareFilterSection.tsx index b7c1e681b..62c427ec9 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/HardwareFilterSection.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/HardwareFilterSection.tsx @@ -2,13 +2,13 @@ import { useMemo } from 'react' import { FilterSection, SelectFilter } from 'app/components/Filters' import { QueryParams } from 'app/constants/query' -import { useDatasets } from 'app/hooks/useDatasets' +import { useDatasetsFilterData } from 'app/hooks/useDatasetsFilterData' import { useFilter } from 'app/hooks/useFilter' import { i18n } from 'app/i18n' import { BaseFilterOption } from 'app/types/filter' export function HardwareFilterSection() { - const { cameraManufacturers } = useDatasets() + const { cameraManufacturers } = useDatasetsFilterData() const cameraManufacturerOptions = useMemo( () => cameraManufacturers.map((value) => ({ value })), diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/IncludedContentsFilterSection.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/IncludedContentsFilterSection.tsx index 072b497a4..2313b52f1 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/IncludedContentsFilterSection.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/IncludedContentsFilterSection.tsx @@ -27,7 +27,11 @@ const NUMBER_OF_RUN_OPTIONS: NumberOfRunsFilterOption[] = [ const AVAILABLE_FILES_CLASS_NAME = 'select-available-files' const MEETS_ALL_LABEL_ID = 'meets-all' -export function IncludedContentsFilterSection() { +export function IncludedContentsFilterSection({ + depositionPageVariant, +}: { + depositionPageVariant?: boolean +}) { const { updateValue, includedContents: { availableFiles, numberOfRuns }, @@ -95,7 +99,9 @@ export function IncludedContentsFilterSection() { return ( - + + {t('withDepositionData')} +

+ ) : undefined + } />
) diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/SampleAndExperimentFilterSection.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/SampleAndExperimentFilterSection.tsx index 5ff31ef53..7481e820e 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/SampleAndExperimentFilterSection.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/SampleAndExperimentFilterSection.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react' import { FilterSection, SelectFilter } from 'app/components/Filters' import { QueryParams } from 'app/constants/query' -import { useDatasets } from 'app/hooks/useDatasets' +import { useDatasetsFilterData } from 'app/hooks/useDatasetsFilterData' import { useFilter } from 'app/hooks/useFilter' import { i18n } from 'app/i18n' import { BaseFilterOption } from 'app/types/filter' @@ -12,7 +12,7 @@ export function SampleAndExperimentFilterSection() { updateValue, sampleAndExperimentConditions: { organismNames }, } = useFilter() - const { organismNames: allOrganismNames } = useDatasets() + const { organismNames: allOrganismNames } = useDatasetsFilterData() const organismNameOptions = useMemo( () => allOrganismNames.map((name) => ({ value: name })), diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/TomogramMetadataFilterSection.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/TomogramMetadataFilterSection.tsx index 16b61f75c..ec2dae486 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/TomogramMetadataFilterSection.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/TomogramMetadataFilterSection.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react' import { FilterSection, SelectFilter } from 'app/components/Filters' import { QueryParams } from 'app/constants/query' -import { useDatasets } from 'app/hooks/useDatasets' +import { useDatasetsFilterData } from 'app/hooks/useDatasetsFilterData' import { useFilter } from 'app/hooks/useFilter' import { i18n } from 'app/i18n' import { @@ -36,7 +36,8 @@ export function TomogramMetadataFilterSection() { )! }, [fiducialAlignmentStatus]) - const { reconstructionMethods, reconstructionSoftwares } = useDatasets() + const { reconstructionMethods, reconstructionSoftwares } = + useDatasetsFilterData() const reconstructionMethodOptions = useMemo( () => reconstructionMethods.map((value) => ({ value })), diff --git a/frontend/packages/data-portal/app/components/Filters/BooleanFilter.tsx b/frontend/packages/data-portal/app/components/Filters/BooleanFilter.tsx index 661941321..16ae4335a 100644 --- a/frontend/packages/data-portal/app/components/Filters/BooleanFilter.tsx +++ b/frontend/packages/data-portal/app/components/Filters/BooleanFilter.tsx @@ -5,10 +5,12 @@ import { cns } from 'app/utils/cns' import styles from './Filters.module.css' export function BooleanFilter({ + caption, label, onChange, value, }: { + caption?: string label: string onChange(value: boolean): void value: boolean @@ -19,6 +21,7 @@ export function BooleanFilter({ checked={value} onChange={(event) => onChange(event.target.checked)} label={label} + caption={caption} /> ) diff --git a/frontend/packages/data-portal/app/components/Filters/GroundTruthAnnotationFilter.tsx b/frontend/packages/data-portal/app/components/Filters/GroundTruthAnnotationFilter.tsx index 5635689c9..c134bf54f 100644 --- a/frontend/packages/data-portal/app/components/Filters/GroundTruthAnnotationFilter.tsx +++ b/frontend/packages/data-portal/app/components/Filters/GroundTruthAnnotationFilter.tsx @@ -4,7 +4,11 @@ import { useI18n } from 'app/hooks/useI18n' import { BooleanFilter } from './BooleanFilter' -export function GroundTruthAnnotationFilter() { +export function GroundTruthAnnotationFilter({ + depositionPageVariant, +}: { + depositionPageVariant?: boolean +}) { const { t } = useI18n() const { updateValue, @@ -12,12 +16,24 @@ export function GroundTruthAnnotationFilter() { } = useFilter() return ( - - updateValue(QueryParams.GroundTruthAnnotation, value ? 'true' : null) - } - value={isGroundTruthEnabled} - /> + <> + + updateValue(QueryParams.GroundTruthAnnotation, value ? 'true' : null) + } + value={isGroundTruthEnabled} + // FIXME: once sds upgraded to 0.20.x uncomment this + // caption={ + // depositionPageVariant ? t('depositionAnnotationsOnly') : undefined + // } + /> + {/* FIXME: once sds upgraded to 0.20.x delete below line and remove fragment wrapper */} + {depositionPageVariant && ( +

+ {t('depositionAnnotationsOnly')} +

+ )} + ) } diff --git a/frontend/packages/data-portal/app/components/Filters/SelectFilter.tsx b/frontend/packages/data-portal/app/components/Filters/SelectFilter.tsx index 1666e9a97..281cd3333 100644 --- a/frontend/packages/data-portal/app/components/Filters/SelectFilter.tsx +++ b/frontend/packages/data-portal/app/components/Filters/SelectFilter.tsx @@ -4,7 +4,7 @@ import { Value, } from '@czi-sds/components' import { isArray, isEqual } from 'lodash-es' -import { useCallback, useMemo } from 'react' +import { ReactNode, useCallback, useMemo } from 'react' import { BaseFilterOption } from 'app/types/filter' import { cns } from 'app/utils/cns' @@ -20,6 +20,7 @@ export function SelectFilter< Multiple extends boolean = false, >({ className, + details, groupBy: groupByProp, label, multiple, @@ -31,6 +32,7 @@ export function SelectFilter< value, }: { className?: string + details?: ReactNode groupBy?: (option: Value) => string label: string multiple?: Multiple @@ -109,6 +111,15 @@ export function SelectFilter< className: cns(popperClassName, multiple && styles.popper), }, }} + InputDropdownProps={ + details + ? { + value: details, + sdsStyle: 'minimal', + sdsType: 'label', + } + : undefined + } onChange={(nextOptions) => { if (isEqual(nextOptions, sdsValue)) { return diff --git a/frontend/packages/data-portal/app/graphql/getBrowseDatasets.server.ts b/frontend/packages/data-portal/app/graphql/getBrowseDatasets.server.ts index 3083c36d8..620c9c153 100644 --- a/frontend/packages/data-portal/app/graphql/getBrowseDatasets.server.ts +++ b/frontend/packages/data-portal/app/graphql/getBrowseDatasets.server.ts @@ -63,30 +63,6 @@ const GET_DATASETS_DATA_QUERY = gql(` count } } - - organism_names: datasets(distinct_on: organism_name) { - organism_name - } - - camera_manufacturers: tiltseries(distinct_on: camera_manufacturer) { - camera_manufacturer - } - - reconstruction_methods: tomograms(distinct_on: reconstruction_method) { - reconstruction_method - } - - reconstruction_softwares: tomograms(distinct_on: reconstruction_software) { - reconstruction_software - } - - object_names: annotations(distinct_on: object_name) { - object_name - } - - object_shape_types: annotation_files(distinct_on: shape_type) { - shape_type - } } `) diff --git a/frontend/packages/data-portal/app/graphql/getDatasetsFilterData.server.ts b/frontend/packages/data-portal/app/graphql/getDatasetsFilterData.server.ts new file mode 100644 index 000000000..7a62f36fb --- /dev/null +++ b/frontend/packages/data-portal/app/graphql/getDatasetsFilterData.server.ts @@ -0,0 +1,57 @@ +import type { ApolloClient, NormalizedCacheObject } from '@apollo/client' + +import { gql } from 'app/__generated__' +import { Datasets_Bool_Exp } from 'app/__generated__/graphql' + +const GET_DATASETS_FILTER_DATA_QUERY = gql(` + query GetDatasetsFilterData( + $filter: datasets_bool_exp, + ) { + organism_names: datasets(where: $filter, distinct_on: organism_name) { + organism_name + } + + camera_manufacturers: tiltseries(distinct_on: camera_manufacturer) { + camera_manufacturer + } + + reconstruction_methods: tomograms(distinct_on: reconstruction_method) { + reconstruction_method + } + + reconstruction_softwares: tomograms(distinct_on: reconstruction_software) { + reconstruction_software + } + + object_names: annotations(distinct_on: object_name) { + object_name + } + + object_shape_types: annotation_files(distinct_on: shape_type) { + shape_type + } + } +`) + +export async function getDatasetsFilterData({ + client, + filter = {}, +}: { + client: ApolloClient + filter: Datasets_Bool_Exp +}) { + const start = performance.now() + + const results = await client.query({ + query: GET_DATASETS_FILTER_DATA_QUERY, + variables: { + filter, + }, + }) + + const end = performance.now() + // eslint-disable-next-line no-console + console.log(`getDatasetsFilterData query perf: ${end - start}ms`) + + return results +} diff --git a/frontend/packages/data-portal/app/hooks/useDatasets.ts b/frontend/packages/data-portal/app/hooks/useDatasets.ts index 7bd093546..61cdc5efc 100644 --- a/frontend/packages/data-portal/app/hooks/useDatasets.ts +++ b/frontend/packages/data-portal/app/hooks/useDatasets.ts @@ -1,4 +1,3 @@ -import { isString } from 'lodash-es' import { useMemo } from 'react' import { useTypedLoaderData } from 'remix-typedjson' @@ -7,7 +6,9 @@ import { GetDatasetsDataQuery } from 'app/__generated__/graphql' export type Dataset = GetDatasetsDataQuery['datasets'][number] export function useDatasets() { - const data = useTypedLoaderData() + const { datasetsData: data } = useTypedLoaderData<{ + datasetsData: GetDatasetsDataQuery + }>() return useMemo( () => ({ @@ -16,39 +17,11 @@ export function useDatasets() { filteredDatasetCount: data.filtered_datasets_aggregate.aggregate?.count ?? 0, - - organismNames: data.organism_names - .map((value) => value.organism_name) - .filter(isString), - - cameraManufacturers: data.camera_manufacturers.map( - (value) => value.camera_manufacturer, - ), - - reconstructionMethods: data.reconstruction_methods.map( - (value) => value.reconstruction_method, - ), - - reconstructionSoftwares: data.reconstruction_softwares.map( - (value) => value.reconstruction_software, - ), - - objectNames: data.object_names.map((value) => value.object_name), - - objectShapeTypes: data.object_shape_types.map( - (value) => value.shape_type, - ), }), [ - data.camera_manufacturers, data.datasets, data.datasets_aggregate.aggregate?.count, data.filtered_datasets_aggregate.aggregate?.count, - data.object_names, - data.object_shape_types, - data.organism_names, - data.reconstruction_methods, - data.reconstruction_softwares, ], ) } diff --git a/frontend/packages/data-portal/app/hooks/useDatasetsFilterData.ts b/frontend/packages/data-portal/app/hooks/useDatasetsFilterData.ts new file mode 100644 index 000000000..76aaf47b4 --- /dev/null +++ b/frontend/packages/data-portal/app/hooks/useDatasetsFilterData.ts @@ -0,0 +1,45 @@ +import { isString } from 'lodash-es' +import { useMemo } from 'react' +import { useTypedLoaderData } from 'remix-typedjson' + +import { GetDatasetsFilterDataQuery } from 'app/__generated__/graphql' + +export function useDatasetsFilterData() { + const { datasetsFilterData: data } = useTypedLoaderData<{ + datasetsFilterData: GetDatasetsFilterDataQuery + }>() + + return useMemo( + () => ({ + organismNames: data.organism_names + .map((value) => value.organism_name) + .filter(isString), + + cameraManufacturers: data.camera_manufacturers.map( + (value) => value.camera_manufacturer, + ), + + reconstructionMethods: data.reconstruction_methods.map( + (value) => value.reconstruction_method, + ), + + reconstructionSoftwares: data.reconstruction_softwares.map( + (value) => value.reconstruction_software, + ), + + objectNames: data.object_names.map((value) => value.object_name), + + objectShapeTypes: data.object_shape_types.map( + (value) => value.shape_type, + ), + }), + [ + data.organism_names, + data.camera_manufacturers, + data.reconstruction_methods, + data.reconstruction_softwares, + data.object_names, + data.object_shape_types, + ], + ) +} diff --git a/frontend/packages/data-portal/app/hooks/useDepositionById.ts b/frontend/packages/data-portal/app/hooks/useDepositionById.ts index 5ac30a603..aeb6b4626 100644 --- a/frontend/packages/data-portal/app/hooks/useDepositionById.ts +++ b/frontend/packages/data-portal/app/hooks/useDepositionById.ts @@ -13,7 +13,9 @@ export type Deposition = NonUndefined & { } export function useDepositionById() { - const data = useTypedLoaderData() + const { depositionData: data } = useTypedLoaderData<{ + depositionData: GetDepositionByIdQuery + }>() const objectNames = useMemo( () => diff --git a/frontend/packages/data-portal/app/routes/browse-data.datasets.tsx b/frontend/packages/data-portal/app/routes/browse-data.datasets.tsx index c52cd47f5..849d98ffa 100644 --- a/frontend/packages/data-portal/app/routes/browse-data.datasets.tsx +++ b/frontend/packages/data-portal/app/routes/browse-data.datasets.tsx @@ -8,6 +8,7 @@ import { DatasetFilter } from 'app/components/DatasetFilter' import { NoResults } from 'app/components/NoResults' import { TablePageLayout } from 'app/components/TablePageLayout' import { getBrowseDatasets } from 'app/graphql/getBrowseDatasets.server' +import { getDatasetsFilterData } from 'app/graphql/getDatasetsFilterData.server' import { useDatasets } from 'app/hooks/useDatasets' import { useFilter } from 'app/hooks/useFilter' import { useI18n } from 'app/hooks/useI18n' @@ -26,15 +27,21 @@ export async function loader({ request }: LoaderFunctionArgs) { orderBy = sort === 'asc' ? Order_By.Asc : Order_By.Desc } - const { data } = await getBrowseDatasets({ - orderBy, - page, - query, - client: apolloClient, - params: url.searchParams, - }) + const [datasetsResponse, datasetsFilterResponse] = await Promise.all([ + getBrowseDatasets({ + orderBy, + page, + query, + client: apolloClient, + params: url.searchParams, + }), + getDatasetsFilterData({ client: apolloClient, filter: {} }), + ]) - return json(data) + return json({ + datasetsData: datasetsResponse.data, + datasetsFilterData: datasetsFilterResponse.data, + }) } export default function BrowseDatasetsPage() { diff --git a/frontend/packages/data-portal/app/routes/depositions.$id.tsx b/frontend/packages/data-portal/app/routes/depositions.$id.tsx index 4d42b2a07..2e34d9b43 100644 --- a/frontend/packages/data-portal/app/routes/depositions.$id.tsx +++ b/frontend/packages/data-portal/app/routes/depositions.$id.tsx @@ -5,10 +5,12 @@ import { json, LoaderFunctionArgs, redirect } from '@remix-run/server-runtime' import { Order_By } from 'app/__generated__/graphql' import { apolloClient } from 'app/apollo.server' +import { DatasetFilter } from 'app/components/DatasetFilter' import { DatasetsTable } from 'app/components/Deposition/DatasetsTable' import { DepositionHeader } from 'app/components/Deposition/DepositionHeader' import { TablePageLayout } from 'app/components/TablePageLayout' import { QueryParams } from 'app/constants/query' +import { getDatasetsFilterData } from 'app/graphql/getDatasetsFilterData.server' import { getDepositionById } from 'app/graphql/getDepositionById.server' import { useDepositionById } from 'app/hooks/useDepositionById' import { useI18n } from 'app/hooks/useI18n' @@ -46,22 +48,33 @@ export async function loader({ params, request }: LoaderFunctionArgs) { orderBy = sort === 'asc' ? Order_By.Asc : Order_By.Desc } - const { data } = await getDepositionById({ - id, - orderBy, - page, - client: apolloClient, - params: url.searchParams, - }) + const [depositionResponse, datasetsFilterReponse] = await Promise.all([ + getDepositionById({ + id, + orderBy, + page, + client: apolloClient, + params: url.searchParams, + }), + getDatasetsFilterData({ + client: apolloClient, + filter: {}, + // TODO: uncomment below when deposition fields added to backend + // filter: { deposition_id: { _eq: id } }, + }), + ]) - if (data.deposition === null) { + if (depositionResponse.data.deposition === null) { throw new Response(null, { status: 404, statusText: `Deposition with ID ${id} not found`, }) } - return json(data) + return json({ + depositionData: depositionResponse.data, + datasetsFilterData: datasetsFilterReponse.data, + }) } export default function DatasetByIdPage() { @@ -78,6 +91,7 @@ export default function DatasetByIdPage() { totalCount: deposition.datasets_aggregate.aggregate?.count ?? 0, filteredCount: deposition.filtered_datasets_aggregate.aggregate?.count ?? 0, + filterPanel: , countLabel: t('datasets'), }, ]} diff --git a/frontend/packages/data-portal/e2e/pageObjects/filters/filtersActor.ts b/frontend/packages/data-portal/e2e/pageObjects/filters/filtersActor.ts index 1645ba860..bbe6407bb 100644 --- a/frontend/packages/data-portal/e2e/pageObjects/filters/filtersActor.ts +++ b/frontend/packages/data-portal/e2e/pageObjects/filters/filtersActor.ts @@ -8,6 +8,7 @@ import { } from 'app/__generated__/graphql' import { getBrowseDatasets } from 'app/graphql/getBrowseDatasets.server' import { getDatasetById } from 'app/graphql/getDatasetById.server' +import { getDatasetsFilterData } from 'app/graphql/getDatasetsFilterData.server' import { getRunById } from 'app/graphql/getRunById.server' import { FiltersPage } from './filtersPage' @@ -370,29 +371,19 @@ export class FiltersActor { // However, we may want to add the reverse check to ensure there are no extra values in the UI list public async expectOrganismNamesFromDataToMatchFilterList({ client, - pageNumber = 1, testQuery, - url, - queryParamsList, - serialize, }: { client: ApolloClient - pageNumber?: number testQuery: string url: string - queryParamsList?: QueryParamObjectType[] - serialize?: (value: string) => string }) { - const browseDatasetsData = await this.getDatasetsDataUsingParams({ + const { data: datasetsFilterData } = await getDatasetsFilterData({ client, - pageNumber, - url, - queryParamsList, - serialize, + filter: {}, }) const organismNames = getFilteredOrganismNamesFromData({ - browseDatasetsData, + datasetsFilterData, testQuery, }) diff --git a/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts b/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts index 6845783c4..435957852 100644 --- a/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts +++ b/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts @@ -4,6 +4,7 @@ import { isString } from 'lodash-es' import { GetDatasetByIdQuery, GetDatasetsDataQuery, + GetDatasetsFilterDataQuery, GetRunByIdQuery, } from 'app/__generated__/graphql' import { AVAILABLE_FILES_VALUE_TO_I18N_MAP } from 'app/components/DatasetFilter/constants' @@ -132,13 +133,13 @@ export const serializeAvailableFiles = (value: string): string => { } export function getFilteredOrganismNamesFromData({ - browseDatasetsData, + datasetsFilterData, testQuery, }: { - browseDatasetsData: GetDatasetsDataQuery + datasetsFilterData: GetDatasetsFilterDataQuery testQuery: string }) { - const organismNames = browseDatasetsData.organism_names + const organismNames = datasetsFilterData.organism_names .map((name) => name.organism_name) .filter(isString) diff --git a/frontend/packages/data-portal/public/locales/en/translation.json b/frontend/packages/data-portal/public/locales/en/translation.json index ef473a546..f726e2281 100644 --- a/frontend/packages/data-portal/public/locales/en/translation.json +++ b/frontend/packages/data-portal/public/locales/en/translation.json @@ -103,6 +103,7 @@ "datasetsTab": "Datasets {{count}}", "dataSummary": "Data Summary", "deposition": "Deposition", + "depositionAnnotationsOnly": "Deposition annotations only", "depositionData": "Deposition Data", "depositionDate": "Deposition Date", "depositionId": "Deposition ID",