@@ -21,6 +21,7 @@ export default {
2121 window : 256 ,
2222 level: 150 ,
2323 newExperimentNote: ' ' ,
24+ loadingLock: undefined ,
2425 }),
2526 computed: {
2627 ... mapState ([
@@ -46,6 +47,11 @@ export default {
4647 experimentId () {
4748 return this .currentViewData .experimentId ;
4849 },
50+ editRights () {
51+ return this .myCurrentProjectRoles .includes (' tier_1_reviewer' )
52+ || this .myCurrentProjectRoles .includes (' tier_2_reviewer' )
53+ || this .myCurrentProjectRoles .includes (' superuser' );
54+ },
4955 experimentIsEditable () {
5056 return this .lockOwner && this .lockOwner .id === this .user .id ;
5157 },
@@ -129,14 +135,13 @@ export default {
129135 ' setShowCrosshairs' ,
130136 ' setStoreCrosshairs' ,
131137 ]),
132- async switchLock (newExp , oldExp = null ) {
138+ async switchLock (newExp , oldExp = null , force = false ) {
133139 if (! this .navigateToNextIfCurrentScanNull ()) {
134- if (this .myCurrentProjectRoles .includes (' tier_1_reviewer' )
135- || this .myCurrentProjectRoles .includes (' tier_2_reviewer' )
136- || this .myCurrentProjectRoles .includes (' superuser' )) {
140+ if (this .editRights ) {
141+ this .loadingLock = true ;
137142 if (oldExp) {
138143 try {
139- await this .setLock ({ experimentId: oldExp, lock: false });
144+ await this .setLock ({ experimentId: oldExp, lock: false , force });
140145 } catch (err) {
141146 this .$snackbar ({
142147 text: ' Failed to release edit access on Experiment.' ,
@@ -145,12 +150,13 @@ export default {
145150 }
146151 }
147152 try {
148- await this .setLock ({ experimentId: newExp, lock: true });
153+ await this .setLock ({ experimentId: newExp, lock: true , force });
149154 } catch (err) {
150155 this .$snackbar ({
151156 text: ' Failed to claim edit access on Experiment.' ,
152157 timeout: 6000 ,
153158 });
159+ this .loadingLock = false ;
154160 }
155161 }
156162 }
@@ -547,9 +553,40 @@ export default {
547553 </v-col >
548554 <v-col cols =" 6" >
549555 <DecisionButtons
550- :experimentIsEditable =" experimentIsEditable"
556+ v-if =" experimentIsEditable"
551557 @handleKeyPress =" handleKeyPress"
552558 />
559+ <div
560+ v-else
561+ class =" uneditable-notice"
562+ >
563+ <v-icon >mdi-lock</v-icon >
564+ You {{ editRights ?'have not claimed' :'do not have' }}
565+ edit access on this Experiment.
566+ <div
567+ v-if =" lockOwner"
568+ class =" my-3"
569+ style =" text-align :center "
570+ >
571+ <UserAvatar
572+ :target-user =" lockOwner"
573+ as-editor
574+ />
575+ <br >
576+ {{ lockOwner.username }}
577+ <br >
578+ currently has edit access.
579+ </div >
580+ <v-btn
581+ v-if =" editRights && (user.is_superuser || !lockOwner)"
582+ :loading =" loadingLock"
583+ :disabled =" loadingLock"
584+ @click =" switchLock(experimentId, null, force=true)"
585+ color =" primary"
586+ >
587+ {{ lockOwner ?"Steal edit access" :"Claim edit access" }}
588+ </v-btn >
589+ </div >
553590 </v-col >
554591 </v-row >
555592 </v-container >
@@ -585,4 +622,12 @@ export default {
585622 }
586623}
587624
625+ .uneditable-notice {
626+ display : flex ;
627+ flex-flow : column wrap ;
628+ width : 100% ;
629+ height : 100% ;
630+ justify-content : center ;
631+ align-content : center ;
632+ }
588633 </style >
0 commit comments