diff --git a/.env.development b/.env.development index 60d1d1189..0f3dd2fa4 100644 --- a/.env.development +++ b/.env.development @@ -18,3 +18,4 @@ VUE_APP_BI_REFERENCE_SOURCE=${BRAPI_REFERENCE_SOURCE} # feature flags VUE_APP_BRAPI_VENDOR_SUBMISSION_ENABLED=${BRAPI_VENDOR_SUBMISSION_ENABLED} +VUE_APP_ALTERNATE_AUTHENTICATION_ENABLED=${ALTERNATE_AUTHENTICATION_ENABLED} \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 24004a490..b55559330 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -16,8 +16,6 @@ _Please include any details needed for reviewers to test this code_ - [ ] I have performed a self-review of my own code - [ ] I have tested my code and ensured it meets the acceptance criteria of the story -- [ ] I have create/modified unit tests to cover this change - [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have made corresponding changes to documentation -- [ ] I have run TAF: _\_ +- [ ] I have either updated the source of truth or arranged for update with product owner if needed https://breedinginsight.atlassian.net/wiki/spaces/BI/pages/1559953409/Source+of+Truth - [ ] I have run SiteImprove on pages impacted by changes diff --git a/package.json b/package.json index afe0b2886..4c64237ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bi-web", - "version": "v1.2.0", + "version": "v1.3.0+937", "private": true, "scripts": { "build": "node $npm_package_config_task_path/build.js --dev-audit-level=critical --prod-audit-level=none", @@ -96,5 +96,5 @@ "vue-cli-plugin-axios": "0.0.4", "vue-template-compiler": "^2.7.14" }, - "versionInfo": "https://github.com/Breeding-Insight/bi-web/releases/tag/v1.2.0" + "versionInfo": "https://github.com/Breeding-Insight/bi-web/commit/3b0680190aa4c7a507c696e4d9741a1577faf4f7" } diff --git a/src/assets/img/IFAS-logo.svg b/src/assets/img/IFAS-logo.svg new file mode 100644 index 000000000..74f38f8a9 --- /dev/null +++ b/src/assets/img/IFAS-logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/img/UFIFASlogo.svg b/src/assets/img/UFIFASlogo.svg new file mode 100644 index 000000000..26ba74980 --- /dev/null +++ b/src/assets/img/UFIFASlogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/cornell-logo.svg b/src/assets/img/cornell-logo.svg new file mode 100644 index 000000000..3937c6d74 --- /dev/null +++ b/src/assets/img/cornell-logo.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/scss/main.scss b/src/assets/scss/main.scss index 66397d521..4ccf9e0a3 100644 --- a/src/assets/scss/main.scss +++ b/src/assets/scss/main.scss @@ -579,6 +579,10 @@ table tr.is-edited + .detail { margin-bottom: 7em; } +.githubBtn { + margin: 1em auto; +} + .program-selection-level { .level-item:not(:last-child) { margin-right:0.5em !important; @@ -621,7 +625,7 @@ a.is-underlined { text-decoration: underline; } -#connect-orcid-button{ +#connect-orcid-button #connect-github-button { border: 1px solid #D3D3D3; padding: .3em; background-color: #fff; @@ -635,7 +639,7 @@ a.is-underlined { vertical-align: middle; } -#connect-orcid-button:hover{ +#connect-orcid-button:hover #connect-github-button:hover { border: 1px solid #338caf; color: #338caf; } diff --git a/src/breeding-insight/dao/ExperimentDAO.ts b/src/breeding-insight/dao/ExperimentDAO.ts index 3141133f5..3c9120d39 100644 --- a/src/breeding-insight/dao/ExperimentDAO.ts +++ b/src/breeding-insight/dao/ExperimentDAO.ts @@ -146,6 +146,21 @@ export class ExperimentDAO { } } + static async getRecommendedSubEntityDatasetNames(programId: string, experimentId: string): Promise> { + const config: any = {}; + config.url = `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/experiments/${experimentId}/recommended-sub-entity-dataset-names`; + config.method = 'get'; + config.programId = programId; + config.experimentId = experimentId; + try { + const res = await api.call(config) as Response; + const biResponse = new BiResponse(res.data); + return ResultGenerator.success(biResponse.result.data); + } catch (error) { + return ResultGenerator.err(error); + } + } + static async getDatasetById(programId: string, experimentId: string, datasetId: string, stats: boolean): Promise> { const config: any = {}; config.url = `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/experiments/${experimentId}/dataset/${datasetId}`; diff --git a/src/breeding-insight/dao/ObservationUnitDAO.ts b/src/breeding-insight/dao/ObservationUnitDAO.ts index dc0e88f1a..5c05a0754 100644 --- a/src/breeding-insight/dao/ObservationUnitDAO.ts +++ b/src/breeding-insight/dao/ObservationUnitDAO.ts @@ -37,4 +37,19 @@ export class ObservationUnitDAO { return ResultGenerator.err(error); } } + + static async getObservationLevels(programId: string): Promise> { + try { + const { data } = await api.call({ + url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/brapi/v2/observationlevels`, + method: 'get' + }) as Response; + + return ResultGenerator.success(new BiResponse(data)); + + } catch (error) { + return ResultGenerator.err(error); + } + } + } diff --git a/src/breeding-insight/dao/ProgramDAO.ts b/src/breeding-insight/dao/ProgramDAO.ts index 96d688b5a..eee7d7edf 100644 --- a/src/breeding-insight/dao/ProgramDAO.ts +++ b/src/breeding-insight/dao/ProgramDAO.ts @@ -108,4 +108,13 @@ export class ProgramDAO { return new BiResponse(data); } + static async getObservationLevelNames(programId: string): Promise { + + const { data } = await api.call({ + url: `${process.env.VUE_APP_BI_API_V1_PATH}/programs/${programId}/brapi/v2/observationlevelnames`, + method: 'get' + }) as Response; + return new BiResponse(data); + + } } diff --git a/src/breeding-insight/model/DatasetTableRow.ts b/src/breeding-insight/model/DatasetTableRow.ts index 2d382bae2..d927f0bb6 100644 --- a/src/breeding-insight/model/DatasetTableRow.ts +++ b/src/breeding-insight/model/DatasetTableRow.ts @@ -34,6 +34,8 @@ export class DatasetTableRow { obsUnitId?: string; traitValues?: string[] = []; treatmentFactors?: string; + subExpUnitId?: string; + subObsUnitId?: string; constructor(germplasmName?: string, gid?: string, @@ -51,7 +53,9 @@ export class DatasetTableRow { elevation?: number, rtk?: string, obsUnitId?: string, - traitValues?: string[]) { + traitValues?: string[], + subExpUnitId?: string, + subObsUnitId?: string) { this.germplasmName = germplasmName; this.gid = gid; this.testOrCheck = testOrCheck; @@ -69,7 +73,8 @@ export class DatasetTableRow { this.rtk = rtk; this.obsUnitId = obsUnitId; this.traitValues = traitValues; - + this.subExpUnitId = subExpUnitId; + this.subObsUnitId = subObsUnitId; } static assign(dataset: DatasetTableRow): DatasetTableRow { @@ -91,7 +96,9 @@ export class DatasetTableRow { dataset.elevation, dataset.rtk, dataset.obsUnitId, - dataset.traitValues + dataset.traitValues, + dataset.subExpUnitId, + dataset.subObsUnitId ); } diff --git a/src/breeding-insight/service/ExperimentService.ts b/src/breeding-insight/service/ExperimentService.ts index ad27a535a..0be96d043 100644 --- a/src/breeding-insight/service/ExperimentService.ts +++ b/src/breeding-insight/service/ExperimentService.ts @@ -54,6 +54,13 @@ export class ExperimentService { return await ExperimentDAO.getDatasetMetadata(programId, experimentId); } + static async getRecommendedSubEntityDatasetNames(programId: string, experimentId: string): Promise> { + if (!programId) { + return ResultGenerator.err(new Error('Missing or invalid program id')); + } + return await ExperimentDAO.getRecommendedSubEntityDatasetNames(programId, experimentId); + } + static async getDatasetMetadataByTrial(programId: string, trial: Trial): Promise> { if (!programId) { return ResultGenerator.err(new Error('Missing or invalid program id')); diff --git a/src/breeding-insight/service/ObservationUnitService.ts b/src/breeding-insight/service/ObservationUnitService.ts new file mode 100644 index 000000000..113e1e42c --- /dev/null +++ b/src/breeding-insight/service/ObservationUnitService.ts @@ -0,0 +1,47 @@ +/* + * 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. + */ + +import {Result, ResultGenerator} from "@/breeding-insight/model/Result"; +import {ObservationUnitDAO} from "@/breeding-insight/dao/ObservationUnitDAO"; +import {BiResponse, Metadata} from "@/breeding-insight/model/BiResponse"; +import {ProgramObservationLevel} from "@/breeding-insight/model/ProgramObservationLevel"; + +export class ObservationUnitService { + + static async getObservationLevels(programId: string): Promise> { + if (!programId) { + return ResultGenerator.err(new Error('Missing or invalid program id')); + } + + let response: Result; + response = await ObservationUnitDAO.getObservationLevels(programId) as Result; + + const frontendModel = (res: BiResponse): [ProgramObservationLevel[], Metadata] => { + let levels: ProgramObservationLevel[] = []; + let {result: {data}, metadata} = res; + + levels = data.map((level: any) => { + return new ProgramObservationLevel(level.levelName!); + }); + + return [levels, metadata]; + } + + return response.applyResult(frontendModel); + } + +} \ No newline at end of file diff --git a/src/breeding-insight/service/ProgramService.ts b/src/breeding-insight/service/ProgramService.ts index 7bcacff21..cf7852305 100644 --- a/src/breeding-insight/service/ProgramService.ts +++ b/src/breeding-insight/service/ProgramService.ts @@ -140,5 +140,13 @@ export class ProgramService { else return; } + static async getObservationLevelNames(programId: string): Promise<[ProgramObservationLevel[], Metadata] | void> { + if (programId) { + const { result: { data }, metadata } = await ProgramDAO.getObservationLevelNames(programId); + return [data, metadata]; + } + else return; + } + } diff --git a/src/components/experiments/ExperimentDeleteModal.vue b/src/components/experiments/ExperimentDeleteModal.vue index ff782035f..5f7444673 100644 --- a/src/components/experiments/ExperimentDeleteModal.vue +++ b/src/components/experiments/ExperimentDeleteModal.vue @@ -25,7 +25,7 @@ v-on:deactivate="resetExportOptions" > diff --git a/src/components/experiments/ExperimentsObservationsTable.vue b/src/components/experiments/ExperimentsObservationsTable.vue index cdf332ab9..641b2d318 100644 --- a/src/components/experiments/ExperimentsObservationsTable.vue +++ b/src/components/experiments/ExperimentsObservationsTable.vue @@ -59,7 +59,7 @@ @@ -97,6 +97,7 @@ import {UPDATE_EXPERIMENT_SORT} from "@/store/sorting/mutation-types"; import {BrAPIUtils} from "@/breeding-insight/utils/BrAPIUtils"; import ExperimentObservationsDownloadModal from "@/components/experiments/ExperimentObservationsDownloadModal.vue"; import {DatasetMetadata} from "@/breeding-insight/model/DatasetMetadata"; +import {StringFormatters} from "../../breeding-insight/utils/StringFormatters"; @Component({ mixins: [validationMixin], @@ -115,7 +116,7 @@ import {DatasetMetadata} from "@/breeding-insight/model/DatasetMetadata"; updateSort: UPDATE_EXPERIMENT_SORT }) }, - data: () => ({Sort, BrAPIUtils}) + data: () => ({Sort, BrAPIUtils, StringFormatters}) }) export default class ExperimentsObservationsTable extends Vue { diff --git a/src/components/file-import/ImportInfoTemplateMessageBox.vue b/src/components/file-import/ImportInfoTemplateMessageBox.vue index 5f4ad3a44..e3bb826ee 100644 --- a/src/components/file-import/ImportInfoTemplateMessageBox.vue +++ b/src/components/file-import/ImportInfoTemplateMessageBox.vue @@ -30,7 +30,6 @@ Download the {{toTitleCase(importTypeName)}} Import Template -
Template version placeholder diff --git a/src/components/layouts/BaseSideBarLayout.vue b/src/components/layouts/BaseSideBarLayout.vue index f2229074f..25b3d9adb 100644 --- a/src/components/layouts/BaseSideBarLayout.vue +++ b/src/components/layouts/BaseSideBarLayout.vue @@ -17,18 +17,17 @@