diff --git a/nmdc_server/ingest/omics_processing.py b/nmdc_server/ingest/omics_processing.py index 3cc1f755..4f6bc561 100644 --- a/nmdc_server/ingest/omics_processing.py +++ b/nmdc_server/ingest/omics_processing.py @@ -148,7 +148,13 @@ def get_poolable_replicate_manifest( return omics_processing_id -def load_omics_processing(db: Session, obj: Dict[str, Any], mongodb: Database, logger, config_map): +def load_omics_processing( # noqa: C901 + db: Session, + obj: Dict[str, Any], + mongodb: Database, + logger, + config_map, +): logger = get_logger(__name__) input_ids: list[str] = obj.pop("has_input", [""]) biosample_input_ids: set[str] = set() @@ -172,8 +178,18 @@ def load_omics_processing(db: Session, obj: Dict[str, Any], mongodb: Database, l data_objects = obj.pop("has_output", []) obj["study_id"] = obj.pop("associated_studies", [None])[0] - obj["analyte_category"] = omics_types[obj["analyte_category"].lower()] - obj["omics_type"] = omics_types[obj["analyte_category"].lower()] + original_analyte_category = obj["analyte_category"].lower() + obj["analyte_category"] = omics_types[original_analyte_category] + obj["omics_type"] = omics_types[original_analyte_category] + + # Get amplicon specific fields + if obj["omics_type"] == "Amplicon": + obj["target_gene"] = obj.pop("target_gene", None) + target_subfragment = obj.pop("target_subfragment", None) + if isinstance(target_subfragment, dict) and "has_raw_value" in target_subfragment: + obj["target_subfragment"] = target_subfragment["has_raw_value"] + else: + obj["target_subfragment"] = target_subfragment # Get instrument name instrument_id = obj.pop("instrument_used", []) diff --git a/web/src/components/AmpliconObjectDataTable.vue b/web/src/components/AmpliconObjectDataTable.vue new file mode 100644 index 00000000..3f835ee4 --- /dev/null +++ b/web/src/components/AmpliconObjectDataTable.vue @@ -0,0 +1,52 @@ + + diff --git a/web/src/components/SampleListExpansion.vue b/web/src/components/SampleListExpansion.vue index b9c70210..d362fe09 100644 --- a/web/src/components/SampleListExpansion.vue +++ b/web/src/components/SampleListExpansion.vue @@ -4,6 +4,7 @@ import { computed, defineComponent, PropType } from '@vue/composition-api'; import { fieldDisplayName } from '@/util'; import { BiosampleSearchResult } from '@/data/api'; import DataObjectTable from './DataObjectTable.vue'; +import AmpliconObjectDataTable from './AmpliconObjectDataTable.vue'; const buttonOrder = [ 'metagenome', @@ -11,11 +12,13 @@ const buttonOrder = [ 'proteomics', 'metabolomics', 'organic matter characterization', + 'amplicon', ]; export default defineComponent({ components: { DataObjectTable, + AmpliconObjectDataTable, }, props: { @@ -38,6 +41,11 @@ export default defineComponent({ return props.expanded.resultId === props.result.id && props.expanded.omicsProcessingId === omicsProcessingId; } + function isDisabled(omicsType: string, projects: any[]) { + // TODO this is a temporary fix for the amplicon button + // until we have a proper way to handle amplicon data. + return projects[0].omics_data.length === 0 && omicsType !== 'Amplicon'; + } const filteredOmicsProcessing = computed(() => Object.entries(groupBy( props.result.omics_processing, @@ -47,9 +55,9 @@ export default defineComponent({ const bi = buttonOrder.indexOf(bgroup.toLowerCase()); return ai - bi; })); - return { isOpen, + isDisabled, filteredOmicsProcessing, fieldDisplayName, }; @@ -69,7 +77,7 @@ export default defineComponent({ x-small :outlined="!isOpen(projects[0].id)" :color="isOpen(projects[0].id) ? 'primary' : 'default'" - :disabled="projects[0].omics_data.length == 0 ? true : false" + :disabled="isDisabled(omicsType, projects)" class="mr-2 mt-2" @click="() => $emit('open-details', projects[0].id)" @@ -80,7 +88,16 @@ export default defineComponent({