Skip to content

Commit 43dabd4

Browse files
authored
Merge pull request #1691 from microbiomedata/issue-1689-unknown-doi-bug
Use `unknownDoi` state when determining if award DOI inputs are required
2 parents 16ab724 + 30ec7ff commit 43dabd4

File tree

2 files changed

+92
-53
lines changed

2 files changed

+92
-53
lines changed

web/src/views/SubmissionPortal/Components/DoeFacility.vue

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,9 @@ export default defineComponent({
1818
default: 'Data generated ',
1919
},
2020
},
21+
emits: ['revalidate'],
2122
2223
setup() {
23-
const doiRequiredRules = () => [(v: string) => {
24-
const valid = !!v || (!multiOmicsForm.facilityGenerated && multiOmicsForm.dataGenerated) || (multiOmicsForm.unknownDoi && !multiOmicsForm.dataGenerated);
25-
return valid || 'An award DOI is required if data was or is going to be generated by a DOE facility.';
26-
}];
27-
2824
function facilityChange() {
2925
if (multiOmicsForm.awardDois === null || multiOmicsForm.awardDois.length < multiOmicsForm.facilities.length) {
3026
addAwardDoi();
@@ -36,7 +32,6 @@ export default defineComponent({
3632
return {
3733
facilityChange,
3834
Definitions,
39-
doiRequiredRules,
4035
multiOmicsForm,
4136
templateHasData,
4237
checkJGITemplates,

web/src/views/SubmissionPortal/Components/MultiOmicsDataForm.vue

Lines changed: 91 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
onMounted,
66
watch,
77
nextTick,
8+
computed,
89
} from '@vue/composition-api';
910
1011
import Definitions from '@/definitions';
@@ -63,14 +64,44 @@ export default defineComponent({
6364
return true;
6465
}];
6566
66-
const doiRequiredRules = () => [(v: string) => {
67-
const valid = !!v || (!multiOmicsForm.facilityGenerated && multiOmicsForm.dataGenerated) || (multiOmicsForm.unknownDoi && !multiOmicsForm.dataGenerated);
68-
return valid || 'An award DOI is required if data was or is going to be generated by a DOE facility.';
69-
},
70-
(v: string) => {
71-
const valid = checkDoiFormat(v);
72-
return valid || 'DOI must be in the correct format.';
73-
}];
67+
const doiRequired = computed(() => (
68+
(multiOmicsForm.dataGenerated && multiOmicsForm.facilityGenerated)
69+
|| (!multiOmicsForm.dataGenerated && !multiOmicsForm.unknownDoi)
70+
));
71+
72+
const doiValueRules = (i: number) => (
73+
[
74+
(value: string) => {
75+
const valid = !!value || !doiRequired.value;
76+
return valid || 'An award DOI is required if data was or is going to be generated by a DOE facility.';
77+
},
78+
(value: string) => {
79+
const hasProvider = multiOmicsForm.awardDois && multiOmicsForm.awardDois[i] && multiOmicsForm.awardDois[i].provider;
80+
let valid = true;
81+
if (hasProvider) {
82+
valid = !!value;
83+
}
84+
return valid || 'DOI must be provided if a provider is selected.';
85+
},
86+
(value: string) => {
87+
const valid = !value || checkDoiFormat(value);
88+
return valid || 'DOI must be in the correct format.';
89+
},
90+
]
91+
);
92+
93+
const doiProviderRules = (i: number) => (
94+
[
95+
(provider: string) => {
96+
const hasValue = multiOmicsForm.awardDois && multiOmicsForm.awardDois[i] && multiOmicsForm.awardDois[i].value !== '';
97+
let valid = true;
98+
if (hasValue || doiRequired.value) {
99+
valid = !!provider;
100+
}
101+
return valid || 'A provider must be selected.';
102+
},
103+
]
104+
);
74105
75106
const revalidate = () => {
76107
nextTick(() => formRef.value.validate());
@@ -113,7 +144,8 @@ export default defineComponent({
113144
removeAwardDoi,
114145
projectAwardValidationRules,
115146
otherAwardValidationRules,
116-
doiRequiredRules,
147+
doiValueRules,
148+
doiProviderRules,
117149
revalidate,
118150
resetFields,
119151
formRef,
@@ -192,12 +224,15 @@ export default defineComponent({
192224
<div
193225
v-if="multiOmicsForm.dataGenerated === true && multiOmicsForm.facilityGenerated"
194226
>
195-
<DoeFacility />
227+
<DoeFacility
228+
@revalidate="revalidate"
229+
/>
196230
</div>
197231
<v-radio-group
198232
v-if="multiOmicsForm.dataGenerated === false"
199233
v-model="multiOmicsForm.doe"
200234
label="Are you submitting samples to a DOE user facility (JGI, EMSL)? *"
235+
:rules="[v => (v === true || v === false) || 'This field is required']"
201236
:disabled="checkJGITemplates() || templateHasData(HARMONIZER_TEMPLATES.emsl.sampleDataSlot)"
202237
@change="resetFields('doe')"
203238
>
@@ -341,50 +376,59 @@ export default defineComponent({
341376

342377
<div
343378
v-if="multiOmicsForm.facilities.includes('EMSL') || multiOmicsForm.facilities.includes('JGI')"
344-
class="d-flex flex-column grow my-4"
379+
class="my-4"
345380
>
346381
<div
347382
v-for="_, i in multiOmicsForm.awardDois"
348383
:key="`awardDois${i}`"
349384
class="d-flex"
350385
>
351-
<v-card class="d-flex flex-column grow pa-4 mb-4">
352-
<div class="d-flex">
353-
<v-text-field
354-
v-if="multiOmicsForm.awardDois !== null"
355-
v-model="multiOmicsForm.awardDois[i].value"
356-
label="Award DOI *"
357-
:hint="Definitions.doi"
358-
:rules="doiRequiredRules()"
359-
class="mb-2 mr-3"
360-
persistent-hint
361-
validate-on-blur
362-
outlined
363-
dense
364-
@change="revalidate"
386+
<v-card class="flex-grow-1 pa-4 mb-4">
387+
<v-row>
388+
<v-col
389+
cols="12"
390+
sm="8"
365391
>
366-
<template #message="{ message }">
367-
<span v-html="message" />
368-
</template>
369-
</v-text-field>
370-
<v-select
371-
v-if="multiOmicsForm.awardDois !== null"
372-
v-model="multiOmicsForm.awardDois[i].provider"
373-
label="Award DOI Provider *"
374-
:hint="Definitions.dataDoiProvider"
375-
:items="doiProviderValues"
376-
persistent-hint
377-
outlined
378-
dense
379-
clearable
380-
class="mb-2 mr-3"
381-
:rules="multiOmicsForm.awardDois[i].provider ? undefined : ['A provider must be selected.']"
392+
<v-text-field
393+
v-if="multiOmicsForm.awardDois !== null"
394+
v-model="multiOmicsForm.awardDois[i].value"
395+
label="Award DOI *"
396+
:hint="Definitions.doi"
397+
:rules="doiValueRules(i)"
398+
persistent-hint
399+
validate-on-blur
400+
outlined
401+
dense
402+
@change="revalidate"
403+
>
404+
<template #message="{ message }">
405+
<span v-html="message" />
406+
</template>
407+
</v-text-field>
408+
</v-col>
409+
<v-col
410+
cols="12"
411+
sm="4"
382412
>
383-
<template #message="{ message }">
384-
<span v-html="message" />
385-
</template>
386-
</v-select>
387-
</div>
413+
<v-select
414+
v-if="multiOmicsForm.awardDois !== null"
415+
v-model="multiOmicsForm.awardDois[i].provider"
416+
label="Award DOI Provider *"
417+
:hint="Definitions.dataDoiProvider"
418+
:items="doiProviderValues"
419+
persistent-hint
420+
outlined
421+
dense
422+
clearable
423+
:rules="doiProviderRules(i)"
424+
@change="revalidate"
425+
>
426+
<template #message="{ message }">
427+
<span v-html="message" />
428+
</template>
429+
</v-select>
430+
</v-col>
431+
</v-row>
388432
</v-card>
389433
<v-btn
390434
v-if="(multiOmicsForm.dataGenerated || multiOmicsForm.facilities.includes('EMSL') || multiOmicsForm.facilities.includes('JGI')) && multiOmicsForm.awardDois !== null"
@@ -407,7 +451,7 @@ export default defineComponent({
407451
/>
408452
</div>
409453
<v-btn
410-
v-if="multiOmicsForm.dataGenerated || multiOmicsForm.facilities.includes('EMSL') || multiOmicsForm.facilities.includes('JGI')"
454+
v-if="multiOmicsForm.facilities.includes('EMSL') || multiOmicsForm.facilities.includes('JGI')"
411455
class="mb-4"
412456
depressed
413457
@click="addAwardDoi"

0 commit comments

Comments
 (0)