Skip to content

Commit 0916f42

Browse files
committed
Merge branch 'dev'
2 parents 466b4e3 + d26996c commit 0916f42

File tree

5 files changed

+50
-28
lines changed

5 files changed

+50
-28
lines changed

app/Models/User.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class User extends Authenticatable implements MustVerifyEmail
4141
protected $hidden = [
4242
'password',
4343
'remember_token',
44-
'role_id',
4544
'profile_photo_path',
4645
];
4746

app/Repositories/Users/UserRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class UserRepository implements UserRepositoryInterface
1414

1515
public function getAll() :Collection
1616
{
17-
return User::all();
17+
return User::orderBy('first_name', 'asc')->orderBy('last_name','asc')->get();
1818
}
1919

2020
public function getUserById($user_id): User

config/app.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
'name' => env('APP_NAME', 'Laravel'),
1717

1818

19-
'version' => '1.4.0',
19+
'version' => '1.5.0',
2020

2121
/*
2222
|--------------------------------------------------------------------------

resources/js/Components/ui/user/UserAvatarVSelect.vue

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
:disabled="disabled"
88
:reduce="user => user.id"
99
placeholder="Sélectionnez un utilisateur"
10-
:options="users">
10+
:options="users"
11+
:selectable="selectableCondition">
1112
<template #open-indicator="{ attributes }">
1213
<span v-bind="attributes">
1314
<svg xmlns='http://www.w3.org/2000/svg' style="width: 16px; height: 12px" viewBox='0 0 16 16'><path fill='none' stroke='#343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>
@@ -17,12 +18,14 @@
1718
<div class="d-flex align-items-center">
1819
<Avatar :user="option" class="me-1 bordered"/>
1920
{{ option.full_name }}
21+
<span class="badge text-bg-secondary ms-2" v-if="option.role_id === 1">Administrateur</span>
2022
</div>
2123
</template>
2224
<template #selected-option="option">
2325
<div class="d-flex align-items-center">
2426
<Avatar :user="option" class="me-1 bordered"/>
2527
{{ option.full_name }}
28+
<span class="badge text-bg-secondary ms-2" v-if="option.role_id === 1">Administrateur</span>
2629
</div>
2730
</template>
2831
</v-select>
@@ -52,10 +55,10 @@ const props = defineProps({
5255
disabled:{
5356
type:Boolean,
5457
default:false
55-
}
58+
},
59+
selectableCondition: {
60+
type: Function,
61+
default: () => true, // Par défaut, aucune option n'est désactivée
62+
},
5663
})
5764
</script>
58-
59-
<style scoped>
60-
61-
</style>

resources/js/Pages/Settings/Projects/partials/form/ProjectUsers.vue

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,33 @@
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>
@@ -27,9 +37,10 @@
2737
<script setup>
2838
import Card from "@/Components/ui/Card.vue";
2939
import {usePage} from "@inertiajs/vue3";
30-
import {computed} from "vue";
40+
import {computed, nextTick, ref, watch} from "vue";
3141
import {find} from "lodash";
3242
import ButtonUserAvatar from "@/Components/ui/form/ButtonUserAvatar.vue";
43+
import UserAvatarVSelect from "@/Components/ui/user/UserAvatarVSelect.vue";
3344
3445
const all_users = computed(()=> usePage().props.users);
3546
const 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)
4758
const 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

Comments
 (0)