5
5
onMounted ,
6
6
watch ,
7
7
nextTick ,
8
+ computed ,
8
9
} from ' @vue/composition-api' ;
9
10
10
11
import Definitions from ' @/definitions' ;
@@ -63,14 +64,44 @@ export default defineComponent({
63
64
return true ;
64
65
}];
65
66
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
+ );
74
105
75
106
const revalidate = () => {
76
107
nextTick (() => formRef .value .validate ());
@@ -113,7 +144,8 @@ export default defineComponent({
113
144
removeAwardDoi ,
114
145
projectAwardValidationRules ,
115
146
otherAwardValidationRules ,
116
- doiRequiredRules ,
147
+ doiValueRules ,
148
+ doiProviderRules ,
117
149
revalidate ,
118
150
resetFields ,
119
151
formRef ,
@@ -192,12 +224,15 @@ export default defineComponent({
192
224
<div
193
225
v-if =" multiOmicsForm.dataGenerated === true && multiOmicsForm.facilityGenerated"
194
226
>
195
- <DoeFacility />
227
+ <DoeFacility
228
+ @revalidate =" revalidate"
229
+ />
196
230
</div >
197
231
<v-radio-group
198
232
v-if =" multiOmicsForm.dataGenerated === false"
199
233
v-model =" multiOmicsForm.doe"
200
234
label =" Are you submitting samples to a DOE user facility (JGI, EMSL)? *"
235
+ :rules =" [v => (v === true || v === false) || 'This field is required']"
201
236
:disabled =" checkJGITemplates() || templateHasData(HARMONIZER_TEMPLATES.emsl.sampleDataSlot)"
202
237
@change =" resetFields('doe')"
203
238
>
@@ -341,50 +376,59 @@ export default defineComponent({
341
376
342
377
<div
343
378
v-if =" multiOmicsForm.facilities.includes('EMSL') || multiOmicsForm.facilities.includes('JGI')"
344
- class =" d-flex flex-column grow my-4"
379
+ class =" my-4"
345
380
>
346
381
<div
347
382
v-for =" _, i in multiOmicsForm.awardDois"
348
383
:key =" `awardDois${i}`"
349
384
class =" d-flex"
350
385
>
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"
365
391
>
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"
382
412
>
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 >
388
432
</v-card >
389
433
<v-btn
390
434
v-if =" (multiOmicsForm.dataGenerated || multiOmicsForm.facilities.includes('EMSL') || multiOmicsForm.facilities.includes('JGI')) && multiOmicsForm.awardDois !== null"
@@ -407,7 +451,7 @@ export default defineComponent({
407
451
/>
408
452
</div >
409
453
<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')"
411
455
class =" mb-4"
412
456
depressed
413
457
@click =" addAwardDoi"
0 commit comments