diff --git a/src/views/import/ImportExperiment.vue b/src/views/import/ImportExperiment.vue index da6739f3..f55959f7 100644 --- a/src/views/import/ImportExperiment.vue +++ b/src/views/import/ImportExperiment.vue @@ -83,7 +83,7 @@ Import Summary

-
Observation Variables: {{ dynamicColumns.filter( obsVar => !obsVar.startsWith("TS:") ).length }} +
Observation Variables: {{ statistics.Observation_Variables.newObjectCount }}
New Observations: {{ statistics.Observations.newObjectCount }}
Existing Observations: {{ statistics.Existing_Observations.newObjectCount }} @@ -308,12 +308,19 @@ import {ImportObjectState} from "@/breeding-insight/model/import/ImportObjectSta import { GeoCoordinates } from '@/breeding-insight/model/GeoCoordinates'; import {ExperimentUserInput} from "@/breeding-insight/model/ExperimentUserInput"; import {StringFormatters} from "../../breeding-insight/utils/StringFormatters"; +import {TraitService} from "@/breeding-insight/service/TraitService"; +import {mapGetters} from "vuex"; +import {Program} from "@/breeding-insight/model/Program"; +import {Trait} from "@/breeding-insight/model/Trait"; @Component({ computed: { StringFormatters() { return StringFormatters - } + }, + ...mapGetters([ + 'activeProgram' + ]), }, components: { ImportInfoTemplateMessageBox, ConfirmImportMessageBox, ImportTemplate, AlertTriangleIcon, BasicInputField, ExpandableTable @@ -327,6 +334,19 @@ import {StringFormatters} from "../../breeding-insight/utils/StringFormatters"; }) export default class ImportExperiment extends ProgramsBase { + async mounted() { + // Hopefully no more than 100 ontology terms + let traitResponse = await TraitService.getTraits(this.activeProgram.id, {}, {pageSize: 100, page: 1}); + + if (traitResponse.value.metadata.pagination.totalCount > 100) { + this.$log.error("More than 100 traits detected while loading experiment import preview"); + } + + this.traits = traitResponse.value.result.data.map( + (trait: any) => trait.observationVariableName + ); + } + private experimentImportTemplateName = 'ExperimentsTemplateMap'; private confirmImportState: DataFormEventBusHandler = new DataFormEventBusHandler(); private phenotypeColumns?: Array = []; @@ -334,6 +354,10 @@ export default class ImportExperiment extends ProgramsBase { private experimentUserInput: ExperimentUserInput = new ExperimentUserInput(); private repeatObservationsCount = 10; + + private activeProgram!: Program; + private traits : String[] = []; + get showProceedDialog() { return this.experimentUserInput.overwrite; } @@ -415,7 +439,19 @@ export default class ImportExperiment extends ProgramsBase { } previewDataLoaded(dynamicColumns: String[]) { - this.phenotypeColumns = dynamicColumns; + + // To ensure correct phenotype mapping when multiple appends/create experiments on a single page load, + // reset the phenotypeColumns every time a new preview is loaded. + this.phenotypeColumns = []; + + for (const dynCol of dynamicColumns) { + if (this.traits.includes(dynCol)) { + this.phenotypeColumns.push(dynCol); + } else { + this.$log.info(`Dynamic column [${dynCol}] not found in the list of available traits for program [${this.activeProgram.name}]`); + } + } + this.createObservationIndexMap(); } diff --git a/src/views/import/ImportTemplate.vue b/src/views/import/ImportTemplate.vue index 0ef2a29e..aaafb529 100644 --- a/src/views/import/ImportTemplate.vue +++ b/src/views/import/ImportTemplate.vue @@ -633,7 +633,7 @@ export default class ImportTemplate extends ProgramsBase { this.previewData = previewResponse.preview.rows as any[]; this.newObjectCounts = previewResponse.preview.statistics; this.$emit('statistics-loaded', this.newObjectCounts); - this.dynamicColumns = previewResponse.preview.dynamicColumnNames.filter(name => !name.includes('ObsUnitID')); + this.dynamicColumns = previewResponse.preview.dynamicColumnNames; this.$emit('preview-data-loaded', this.dynamicColumns); this.importService.send(ImportEvent.IMPORT_SUCCESS); // TODO: Temp pagination