From 0e8db00ccb01292b4cf66be9ae26c36b453f4941 Mon Sep 17 00:00:00 2001 From: Chris T Date: Tue, 24 Nov 2020 14:33:16 -0500 Subject: [PATCH 1/9] [BI-85] new trait form --- package.json | 3 +- src/assets/scss/main.scss | 33 +++- src/breeding-insight/dao/ProgramDAO.ts | 12 +- src/breeding-insight/dao/TraitDAO.ts | 6 +- src/breeding-insight/dao/TraitUploadDAO.ts | 6 + src/breeding-insight/model/BiResponse.ts | 4 + .../model/ObservationLevel.ts | 26 ++++ src/breeding-insight/model/ProgramUpload.ts | 2 +- .../service/ProgramService.ts | 9 ++ src/breeding-insight/service/TraitService.ts | 18 ++- .../service/TraitUploadService.ts | 18 ++- src/components/forms/BaseFieldWrapper.vue | 50 +++--- src/components/forms/BasicSelectField.vue | 11 +- src/components/forms/NewDataForm.vue | 10 +- src/components/trait/TraitListsTable.vue | 99 +++++++++++- src/components/trait/TraitsImportTable.vue | 6 +- src/components/trait/forms/BaseTraitForm.vue | 145 ++++++++++++++++++ src/views/TraitsImport.vue | 12 +- 18 files changed, 411 insertions(+), 59 deletions(-) create mode 100644 src/breeding-insight/model/ObservationLevel.ts create mode 100644 src/components/trait/forms/BaseTraitForm.vue diff --git a/package.json b/package.json index 6b0c7152d..acb296c0b 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "@types/promise.allsettled": "^1.0.3", "@types/vuelidate": "^0.7.10", "@xstate/fsm": "^1.4.0", - "buefy": "^0.8.8", "core-js": "^3.4.3", "focus-trap": "^5.1.0", "focus-trap-vue": "0.0.6", @@ -37,6 +36,7 @@ "vuex-class": "^0.3.2" }, "devDependencies": { + "@creativebulma/bulma-divider": "^1.1.0", "@types/chai": "^4.2.7", "@types/jest": "^24.9.0", "@vue/cli-plugin-babel": "^4.1.0", @@ -54,6 +54,7 @@ "babel-core": "^7.0.0-bridge.0", "babel-jest": "^24.9.0", "babel-preset-env": "^1.7.0", + "buefy": "^0.9.4", "bulma": "^0.9.1", "bulma-divider": "^0.2.0", "chai": "^4.1.2", diff --git a/src/assets/scss/main.scss b/src/assets/scss/main.scss index 0a7bb8c94..1e337226e 100644 --- a/src/assets/scss/main.scss +++ b/src/assets/scss/main.scss @@ -79,12 +79,23 @@ $table-striped-row-even-hover-background-color:$link-light; //$margin-right: 2 rem; +// Import buefy before bulma +@import "~bulma/sass/utilities/_all"; + +// Customize buefy if you want to here + + // Update some of Bulma's component variables //Enable this import line when Bulma is in a local folder called "bulma" //@import 'bulma/bulma'; // Enable this import line instead when Bulma is in package.json -@import '../../../node_modules/bulma/bulma.sass'; +@import '~bulma'; +@import "~buefy/src/scss/buefy"; + +// Bulma extensions +$divider-margin-inner-size: 0; +@import "~@creativebulma/bulma-divider"; // Overrides that can't be done with variables go here // may be broken out into a separate file later @@ -170,12 +181,12 @@ footer { .field { &.field--error { - & span.form-error { + & .field span.form-error { display: block; } } &:not(.field--error) { - & span.form-error { + & .field span.form-error { display: none; } } @@ -431,3 +442,19 @@ a.is-underlined { color: white; } } + +div.sentence-input { + display: flex; + align-items: flex-start; + p.is-input-prepend { + } + .field { + margin-left: 10px; + } +} + +// Buefy messes this up +.icon svg { + fill: none; + stroke-width: 2; +} diff --git a/src/breeding-insight/dao/ProgramDAO.ts b/src/breeding-insight/dao/ProgramDAO.ts index 25963e2ee..6d397ee4a 100644 --- a/src/breeding-insight/dao/ProgramDAO.ts +++ b/src/breeding-insight/dao/ProgramDAO.ts @@ -16,10 +16,11 @@ */ import {Program} from "@/breeding-insight/model/Program"; -import {BiResponse} from "@/breeding-insight/model/BiResponse"; +import {BiResponse, Response} from "@/breeding-insight/model/BiResponse"; import * as api from "@/util/api"; import {PaginationQuery} from "@/breeding-insight/model/PaginationQuery"; + export class ProgramDAO { static create(program: Program): Promise { @@ -88,4 +89,13 @@ export class ProgramDAO { })) } + static async getObservationLevels(programId: string): Promise { + + const { data } = await api.call({ + url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/observation_level`, + method: 'get' + }) as Response; + return new BiResponse(data); + } + } diff --git a/src/breeding-insight/dao/TraitDAO.ts b/src/breeding-insight/dao/TraitDAO.ts index 8d7118878..c282ecc78 100644 --- a/src/breeding-insight/dao/TraitDAO.ts +++ b/src/breeding-insight/dao/TraitDAO.ts @@ -16,14 +16,10 @@ */ import {Trait} from "@/breeding-insight/model/Trait"; -import {BiResponse} from "@/breeding-insight/model/BiResponse"; +import {BiResponse, Response} from "@/breeding-insight/model/BiResponse"; import * as api from "@/util/api"; import {PaginationQuery} from "@/breeding-insight/model/PaginationQuery"; -interface Response { - data: any -} - export class TraitDAO { static getAll(programId: string, paginationQuery: PaginationQuery, full : boolean): Promise { diff --git a/src/breeding-insight/dao/TraitUploadDAO.ts b/src/breeding-insight/dao/TraitUploadDAO.ts index ca414d3b2..f3c0265bf 100644 --- a/src/breeding-insight/dao/TraitUploadDAO.ts +++ b/src/breeding-insight/dao/TraitUploadDAO.ts @@ -61,5 +61,11 @@ export class TraitUploadDAO { })) } + static async confirmUpload(programId: string, traitUploadId: string) { + await api.call({ + url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/trait-upload/${traitUploadId}`, + method: 'post' }); + } + } diff --git a/src/breeding-insight/model/BiResponse.ts b/src/breeding-insight/model/BiResponse.ts index c48a2682b..0503fb8d7 100644 --- a/src/breeding-insight/model/BiResponse.ts +++ b/src/breeding-insight/model/BiResponse.ts @@ -65,4 +65,8 @@ class Status { this.messageType = statusMap.messageType; this.message = statusMap.message; } +} + +export interface Response { + data: any } \ No newline at end of file diff --git a/src/breeding-insight/model/ObservationLevel.ts b/src/breeding-insight/model/ObservationLevel.ts new file mode 100644 index 000000000..11d929182 --- /dev/null +++ b/src/breeding-insight/model/ObservationLevel.ts @@ -0,0 +1,26 @@ +/* + * See the NOTICE file distributed with this work for additional information + * regarding copyright ownership. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class ObservationLevel { + id?: string; + name?: string; + + constructor(id?:string, name?:string) { + this.id = id; + this.name = name; + } +} \ No newline at end of file diff --git a/src/breeding-insight/model/ProgramUpload.ts b/src/breeding-insight/model/ProgramUpload.ts index 06b20c18e..de29dc9c0 100644 --- a/src/breeding-insight/model/ProgramUpload.ts +++ b/src/breeding-insight/model/ProgramUpload.ts @@ -19,7 +19,7 @@ import {Trait} from "@/breeding-insight/model/Trait"; export class ProgramUpload { id?: string; - data?: Array; + data?: Trait[]; constructor(id?:string, data?:Array) { this.id = id; diff --git a/src/breeding-insight/service/ProgramService.ts b/src/breeding-insight/service/ProgramService.ts index 3c791e578..28c1d9691 100644 --- a/src/breeding-insight/service/ProgramService.ts +++ b/src/breeding-insight/service/ProgramService.ts @@ -20,6 +20,7 @@ import {Program} from "@/breeding-insight/model/Program"; import {Metadata, Pagination} from "@/breeding-insight/model/BiResponse"; import {PaginationQuery} from "@/breeding-insight/model/PaginationQuery"; import {PaginationController} from "@/breeding-insight/model/view_models/PaginationController"; +import {ProgramObservationLevel} from "@/breeding-insight/model/ProgramObservationLevel"; export class ProgramService { @@ -122,5 +123,13 @@ export class ProgramService { })); } + static async getObservationLevels(programId: string): Promise<[ProgramObservationLevel[], Metadata] | void> { + if (programId) { + const { result: { data }, metadata } = await ProgramDAO.getObservationLevels(programId); + return [data, metadata]; + } + else return; + } + } diff --git a/src/breeding-insight/service/TraitService.ts b/src/breeding-insight/service/TraitService.ts index 66e6f6509..0924f422a 100644 --- a/src/breeding-insight/service/TraitService.ts +++ b/src/breeding-insight/service/TraitService.ts @@ -20,15 +20,21 @@ import {Trait} from "@/breeding-insight/model/Trait"; import {Metadata} from "@/breeding-insight/model/BiResponse"; import {PaginationQuery} from "@/breeding-insight/model/PaginationQuery"; import {PaginationController} from "@/breeding-insight/model/view_models/PaginationController"; +import {TraitUploadService} from "@/breeding-insight/service/TraitUploadService"; +import {ValidationError} from "@/breeding-insight/model/errors/ValidationError"; export class TraitService { - static async createTraits(programId: string, newTraits: Trait[]): Promise<[Trait[], Metadata] | void> { + static async createTraits(programId: string, newTraits: Trait[]): Promise<[Trait[], Metadata]> { if (programId) { - const { result: { data }, metadata } = await TraitDAO.createTraits(programId, newTraits); - return [data, metadata]; - } - else return; + try { + const { result: { data }, metadata } = await TraitDAO.createTraits(programId, newTraits); + return [data, metadata]; + } catch (error) { + throw TraitUploadService.parseError(error); + } + } + else throw 'Unable to create trait'; } static getAll(programId: string, paginationQuery?: PaginationQuery, full?: boolean): Promise<[Trait[], Metadata]> { @@ -48,6 +54,8 @@ export class TraitService { let traits: Trait[] = []; if (biResponse.result.data) { + //TODO: Remove when backend default sorting is implemented + biResponse.result.data = PaginationController.mockSortRecords(biResponse.result.data); traits = biResponse.result.data.map((trait: any) => { return trait as Trait; }); diff --git a/src/breeding-insight/service/TraitUploadService.ts b/src/breeding-insight/service/TraitUploadService.ts index e33bffc52..79210b680 100644 --- a/src/breeding-insight/service/TraitUploadService.ts +++ b/src/breeding-insight/service/TraitUploadService.ts @@ -22,6 +22,7 @@ import {Trait} from "@/breeding-insight/model/Trait"; import {PaginationQuery} from "@/breeding-insight/model/PaginationQuery"; import {PaginationController} from "@/breeding-insight/model/view_models/PaginationController"; import {ValidationError} from "@/breeding-insight/model/errors/ValidationError"; +import {ProgramDAO} from "@/breeding-insight/dao/ProgramDAO"; export class TraitUploadService { @@ -73,8 +74,8 @@ export class TraitUploadService { }); } - static getTraits(programId: string, paginationQuery?: PaginationQuery): Promise<[Trait[], Metadata]> { - return new Promise<[Trait[], Metadata]>(((resolve, reject) => { + static getTraits(programId: string, paginationQuery?: PaginationQuery): Promise<[ProgramUpload, Metadata]> { + return new Promise<[ProgramUpload, Metadata]>(((resolve, reject) => { if (paginationQuery === undefined){ paginationQuery = new PaginationQuery(0, 0, true); @@ -96,7 +97,9 @@ export class TraitUploadService { [traits, newPagination] = PaginationController.mockPagination(traits, paginationQuery!.page, paginationQuery!.pageSize, paginationQuery!.showAll); biResponse.metadata.pagination = newPagination; - resolve([traits, biResponse.metadata]); + let upload: ProgramUpload = new ProgramUpload(biResponse.result.id, traits); + + resolve([upload, biResponse.metadata]); }).catch((error) => reject(error)); @@ -106,6 +109,15 @@ export class TraitUploadService { })); } + static async confirmUpload(programId: string, traitUploadId: string): Promise { + try { + await TraitUploadDAO.confirmUpload(programId, traitUploadId); + return; + } catch (error) { + throw 'Error saving traits'; + } + } + static parseError(error: any): ValidationError | string { const jsonError = error.response; diff --git a/src/components/forms/BaseFieldWrapper.vue b/src/components/forms/BaseFieldWrapper.vue index f3f739a85..1ff66d088 100644 --- a/src/components/forms/BaseFieldWrapper.vue +++ b/src/components/forms/BaseFieldWrapper.vue @@ -17,27 +17,33 @@ @@ -55,6 +61,8 @@ fieldHelp!: string; @Prop() validations!: any; + @Prop({default: true}) + showLabel!: boolean; get validationSpec(): Object[] { diff --git a/src/components/forms/BasicSelectField.vue b/src/components/forms/BasicSelectField.vue index b4d3141a4..ef04e10b6 100644 --- a/src/components/forms/BasicSelectField.vue +++ b/src/components/forms/BasicSelectField.vue @@ -20,6 +20,7 @@ v-bind:validations="validations" v-bind:field-help="fieldHelp" v-bind:field-name="fieldName" + v-bind:show-label="showLabel" >
@@ -66,6 +67,8 @@ validations!: any; @Prop() emptyValueName!: string; + @Prop() + showLabel!: boolean; displayDefault() { diff --git a/src/components/forms/NewDataForm.vue b/src/components/forms/NewDataForm.vue index 68d03ce36..9d67914a1 100644 --- a/src/components/forms/NewDataForm.vue +++ b/src/components/forms/NewDataForm.vue @@ -71,20 +71,22 @@ } checkSubmit() { - this.$v.newRecord.$touch(); - if (this.$v.newRecord.$anyError){ + + if (this.$v.newRecord) { this.$v.newRecord.$touch(); } + + if (this.$v.newRecord && this.$v.newRecord.$anyError){ this.$emit('show-error-notification', 'Fix Invalid Fields'); return; } else { this.$emit('submit'); - this.$v.newRecord.$reset(); + if (this.$v.newRecord) { this.$v.newRecord.$reset(); } } } checkCancel() { - this.$v.newRecord.$reset(); + if (this.$v.newRecord) { this.$v.newRecord.$reset(); } this.$emit('cancel'); } diff --git a/src/components/trait/TraitListsTable.vue b/src/components/trait/TraitListsTable.vue index 42576c999..efd38ff6c 100644 --- a/src/components/trait/TraitListsTable.vue +++ b/src/components/trait/TraitListsTable.vue @@ -35,6 +35,44 @@ +
+
+ +
+
+ + + + +

No traits are currently defined for this program. @@ -107,10 +148,17 @@ import {PaginationController} from "@/breeding-insight/model/view_models/Paginat import {PaginationQuery} from "@/breeding-insight/model/PaginationQuery"; import { StringFormatters } from '@/breeding-insight/utils/StringFormatters'; import { TraitStringFormatters } from '@/breeding-insight/utils/TraitStringFormatters'; +import BaseTraitForm from "@/components/trait/forms/BaseTraitForm.vue"; +import {ValidationError} from "@/breeding-insight/model/errors/ValidationError"; +import {FieldError} from "@/breeding-insight/model/errors/FieldError"; +import {ProgramService} from "@/breeding-insight/service/ProgramService"; +import {MethodClass} from "@/breeding-insight/model/Method"; +import {DataType} from "@/breeding-insight/model/Scale"; @Component({ mixins: [validationMixin], - components: { NewDataForm, BasicInputField, SidePanelTable, EmptyTableMessage, TableColumn, + components: { + BaseTraitForm, NewDataForm, BasicInputField, SidePanelTable, EmptyTableMessage, TableColumn, WarningModal, TraitDetailPanel, PlusCircleIcon }, computed: { @@ -123,6 +171,7 @@ export default class TraitTable extends Vue { private activeProgram?: Program; private traits: Trait[] = []; + private newTrait: Trait = new Trait(); private traitsPagination?: Pagination = new Pagination(); private paginationController: PaginationController = new PaginationController(); private deactivateActive: boolean = false; @@ -131,9 +180,16 @@ export default class TraitTable extends Vue { private collapseColumns = false; private StringFormatters = StringFormatters; private TraitStringFormatters = TraitStringFormatters; + private newTraitActive = false; + private methodClassOptions: string[] = Object.values(MethodClass); + private observationLevelOptions?: string[]; + private scaleClassOptions: string[] = Object.values(DataType); mounted() { this.getTraits(); + this.getObservationLevels(); + console.log(this.methodClassOptions); + console.log(this.scaleClassOptions); } @Watch('paginationController', { deep: true}) @@ -154,6 +210,47 @@ export default class TraitTable extends Vue { }); } + async saveTrait() { + try { + console.log(this.newTrait); + await TraitService.createTraits(this.activeProgram!.id!, [this.newTrait]); + this.$emit('show-success-notification', 'Trait creation successful.'); + this.getTraits(); + await this.getObservationLevels(); + this.newTraitActive = false; + } catch (error) { + // TODO: Pass errors to the new data form + if (error instanceof ValidationError) { + const fieldErrors: FieldError[] = error.rows[0].errors; + for (const fieldError of fieldErrors) { + console.log(fieldError); + } + } + + this.$emit('show-error-notification', 'Error creating'); + } + + } + + cancelNewTrait() { + this.newTrait = new Trait(); + this.newTraitActive = false; + } + + async getObservationLevels() { + try { + const response = await ProgramService.getObservationLevels(this.activeProgram!.id!); + if (response) { + const [observationLevels, metadata] = response; + this.observationLevelOptions = observationLevels.map(value => value.name!); + return; + } + } catch (error) { + this.$emit('show-error-notification', 'Unable to retrieve observation levels'); + } + this.$emit('show-error-notification', 'Unable to retrieve observation levels'); + } + } diff --git a/src/components/trait/TraitsImportTable.vue b/src/components/trait/TraitsImportTable.vue index 1a3ee8656..98707b36d 100644 --- a/src/components/trait/TraitsImportTable.vue +++ b/src/components/trait/TraitsImportTable.vue @@ -93,6 +93,7 @@ import { Method } from '../../breeding-insight/model/Method'; import { StringFormatters } from '@/breeding-insight/utils/StringFormatters'; import { TraitStringFormatters } from '@/breeding-insight/utils/TraitStringFormatters'; + import {ProgramUpload} from "@/breeding-insight/model/ProgramUpload"; @Component({ mixins: [validationMixin], @@ -112,6 +113,7 @@ export default class TraitsImportTable extends Vue { private traitsPagination?: Pagination = new Pagination(); private paginationController: PaginationController = new PaginationController(); private traits : Trait[] = []; + private upload?: ProgramUpload; private loaded = false; private collapseColumns = false; @@ -129,9 +131,9 @@ export default class TraitsImportTable extends Vue { this.paginationController.currentPage, this.paginationController.pageSize, this.paginationController.showAll); this.paginationController.setCurrentCall(paginationQuery); - TraitUploadService.getTraits(this.activeProgram!.id!, paginationQuery).then(([traits, metadata]) => { + TraitUploadService.getTraits(this.activeProgram!.id!, paginationQuery).then(([upload, metadata]) => { if (this.paginationController.matchesCurrentRequest(metadata.pagination)){ - this.traits = traits; + this.traits = upload.data || []; this.traitsPagination = metadata.pagination; } diff --git a/src/components/trait/forms/BaseTraitForm.vue b/src/components/trait/forms/BaseTraitForm.vue new file mode 100644 index 000000000..80085b051 --- /dev/null +++ b/src/components/trait/forms/BaseTraitForm.vue @@ -0,0 +1,145 @@ + + + + + \ No newline at end of file diff --git a/src/views/TraitsImport.vue b/src/views/TraitsImport.vue index 4a05c14bb..0710a00e1 100644 --- a/src/views/TraitsImport.vue +++ b/src/views/TraitsImport.vue @@ -101,6 +101,7 @@ import { createMachine, interpret } from '@xstate/fsm'; import {ValidationError} from "@/breeding-insight/model/errors/ValidationError"; import {Metadata} from "@/breeding-insight/model/BiResponse"; import {Trait} from "@/breeding-insight/model/Trait"; +import {ProgramUpload} from "@/breeding-insight/model/ProgramUpload"; enum ImportState { CHOOSE_FILE = "CHOOSE_FILE", @@ -302,14 +303,9 @@ export default class TraitsImport extends ProgramsBase { const name = this.activeProgram && this.activeProgram.name ? this.activeProgram.name : 'the program'; try { // fetch uploaded traits - const [ uploadedTraits ] = await TraitUploadService.getTraits(this.activeProgram!.id!) as [Trait[], Metadata]; - - // add traits to program - await TraitService.createTraits(this.activeProgram!.id!, uploadedTraits) - - // delete uploaded traits - const err = await TraitUploadService.deleteTraits(this.activeProgram!.id!) as void|Error; - if(err) throw new Error('Uploaded traits were not deleted'); + const [ upload ] = await TraitUploadService.getTraits(this.activeProgram!.id!) as [ProgramUpload, Metadata]; + console.log(upload); + await TraitUploadService.confirmUpload(this.activeProgram!.id!, upload!.id!); // show all program traits this.$emit('show-success-notification', `Imported traits have been added to ${name}.`); From b4df9b09990d69c0257a5ef30f6aae67ff8ad8e4 Mon Sep 17 00:00:00 2001 From: Chris T Date: Tue, 24 Nov 2020 14:35:53 -0500 Subject: [PATCH 2/9] [BI-85] fix npm packages after rebase --- package-lock.json | 413 ++++++++++++++++++++++++---------------------- 1 file changed, 216 insertions(+), 197 deletions(-) diff --git a/package-lock.json b/package-lock.json index 086be42ce..edd3eb967 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1155,6 +1155,12 @@ "minimist": "^1.2.0" } }, + "@creativebulma/bulma-divider": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@creativebulma/bulma-divider/-/bulma-divider-1.1.0.tgz", + "integrity": "sha512-Lx5MlUhgAnTF+wNZ5LXcaE1K0F2m0Pkwte1p08FBsIyRV6Oq7BuKPk/O9XJPcF+vR6BjCxNy/hjYFXtNmoXbNg==", + "dev": true + }, "@cypress/listr-verbose-renderer": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", @@ -2578,16 +2584,6 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -2626,34 +2622,6 @@ } } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", @@ -2700,39 +2668,6 @@ } } }, - "fork-ts-checker-webpack-plugin-v5": { - "version": "npm:fork-ts-checker-webpack-plugin@5.2.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz", - "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==", - "dev": true, - "optional": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - } - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "optional": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -2770,13 +2705,6 @@ "slash": "^2.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -2803,26 +2731,6 @@ } } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "optional": true - } - } - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -2861,29 +2769,12 @@ } } }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "optional": true - }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -2893,13 +2784,6 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1" } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "optional": true } } }, @@ -3156,17 +3040,6 @@ } } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -3306,13 +3179,6 @@ } } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", @@ -3445,16 +3311,6 @@ "strip-ansi": "^6.0.0" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "terser-webpack-plugin": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", @@ -3599,42 +3455,6 @@ "repeat-string": "^1.6.1" } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.0.0-rc.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.1.tgz", - "integrity": "sha512-yR+BS90EOXTNieasf8ce9J3TFCpm2DGqoqdbtiwQ33hon3FyIznLX7sKavAq1VmfBnOeV6It0Htg4aniv8ph1g==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5764,18 +5584,12 @@ } }, "buefy": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/buefy/-/buefy-0.8.20.tgz", - "integrity": "sha512-pg8Cn0m9cjqp2/vaKT4VIfU8KIumuX/gAT1GtearXRs56+kKqAPx3j9O8cm9W6P4jPUCHajKX6H8AqD0ram2Bg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/buefy/-/buefy-0.9.4.tgz", + "integrity": "sha512-LRSIYVNrKTPQhmNRegASkntX+ObtZ7aSSA/3cybDKXzGtPNy8g8cl2tp79Rl8/LBVH/KkRT5rmmzJ21nxz9IcQ==", + "dev": true, "requires": { - "bulma": "0.7.5" - }, - "dependencies": { - "bulma": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.7.5.tgz", - "integrity": "sha512-cX98TIn0I6sKba/DhW0FBjtaDpxTelU166pf7ICXpCCuplHWyu6C9LYZmL5PEsnePIeJaiorsTEzzNk3Tsm1hw==" - } + "bulma": "0.9.1" } }, "buffer": { @@ -9706,6 +9520,130 @@ } } }, + "fork-ts-checker-webpack-plugin-v5": { + "version": "npm:fork-ts-checker-webpack-plugin@5.2.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz", + "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==", + "dev": true, + "optional": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "optional": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "optional": true + } + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true, + "optional": true + } + } + }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -19209,6 +19147,87 @@ } } }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.0.0-rc.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.2.tgz", + "integrity": "sha512-cz8GK4dgIf1UTC+do80pGvh8BHcCRHLIQVHV9ONVQ8wtoqS9t/+H02rKcQP+TVNg7khgLyQV2+8eHUq7/AFq3g==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "vue-property-decorator": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", From a666fa27e15580613915f7ef348f668953ca2a0d Mon Sep 17 00:00:00 2001 From: Chris T Date: Mon, 30 Nov 2020 11:28:03 -0500 Subject: [PATCH 3/9] [BI-85] set main abbreviation on trait create --- src/breeding-insight/model/Trait.ts | 1 + src/components/trait/forms/BaseTraitForm.vue | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/breeding-insight/model/Trait.ts b/src/breeding-insight/model/Trait.ts index 04150931a..ba673b546 100644 --- a/src/breeding-insight/model/Trait.ts +++ b/src/breeding-insight/model/Trait.ts @@ -27,6 +27,7 @@ export class Trait { scale?: Scale; abbreviations?: Array; synonyms?: Array; + mainAbbreviation?: string; constructor(id?:string, traitName?:string, diff --git a/src/components/trait/forms/BaseTraitForm.vue b/src/components/trait/forms/BaseTraitForm.vue index 80085b051..f8d190410 100644 --- a/src/components/trait/forms/BaseTraitForm.vue +++ b/src/components/trait/forms/BaseTraitForm.vue @@ -64,7 +64,7 @@ 0) {this.trait.mainAbbreviation = this.trait.abbreviations[0]} + } parseCommaList(value: string): string[] { return value.split(','); } From b0ad6188d6d7526e93739c61c0ad699b3529d692 Mon Sep 17 00:00:00 2001 From: Chris T Date: Mon, 30 Nov 2020 15:41:03 -0500 Subject: [PATCH 4/9] [BI-85] remove console.logs --- src/components/trait/TraitListsTable.vue | 5 +---- src/views/TraitsImport.vue | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/trait/TraitListsTable.vue b/src/components/trait/TraitListsTable.vue index efd38ff6c..5b9131c25 100644 --- a/src/components/trait/TraitListsTable.vue +++ b/src/components/trait/TraitListsTable.vue @@ -188,8 +188,6 @@ export default class TraitTable extends Vue { mounted() { this.getTraits(); this.getObservationLevels(); - console.log(this.methodClassOptions); - console.log(this.scaleClassOptions); } @Watch('paginationController', { deep: true}) @@ -212,7 +210,6 @@ export default class TraitTable extends Vue { async saveTrait() { try { - console.log(this.newTrait); await TraitService.createTraits(this.activeProgram!.id!, [this.newTrait]); this.$emit('show-success-notification', 'Trait creation successful.'); this.getTraits(); @@ -223,7 +220,7 @@ export default class TraitTable extends Vue { if (error instanceof ValidationError) { const fieldErrors: FieldError[] = error.rows[0].errors; for (const fieldError of fieldErrors) { - console.log(fieldError); + this.$log.error(fieldError); } } diff --git a/src/views/TraitsImport.vue b/src/views/TraitsImport.vue index 0710a00e1..8143a3a43 100644 --- a/src/views/TraitsImport.vue +++ b/src/views/TraitsImport.vue @@ -304,7 +304,6 @@ export default class TraitsImport extends ProgramsBase { try { // fetch uploaded traits const [ upload ] = await TraitUploadService.getTraits(this.activeProgram!.id!) as [ProgramUpload, Metadata]; - console.log(upload); await TraitUploadService.confirmUpload(this.activeProgram!.id!, upload!.id!); // show all program traits From ba916ae034337cfc5a02f3c2b5c39ca61a6b6bb7 Mon Sep 17 00:00:00 2001 From: Chris T Date: Wed, 2 Dec 2020 10:28:38 -0500 Subject: [PATCH 5/9] [BI-85] change GET observation levels path --- src/breeding-insight/dao/ProgramDAO.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/breeding-insight/dao/ProgramDAO.ts b/src/breeding-insight/dao/ProgramDAO.ts index 6d397ee4a..a006a92eb 100644 --- a/src/breeding-insight/dao/ProgramDAO.ts +++ b/src/breeding-insight/dao/ProgramDAO.ts @@ -92,7 +92,7 @@ export class ProgramDAO { static async getObservationLevels(programId: string): Promise { const { data } = await api.call({ - url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/observation_level`, + url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/observation-level`, method: 'get' }) as Response; return new BiResponse(data); From ca094f2b86cded094a48c6e8c9456ab0c7433a6e Mon Sep 17 00:00:00 2001 From: Chris T Date: Wed, 2 Dec 2020 10:36:21 -0500 Subject: [PATCH 6/9] [BI-85] small fixes to new trait form code --- src/breeding-insight/model/Scale.ts | 1 - src/components/trait/forms/BaseTraitForm.vue | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/breeding-insight/model/Scale.ts b/src/breeding-insight/model/Scale.ts index c8be15e66..42420301a 100644 --- a/src/breeding-insight/model/Scale.ts +++ b/src/breeding-insight/model/Scale.ts @@ -18,7 +18,6 @@ import {Category} from "@/breeding-insight/model/Category"; export enum DataType { - Code = "CODE", Date = "DATE", Duration = "DURATION", Nominal = "NOMINAL", diff --git a/src/components/trait/forms/BaseTraitForm.vue b/src/components/trait/forms/BaseTraitForm.vue index f8d190410..6c1592580 100644 --- a/src/components/trait/forms/BaseTraitForm.vue +++ b/src/components/trait/forms/BaseTraitForm.vue @@ -69,8 +69,8 @@ @@ -133,12 +133,12 @@ export default class TraitTable extends Vue { this.trait!.programObservationLevel = new ProgramObservationLevel(value); } setAbbreviations(value: string) { - const abbreviations = this.parseCommaList(value); + const abbreviations = this.parseSemiColonList(value); this.trait.abbreviations = abbreviations; if (abbreviations.length > 0) {this.trait.mainAbbreviation = this.trait.abbreviations[0]} } - parseCommaList(value: string): string[] { - return value.split(','); + parseSemiColonList(value: string): string[] { + return value.split(';'); } } From 7ad8f403766d3b1c2cd5b7143861b8ed7d53bb8b Mon Sep 17 00:00:00 2001 From: Chris T Date: Wed, 2 Dec 2020 16:59:56 -0500 Subject: [PATCH 7/9] [BI-85] update call to observation levels --- src/breeding-insight/dao/ProgramDAO.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/breeding-insight/dao/ProgramDAO.ts b/src/breeding-insight/dao/ProgramDAO.ts index a006a92eb..3ffa55585 100644 --- a/src/breeding-insight/dao/ProgramDAO.ts +++ b/src/breeding-insight/dao/ProgramDAO.ts @@ -92,7 +92,7 @@ export class ProgramDAO { static async getObservationLevels(programId: string): Promise { const { data } = await api.call({ - url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/observation-level`, + url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/observation-levels`, method: 'get' }) as Response; return new BiResponse(data); From 9a2b2cd03b15656615a7f5975936c4ddbd2a387a Mon Sep 17 00:00:00 2001 From: Chris T Date: Thu, 3 Dec 2020 14:18:19 -0500 Subject: [PATCH 8/9] [BI-85] code review changes --- src/breeding-insight/model/Method.ts | 12 ++++++------ src/breeding-insight/model/Scale.ts | 14 +++++++------- src/components/trait/TraitDetailPanel.vue | 4 ---- src/components/trait/forms/BaseTraitForm.vue | 3 ++- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/breeding-insight/model/Method.ts b/src/breeding-insight/model/Method.ts index e805504f2..87afae81b 100644 --- a/src/breeding-insight/model/Method.ts +++ b/src/breeding-insight/model/Method.ts @@ -16,11 +16,11 @@ */ export enum MethodClass { - Computation = "COMPUTATION", - Observation = "OBSERVATION", - Measurement = "MEASUREMENT", - Counting = "COUNTING", - Estimation = "ESTIMATION" + Computation = "Computation", + Observation = "Observation", + Measurement = "Measurement", + Counting = "Counting", + Estimation = "Estimation" } export class Method { @@ -37,6 +37,6 @@ export class Method { } static methodClassEquals(classString: string, type: MethodClass): boolean { - return classString.toUpperCase() === type; + return classString.toUpperCase() === type.toUpperCase(); } } \ No newline at end of file diff --git a/src/breeding-insight/model/Scale.ts b/src/breeding-insight/model/Scale.ts index 42420301a..61f42fece 100644 --- a/src/breeding-insight/model/Scale.ts +++ b/src/breeding-insight/model/Scale.ts @@ -18,12 +18,12 @@ import {Category} from "@/breeding-insight/model/Category"; export enum DataType { - Date = "DATE", - Duration = "DURATION", - Nominal = "NOMINAL", - Numerical = "NUMERICAL", - Ordinal = "ORDINAL", - Text = "TEXT" + Date = "Date", + Duration = "Duration", + Nominal = "Nominal", + Numerical = "Numerical", + Ordinal = "Ordinal", + Text = "Text" } export class Scale { @@ -44,6 +44,6 @@ export class Scale { } static dataTypeEquals(typeString: string, type: DataType): boolean { - return typeString.toUpperCase() === type; + return typeString.toUpperCase() === type.toUpperCase(); } } diff --git a/src/components/trait/TraitDetailPanel.vue b/src/components/trait/TraitDetailPanel.vue index 3d31587b3..a4c089bd6 100644 --- a/src/components/trait/TraitDetailPanel.vue +++ b/src/components/trait/TraitDetailPanel.vue @@ -55,10 +55,6 @@

Maximum valid value: {{valueOrNA(trait.scale.validValueMax)}}

- -