11<script setup lang="ts">
2- import { ref , watch } from ' vue' ;
2+ import { ref , onMounted , watch } from ' vue' ;
33import { createOrUpdateVettingDetailsForUser } from ' @api/api' ;
44import useState from ' @use/useState' ;
55
6- const { currentUserId, reviewerMaterials } = useState ();
6+ const { currentUserId, reviewerMaterials, loadReviewerMaterials } = useState ();
77
88const referenceDialog = ref (false );
99const reviewerMaterialsDisplay = ref (' ' );
10+ const loadingMaterials = ref (false );
1011const valid = ref (true );
1112const error = ref (' ' );
1213
14+
1315async function saveReviewerMaterials() {
1416 if (! currentUserId .value || ! valid .value ) return ;
1517 try {
18+ loadingMaterials .value = true ;
1619 const details = await createOrUpdateVettingDetailsForUser (currentUserId .value , reviewerMaterialsDisplay .value );
1720 reviewerMaterials .value = details .reference_materials ;
21+ loadingMaterials .value = false ;
22+ error .value = ' ' ;
1823 } catch (err ) {
1924 error .value = ' There was a problem saving your changes. Please try again' ;
2025 }
2126}
2227
28+ async function fetchMaterials() {
29+ loadingMaterials .value = true ;
30+ await loadReviewerMaterials ();
31+ loadingMaterials .value = false ;
32+ }
33+
2334watch (reviewerMaterials , () => reviewerMaterialsDisplay .value = reviewerMaterials .value );
35+ watch (currentUserId , async () => await fetchMaterials ());
36+
37+ onMounted (fetchMaterials );
2438
2539 </script >
2640
@@ -39,6 +53,12 @@ watch(reviewerMaterials, () => reviewerMaterialsDisplay.value = reviewerMaterial
3953 <v-card >
4054 <v-card-title >
4155 Reference Materials
56+ <v-progress-circular
57+ v-if =" loadingMaterials"
58+ indeterminate
59+ size =" 24"
60+ color =" primary"
61+ />
4262 </v-card-title >
4363 <v-card-text >
4464 <v-form
@@ -48,8 +68,9 @@ watch(reviewerMaterials, () => reviewerMaterialsDisplay.value = reviewerMaterial
4868 v-model =" reviewerMaterialsDisplay"
4969 placeholder =" Describe any reference materials used during labeling"
5070 :rules =" [
51- v => v .length <= 2000 || 'Only 2000 characters are allowed'
71+ v => (v? .length || 0) <= 2000 || 'Only 2000 characters are allowed'
5272 ]"
73+ :disabled =" loadingMaterials"
5374 counter =" 2000"
5475 />
5576 <span
@@ -68,7 +89,7 @@ watch(reviewerMaterials, () => reviewerMaterialsDisplay.value = reviewerMaterial
6889 </v-btn >
6990 <v-btn
7091 color =" primary"
71- :disabled =" !valid"
92+ :disabled =" !valid || loadingMaterials "
7293 @click =" saveReviewerMaterials"
7394 >
7495 Save
0 commit comments