Skip to content
Snippets Groups Projects
Project_members.vue 3.35 KiB
Newer Older
<template>
  <div class="fourteen wide column">
    <h1 class="ui header">Gérer les membres</h1>

    <form
      id="form-members"
      action="."
      method="post"
      enctype="multipart/form-data"
      class="ui form"
    >
      <table class="ui red table">
        <thead>
          <tr>
            <th>Membre</th>
            <th>Niveau d'autorisation</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="member in projectMembers" :key="member.username">
            <td>
              {{ member.user.last_name }} {{ member.user.first_name }}<br /><i
                >{{ member.user.username }}</i
              >
            </td>
            <td>
              <div class="required field">
                <Dropdown
                  :options="levelOptions"
                  :selected="member.userLevel.name"
                  :selection.sync="member.userLevel"
                  :search="true"
                />
              </div>
            </td>
          </tr>
        </tbody>
      </table>

      <div class="ui divider"></div>

      <button
        @click="validateMembers"
        type="button"
        class="ui teal icon button"
      >
        <i class="white save icon"></i> Enregistrer les changements
      </button>
    </form>
  </div>
</template>

<script>
import axios from "axios";
import frag from "vue-frag";
import { mapGetters } from "vuex";
import Dropdown from "@/components/Dropdown.vue";

export default {
  name: "Project_members",

  directives: {
    frag,
  },
  components: {
    Dropdown,
  },

  data() {
    return {
      projectMembers: [],
      levelOptions: [
        { name: "Utilisateur connecté", value: "logged_user" },
        { name: "Contributeur", value: "contributor" },
        { name: "Modérateur", value: "moderator" },
        { name: "Administrateur projet", value: "admin" },

  computed: {
    ...mapGetters(["project"]),
  },

      const data = this.projectMembers.map((member) => {
        return {
          user: member.user,
          level: {
            display: member.userLevel.name,
            codename: member.userLevel.value,
          },
        };
      });
      axios
        .put(
          `${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.project.slug}/utilisateurs/`,
          data
        )
          if (response.status === 200) {
            this.$store.dispatch("GET_USER_LEVEL_PROJECTS"); //* update user status in top right menu
          }
        .catch((error) => {
          throw error;
        });
    async fetchMembers() {
      return axios
        .get(
          `${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.$route.params.slug}/utilisateurs`
        )
        .then((response) => response.data)
    async populateMembers() {
      await this.fetchMembers().then((members) => {
        this.projectMembers = members.map((el) => {
          return {
            userLevel: { name: el.level.display, value: el.level.codename },
            ...el,
          };
        });
      });
    },
  },

  created() {
    if (!this.project) {
      this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug);
    }
    this.populateMembers();
  },
};
</script>