diff --git a/src/components/Dropdown.vue b/src/components/Dropdown.vue index b63ebe80e5432298cc6b9851b9c2f6e30f37d69a..ea17558a6a6b1e238746cdf84d70e53fdbba17ae 100644 --- a/src/components/Dropdown.vue +++ b/src/components/Dropdown.vue @@ -11,6 +11,7 @@ <input v-if="search" v-model="input" + @input="isOpen = true" v-on:keyup.enter="select(0)" v-on:keyup.esc="toggleDropdown(false)" class="search" diff --git a/src/views/project/Project_members.vue b/src/views/project/Project_members.vue index dd1fc1c606342a8a6240da3d574f75852a5dca56..c956b2c1361dc15de9f4900c0211e3025d3562e1 100644 --- a/src/views/project/Project_members.vue +++ b/src/views/project/Project_members.vue @@ -2,6 +2,44 @@ <div class="fourteen wide column"> <h1 class="ui header">Gérer les membres</h1> + <h4>Ajouter un membre</h4> + + <form id="form-feature-edit" class="ui form" name="add-member"> + <div class="two fields"> + <div class="field"> + <!-- <label :for="">{{ form.title.label }}</label> --> + <!-- <input type="text" v-model="newMember.name" /> --> + <Dropdown + :options="userOptions" + :selected="newMember.user.name" + :selection.sync="newMember.user" + :search="true" + :clearable="true" + /> + <!-- <ul id="errorlist-title" class="errorlist"> + <li v-for="error in form.title.errors" :key="error"> + {{ error }} + </li> + </ul> --> + </div> + <div class="field"> + <!-- <label for="add-member"></label> --> + <Dropdown + :options="levelOptions" + :selected="newMember.status.name" + :selection.sync="newMember.status" + /> + </div> + </div> + <button @click="addMember" type="button" class="ui teal icon button"> + <i class="white save icon"></i> + <span class="padding-1">Ajouter</span> + </button> + </form> + + <!-- <input type="text" v-model="newMember.name" /> --> + + <h4>Modifier le rôle d'un membre</h4> <form id="form-members" action="." @@ -68,28 +106,65 @@ export default { data() { return { - projectMembers: [], + projectUsers: [], options: [ { name: "Utilisateur connecté", value: "logged_user" }, { name: "Contributeur", value: "contributor" }, { name: "Modérateur", value: "moderator" }, { name: "Administrateur projet", value: "admin" }, ], + newMember: { + user: { + name: "", + value: "", + }, + status: { + name: "Contributeur", + value: "contributor", + }, + }, }; }, computed: { ...mapGetters(["project"]), + + userOptions: function () { + return this.projectUsers + .filter((el) => el.userLevel.value === "logged_user") + .map((el) => { + return { + name: el.user.username, + value: el.user.id, + }; + }); + }, + levelOptions: function () { return this.options.filter((el) => this.project.moderation ? el : el.value !== "moderator" ); }, + + projectMembers() { + return this.projectUsers.filter( + (el) => el.userLevel.value !== "logged_user" + ); + }, }, methods: { + addMember() { + //* find user + const indexOfUser = this.projectUsers.findIndex( + (el) => el.user.id === this.newMember.user.value + ); + //* modify its userLever + this.projectUsers[indexOfUser].userLevel = this.newMember.status; + }, + validateMembers() { - const data = this.projectMembers.map((member) => { + const data = this.projectUsers.map((member) => { return { user: member.user, level: { @@ -120,7 +195,7 @@ export default { }); }, - async fetchMembers() { + fetchMembers() { // todo: move function to a service return axios .get( `${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.$route.params.slug}/utilisateurs` @@ -131,14 +206,14 @@ export default { }); }, - async populateMembers() { + populateMembers() { this.$store.commit( "DISPLAY_LOADER", "Récupération des membres en cours..." ); - await this.fetchMembers().then((members) => { + this.fetchMembers().then((members) => { this.$store.commit("DISCARD_LOADER"); - this.projectMembers = members.map((el) => { + this.projectUsers = members.map((el) => { return { userLevel: { name: el.level.display, value: el.level.codename }, ...el, @@ -160,4 +235,10 @@ export default { this.$store.commit("DISCARD_LOADER"); }, }; -</script> \ No newline at end of file +</script> + +<style> +.padding-1 { + padding: 0 1em; +} +</style> \ No newline at end of file