22 <Card card-title =" Utilisateurs du projet" >
33 <div class =" row" >
44 <div class =" col-lg-6" >
5- <h3 >Utilisateurs pour ce projet :</h3 >
6- <ul class =" mb-O list-inline" >
7- <li class =" list-inline-item" v-for =" user in user_for_project " :key =" user.id" >
8- <ButtonUserAvatar :user =" user" @click =" remove_user(user.id)" />
5+ <h5 >Administrateurs :</h5 >
6+ <ul class =" mb-O list-inline" v-if = " admin_for_project.length " >
7+ <li class =" list-inline-item" v-for =" user in admin_for_project " :key =" user.id" >
8+ <ButtonUserAvatar :user =" user" class = " mb-1 " @click =" remove_user(user.id)" />
99 </li >
1010 </ul >
11-
12- </div >
13- <div class =" col-lg-6" >
14- <h3 >Liste des utilisateurs</h3 >
15- <ul class =" mb-0 list-unstyled" >
16- <li class =" list-inline-item" v-for =" user in all_users" :key =" user.id" >
17- <ButtonUserAvatar :user =" user"
18- :disabled =" is_button_disabled(user.id)"
19- @click =" add_user(user.id)" />
11+ <p v-else class =" text-secondary text-sm" >Aucun administrateur ajouté à ce projet</p >
12+ <h5 >Rapporteurs :</h5 >
13+ <ul class =" mb-O list-inline" v-if =" reporter_for_project.length" >
14+ <li class =" list-inline-item" v-for =" user in reporter_for_project" :key =" user.id" >
15+ <ButtonUserAvatar :user =" user" class =" mb-1" @click =" remove_user(user.id)" />
2016 </li >
2117 </ul >
18+ <p v-else class =" text-secondary text-sm" >Aucun rapporteur ajouté à ce projet</p >
19+ <p class =" text-secondary text-sm mb-0" v-if =" admin_for_project.length || reporter_for_project.length" >
20+ Afin de supprimer un utilisateur du projet, cliquez sur son nom dans la liste ci-dessus.
21+ </p >
22+ </div >
23+ <div class =" col-lg-6" >
24+ <h5 >Liste des utilisateurs</h5 >
25+
26+ <UserAvatarVSelect
27+ label =" Sélectionnez des utilisateurs pour les ajouter au projet"
28+ id =" vs-list-users"
29+ v-model =" user_selected"
30+ :users =" all_users"
31+ :selectableCondition =" selectableUser" />
2232 </div >
2333 </div >
2434 </Card >
2737<script setup>
2838import Card from " @/Components/ui/Card.vue" ;
2939import {usePage } from " @inertiajs/vue3" ;
30- import {computed } from " vue" ;
40+ import {computed , nextTick , ref , watch } from " vue" ;
3141import {find } from " lodash" ;
3242import ButtonUserAvatar from " @/Components/ui/form/ButtonUserAvatar.vue" ;
43+ import UserAvatarVSelect from " @/Components/ui/user/UserAvatarVSelect.vue" ;
3344
3445const all_users = computed (()=> usePage ().props .users );
3546const props = defineProps ({
@@ -38,16 +49,25 @@ const props = defineProps({
3849 required: true
3950 }
4051})
52+ const user_selected = ref (null );
4153
42- const user_for_project = computed (() => {
43- return props . form . users . map ( u => find ( all_users .value , user => user . id === u))
44- })
54+ const user_for_project = computed (() => props . form . users . map ( u => find ( all_users . value , user => user . id === u)))
55+ const admin_for_project = computed (() => user_for_project .value . filter ( u => u . role_id === 1 ));
56+ const reporter_for_project = computed (() => user_for_project . value . filter ( u => u . role_id === 2 ));
4557
46- const add_user = (id ) => props .form .users .push (id)
4758const remove_user = (idToRemove ) => props .form .users = props .form .users .filter (id => id !== idToRemove);
4859
60+ // For a user to be selectable, it must not be in the props.form.users list.
61+ const selectableUser = (user ) => ! props .form .users .includes (user .id );
4962
50- const is_button_disabled = (id ) => props .form .users .includes (id)
63+ watch (user_selected, (newUser , oldUser ) => {
64+ if (newUser){
65+ props .form .users .push (newUser);
66+ nextTick (() => {
67+ user_selected .value = null ;
68+ })
69+ }
70+ })
5171 </script >
5272<style scoped>
5373
0 commit comments