Skip to content

Commit

Permalink
feat: use dataset_id instead of title for dataset summary and file qu…
Browse files Browse the repository at this point in the history
…eries (#4273) (#4274)

* feat: use dataset_id instead of title for dataset summary and file queries (#4273)

* refactor: linting (#4273)

---------

Co-authored-by: Fran McDade <[email protected]>
  • Loading branch information
frano-m and Fran McDade authored Nov 19, 2024
1 parent da831d0 commit eec90b7
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 11 deletions.
80 changes: 70 additions & 10 deletions app/viewModelBuilders/azul/anvil-cmg/common/viewModelBuilders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import React from "react";
import {
ANVIL_CMG_CATEGORY_KEY,
ANVIL_CMG_CATEGORY_LABEL,
DATASET_RESPONSE,
} from "../../../../../site-config/anvil-cmg/category";
import {
ROUTE_EXPORT_TO_TERRA,
Expand Down Expand Up @@ -462,20 +463,19 @@ export const buildDRSURI = (

/**
* Build props for ExportCurrentQuery component.
* @param _ - Void.
* @param datasetsResponse - Response model returned from datasets API.
* @param viewContext - View context.
* @returns model to be used as props for the ExportCurrentQuery component.
*/
export const buildExportCurrentQuery = (
_: Void,
viewContext: ViewContext<Void>
datasetsResponse: DatasetsResponse,
viewContext: ViewContext<DatasetsResponse>
): React.ComponentProps<typeof C.ExportCurrentQuery> => {
const {
fileManifestState: { filters, isFacetsLoading },
} = viewContext;
return {
isLoading: isFacetsLoading,
queries: getExportCurrentQueries(filters),
isLoading: viewContext.fileManifestState.isFacetsLoading,
queries: getExportCurrentQueries(
getExportCurrentQuerySelectedFilters(datasetsResponse, viewContext)
),
};
};

Expand Down Expand Up @@ -974,6 +974,19 @@ function getDatasetStatusBadge(
};
}

/**
* Returns dataset ID from the given datasets response.
* @param datasetsResponse - Response model return from datasets API.
* @returns dataset ID.
*/
export function getDatasetId(datasetsResponse: DatasetsResponse): string {
return processEntityValue(
datasetsResponse.datasets,
"dataset_id",
LABEL.NONE
);
}

/**
* Returns dataset title from the given datasets response.
* @param datasetsResponse - Response model return from datasets API.
Expand All @@ -997,6 +1010,44 @@ export function getExportCurrentQueries(filters: Filters): CurrentQuery[] {
return filters.map((filter) => mapCurrentQuery(filter, categoryKeyLabel));
}

/**
* Returns the export current query selected filters for the given file manifest state.
* @param datasetsResponse - Response model return from datasets API.
* @param viewContext - View context.
* @returns export current query selected filters.
*/
export function getExportCurrentQuerySelectedFilters(
datasetsResponse: DatasetsResponse,
viewContext: ViewContext<DatasetsResponse>
): Filters {
if (DATASET_RESPONSE.DATASETS in datasetsResponse) {
return getExportEntityCurrentQuerySelectedFilters(
datasetsResponse,
viewContext
);
}
return viewContext.fileManifestState.filters;
}

/**
* Returns the export entity current query selected filters for the given file manifest state.
* Dataset ID is filtered out from the current filters query, and dataset title is added.
* @param datasetsResponse - Response model return from datasets API.
* @param viewContext - View context.
* @returns export entity current query selected filters.
*/
export function getExportEntityCurrentQuerySelectedFilters(
datasetsResponse: DatasetsResponse,
viewContext: ViewContext<DatasetsResponse>
): Filters {
const filters = viewContext.fileManifestState.filters.filter(filterDatasetId);
const datasetTitleFilter: SelectedFilter = {
categoryKey: ANVIL_CMG_CATEGORY_KEY.DATASET_TITLE,
value: [getDatasetTitle(datasetsResponse)],
};
return [datasetTitleFilter, ...filters];
}

/**
* Returns the export entity filters for the given datasets response.
* @param datasetsResponse - Response model return from datasets API.
Expand All @@ -1005,8 +1056,8 @@ export function getExportCurrentQueries(filters: Filters): CurrentQuery[] {
function getExportEntityFilters(datasetsResponse: DatasetsResponse): Filters {
return [
{
categoryKey: ANVIL_CMG_CATEGORY_KEY.DATASET_TITLE,
value: [getDatasetTitle(datasetsResponse)],
categoryKey: ANVIL_CMG_CATEGORY_KEY.DATASET_ID,
value: [getDatasetId(datasetsResponse)],
},
];
}
Expand Down Expand Up @@ -1147,6 +1198,15 @@ function getFormFacets(fileManifestState: FileManifestState): FormFacet {
};
}

/**
* Boolean to filter out any selected filters that have dataset ID as the category key.
* @param filter - Selected filter.
* @returns true if the filter category key is not dataset ID.
*/
function filterDatasetId(filter: SelectedFilter): boolean {
return filter.categoryKey !== ANVIL_CMG_CATEGORY_KEY.DATASET_ID;
}

/**
* Returns true if the response is accessible, or when the response is ready.
* @param datasetsResponse - Response model return from datasets API.
Expand Down
6 changes: 5 additions & 1 deletion site-config/anvil-cmg/category.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const ANVIL_CMG_CATEGORY_KEY = {
BIOSAMPLE_TYPE: "biosample_type",
DATASET_ACCESSIBLE: "datasets.accessible",
DATASET_CONSENT_GROUP: "datasets.consent_group",
DATASET_ID: "dataset_id",
DATASET_ID: "datasets.dataset_id",
DATASET_REGISTERED_ID: "datasets.registered_identifier",
DATASET_TITLE: "datasets.title",
DIAGNOSE_DISEASE: "diagnoses.disease",
Expand Down Expand Up @@ -55,3 +55,7 @@ export const ANVIL_CMG_CATEGORY_LABEL = {
LIBRARY_ID: "Library Id",
PREP_MATERIAL_NAME: "Library Preparation",
};

export const DATASET_RESPONSE = {
DATASETS: "datasets",
};

0 comments on commit eec90b7

Please sign in to comment.