diff --git a/varfish/vueapp/src/components/SubmissionList.vue b/varfish/vueapp/src/components/SubmissionList.vue
index 9112c6731..fc32f1493 100644
--- a/varfish/vueapp/src/components/SubmissionList.vue
+++ b/varfish/vueapp/src/components/SubmissionList.vue
@@ -93,12 +93,11 @@
placeholder="Select Case"
select-label=""
deselect-label=""
+ :loading="loadingVariants"
+ :disabled="loadingVariants"
:options="familyUuids"
:custom-label="getFamilyLabel"
@input="fetchRawModalUserAnnotations()"
- @close="fetchRawModalUserAnnotations()"
- @select="fetchRawModalUserAnnotations()"
- @remove="fetchRawModalUserAnnotations()"
>
@@ -352,6 +351,7 @@ import { mapActions, mapState } from 'vuex'
import {
getSubmissionLabel,
+ getVariantId,
HPO_AGE_OF_ONSET,
HPO_INHERITANCE_MODE,
isDiseaseTerm,
@@ -425,7 +425,7 @@ export default {
*/
fetchRawModalUserAnnotations() {
if (this.familyUuid) {
- this.modalUserAnnotations.splice(0, this.modalUserAnnotations.length)
+ Vue.set(this, 'modalUserAnnotations', [])
this.fetchError = false
this.loadingVariants = true
Vue.set(this, 'rawModalUserAnnotations', null)
@@ -436,10 +436,6 @@ export default {
.then((res) => {
this.fetchError = false
- const getVariantId = (obj) => {
- return `${obj.release}-${obj.chromosome}-${obj.start}-${obj.reference}-${obj.alternative}`
- }
-
const collect = (arr) => {
const result = {}
for (const obj of arr) {
@@ -490,8 +486,11 @@ export default {
'rawModalUserAnnotationsCount',
Object.keys(smallVariants).length
)
- const userAnnotations = this._computeUserAnnotations(this.rawModalUserAnnotations)
- Array.prototype.push.apply(this.modalUserAnnotations, userAnnotations);
+ Vue.set(
+ this,
+ 'modalUserAnnotations',
+ this._computeUserAnnotations(this.rawModalUserAnnotations)
+ )
this.loadingVariants = false
})
.catch((error) => {
@@ -502,7 +501,6 @@ export default {
}
},
-
/**
* Return filtered data to display in the annotated variant modal.
*/
diff --git a/varfish/vueapp/src/helpers.js b/varfish/vueapp/src/helpers.js
index 030e052db..ba0c91e71 100644
--- a/varfish/vueapp/src/helpers.js
+++ b/varfish/vueapp/src/helpers.js
@@ -31,6 +31,16 @@ export function removeItemOnce(arr, value) {
return arr
}
+export function getVariantId(obj, prefix = '') {
+ return [
+ obj[prefix + 'release'] || obj[prefix + 'assembly'],
+ obj[prefix + 'chromosome'],
+ obj[prefix + 'start'],
+ obj[prefix + 'reference'],
+ obj[prefix + 'alternative'],
+ ].join('-')
+}
+
export function removeItemAll(arr, value) {
let i = 0
while (i < arr.length) {
diff --git a/varfish/vueapp/src/store/modules/clinvarExport.js b/varfish/vueapp/src/store/modules/clinvarExport.js
index f989611f7..d56f969df 100644
--- a/varfish/vueapp/src/store/modules/clinvarExport.js
+++ b/varfish/vueapp/src/store/modules/clinvarExport.js
@@ -2,7 +2,8 @@ import Vue from 'vue'
import { HPO_INHERITANCE_MODE, isDiseaseTerm, uuidv4 } from '@/helpers'
-import clinvarExport from '../../api/clinvarExport'
+import clinvarExportApi from '../../api/clinvarExport'
+import { getVariantId } from '../../helpers'
/**
* Enum for the valid clinvar export application states.
@@ -75,31 +76,31 @@ export const actions = {
commit('SET_APP_STATE', AppState.initializing)
Promise.all([
- clinvarExport
+ clinvarExportApi
.getOrganisations(state.appContext)
.then((res) => commit('SET_ORGANISATIONS', res)),
- clinvarExport
+ clinvarExportApi
.getSubmitters(state.appContext)
.then((res) => commit('SET_SUBMITTERS', res)),
- clinvarExport
+ clinvarExportApi
.getAssertionMethods(state.appContext)
.then((res) => commit('SET_ASSERTION_METHODS', res)),
- clinvarExport
+ clinvarExportApi
.getSubmissionSets(state.appContext)
.then((res) => commit('SET_SUBMISSION_SETS', res)),
- clinvarExport
+ clinvarExportApi
.getSubmissions(state.appContext)
.then((res) => commit('SET_SUBMISSIONS', res)),
- clinvarExport
+ clinvarExportApi
.getIndividuals(state.appContext)
.then((res) => commit('SET_INDIVIDUALS', res)),
- clinvarExport
+ clinvarExportApi
.getSubmissionIndividuals(state.appContext)
.then((res) => commit('SET_SUBMISSION_INDIVIDUALS', res)),
- clinvarExport
+ clinvarExportApi
.getFamilies(state.appContext)
.then((res) => commit('SET_FAMILIES', res)),
- clinvarExport
+ clinvarExportApi
.getSubmittingOrgs(state.appContext)
.then((res) => commit('SET_SUBMITTING_ORGS', res)),
]).then(
@@ -170,13 +171,13 @@ export const actions = {
submissionSetExists
) {
if (submissionSetExists) {
- const res = await clinvarExport.updateSubmissionSet(
+ const res = await clinvarExportApi.updateSubmissionSet(
state.currentSubmissionSet,
state.appContext
)
return res
} else {
- const apiSet = await clinvarExport.createSubmissionSet(
+ const apiSet = await clinvarExportApi.createSubmissionSet(
state.currentSubmissionSet,
state.appContext
)
@@ -206,7 +207,7 @@ export const actions = {
) {
const localUuid = state.currentSubmissionSet.submitting_orgs[i]
if (localUuid in state.oldModel.submittingOrgs) {
- await clinvarExport.updateSubmittingOrg(
+ await clinvarExportApi.updateSubmittingOrg(
{
...JSON.parse(JSON.stringify(state.submittingOrgs[localUuid])),
sort_order: i,
@@ -214,7 +215,7 @@ export const actions = {
state.appContext
)
} else {
- const apiSubmittingOrg = await clinvarExport.createSubmittingOrg(
+ const apiSubmittingOrg = await clinvarExportApi.createSubmittingOrg(
{
...JSON.parse(JSON.stringify(state.submittingOrgs[localUuid])),
sort_order: i,
@@ -238,7 +239,7 @@ export const actions = {
for (let i = 0; i < oldSubmissionSet.submitting_orgs.length; i++) {
const localSubmittingOrgUuid = oldSubmissionSet.submitting_orgs[i]
if (!(localSubmittingOrgUuid in state.submittingOrgs)) {
- await clinvarExport.deleteSubmittingOrg(
+ await clinvarExportApi.deleteSubmittingOrg(
state.oldModel.submittingOrgs[localSubmittingOrgUuid],
state.appContext
)
@@ -257,7 +258,7 @@ export const actions = {
const localSubmission = state.submissions[localSubmissionUuid]
let apiSubmission = null
if (submissionExists) {
- apiSubmission = await clinvarExport.updateSubmission(
+ apiSubmission = await clinvarExportApi.updateSubmission(
{
...JSON.parse(JSON.stringify(localSubmission)),
sort_order: sortOrder,
@@ -265,7 +266,7 @@ export const actions = {
state.appContext
)
} else {
- apiSubmission = await clinvarExport.createSubmission(
+ apiSubmission = await clinvarExportApi.createSubmission(
{
...JSON.parse(JSON.stringify(localSubmission)),
sort_order: sortOrder,
@@ -292,7 +293,7 @@ export const actions = {
localIndividualUuid
)
) {
- await clinvarExport.deleteSubmissionIndividual(
+ await clinvarExportApi.deleteSubmissionIndividual(
state.oldModel.submissionIndividuals[localIndividualUuid],
state.appContext
)
@@ -310,7 +311,7 @@ export const actions = {
let apiSubmissionIndividual = null
if (localSubmissionIndividualExists) {
apiSubmissionIndividual =
- await clinvarExport.updateSubmissionIndividual(
+ await clinvarExportApi.updateSubmissionIndividual(
{
...JSON.parse(JSON.stringify(localSI)),
sort_order: i,
@@ -319,7 +320,7 @@ export const actions = {
)
} else {
apiSubmissionIndividual =
- await clinvarExport.createSubmissionIndividual(
+ await clinvarExportApi.createSubmissionIndividual(
{
...JSON.parse(JSON.stringify(localSI)),
sort_order: i,
@@ -375,13 +376,16 @@ export const actions = {
if (!(oldSubmissionUuid in state.submissions)) {
const oldSubmission = state.oldModel.submissions[oldSubmissionUuid]
for (const oldSubmissionIndividualUuid of oldSubmission.submission_individuals) {
- await clinvarExport.deleteSubmissionIndividual(
+ await clinvarExportApi.deleteSubmissionIndividual(
state.oldModel.submissionIndividuals[oldSubmissionIndividualUuid],
state.appContext
)
commit('DELETE_SUBMISSION_INDIVIDUAL', oldSubmissionIndividualUuid)
}
- await clinvarExport.deleteSubmission(oldSubmission, state.appContext)
+ await clinvarExportApi.deleteSubmission(
+ oldSubmission,
+ state.appContext
+ )
commit('DELETE_SUBMISSION', oldSubmissionUuid)
}
}
@@ -410,7 +414,7 @@ export const actions = {
for (const submittingOrgUuid of state.currentSubmissionSet
.submitting_orgs) {
if (submittingOrgUuid in state.oldModel.submittingOrgs) {
- await clinvarExport.deleteSubmittingOrg(
+ await clinvarExportApi.deleteSubmittingOrg(
state.submittingOrgs[submittingOrgUuid],
state.appContext
)
@@ -425,7 +429,7 @@ export const actions = {
)
for (const submissionInvidualUuid of submissionInvidualUuids) {
if (submissionInvidualUuid in state.oldModel.submissionIndividuals) {
- await clinvarExport.deleteSubmissionIndividual(
+ await clinvarExportApi.deleteSubmissionIndividual(
state.submissionIndividuals[submissionInvidualUuid],
state.appContext
)
@@ -433,7 +437,7 @@ export const actions = {
commit('DELETE_SUBMISSION_INDIVIDUAL', submissionInvidualUuid)
}
if (submissionUuid in state.oldModel.submissions) {
- await clinvarExport.deleteSubmission(
+ await clinvarExportApi.deleteSubmission(
state.submissions[submissionUuid],
state.appContext
)
@@ -444,7 +448,7 @@ export const actions = {
if (
state.currentSubmissionSet.sodar_uuid in state.oldModel.submissionSets
) {
- await clinvarExport.deleteSubmissionSet(
+ await clinvarExportApi.deleteSubmissionSet(
state.submissionSets[state.currentSubmissionSet.sodar_uuid],
state.appContext
)
@@ -553,8 +557,18 @@ export const actions = {
/**
* Add the given individual to the current submission.
*/
- addIndividualToCurrentSubmission({ commit }, individual) {
- commit('ADD_INDIVIDUAL_TO_CURRENT_SUBMISSION', individual)
+ async addIndividualToCurrentSubmission({ state, commit }, individual) {
+ const res = await clinvarExportApi.getUserAnnotations(
+ state.appContext,
+ individual.family
+ )
+ const smallVariants = Object.fromEntries(
+ res.small_variants.map((v) => [getVariantId(v), v])
+ )
+ commit('ADD_INDIVIDUAL_TO_CURRENT_SUBMISSION', {
+ individual,
+ smallVariants,
+ })
},
/**
* Update the given submission individual.
@@ -1028,12 +1042,9 @@ export const mutations = {
state.currentSubmissionSet.submissions.push(newSubmission.sodar_uuid)
},
- ADD_INDIVIDUAL_TO_CURRENT_SUBMISSION(state, individual) {
- const s = state.currentSubmission
- const variantKey =
- `${s.variant_assembly}-${s.variant_chromosome}` +
- `-${s.variant_start}-${s.variant_reference}-${s.variant_alternative}`
- const smallVariant = state.userAnnotations.smallVariants[variantKey] // XXX
+ ADD_INDIVIDUAL_TO_CURRENT_SUBMISSION(state, { individual, smallVariants }) {
+ const variantKey = getVariantId(state.currentSubmission, 'variant_')
+ const smallVariant = smallVariants[variantKey]
const { variantAlleleCount, variantZygosity } = extractVariantZygosity(
smallVariant,
[individual.sodar_uuid],