Skip to content
Snippets Groups Projects
CommunityHeader.vue 5.24 KiB
<template>
  <div>
    <CustomFooterModal
      :title="'Er du sikker på at du vil forlate felleskapet?'"
      :message="'Dersom felleskapet er låst er du nødt til å spørre om å bli med på nytt.'"
      :visible="leaveDialog"
      @close="this.leaveDialog = false"
    >
      <div class="flex place-content-center min-w-6">
        <ColoredButton
          class="m-2"
          :buttonColor="'red'"
          @click="leaveCommunity()"
          :text="'Ja'"
        />
        <ColoredButton
          class="m-2"
          :text="'Nei'"
          @click="this.leaveDialog = false"
        />
      </div>
    </CustomFooterModal>
    <div v-if="loading" class="flex place-content-center mx-4">
      <LoaderSpinner />
    </div>
    <div v-else class="flex items-center justify-between mx-4">
      <router-link
        :to="'/community/' + community.communityId"
        class="flex-1 min-w-0"
      >
        <h2
          class="text-xl md:text-2xl text-gray-600 font-medium w-full sm:truncate"
        >
          {{ community.name }}
        </h2>
        <div
          class="mt-1 flex flex-col sm:flex-row sm:flex-wrap sm:mt-0 sm:space-x-6"
        >
          <div class="mt-2 flex items-center text-sm text-gray-500">
            <svg
              class="flex-shrink-0 mr-1.5 h-5 w-5 text-gray-400"
              xmlns="http://www.w3.org/2000/svg"
              viewBox="0 0 20 20"
              fill="currentColor"
              aria-hidden="true"
            >
              <path
                fill-rule="evenodd"
                d="M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z"
                clip-rule="evenodd"
              />
            </svg>
            {{ community.location }}
          </div>
        </div>
      </router-link>
      <div>
        <!-- If the user is not a member in the community, this button will show -->
        <div v-if="!member">
          <ColoredButton
            v-if="!member"
            :text="'Bli med'"
            @click="joinCommunity(community.communityId)"
            class="m-2"
          />

          <CustomFooterModal
            @close="this.dialogOpen = false"
            :visible="dialogOpen"
            title="Kan ikke bli med"
            message="Logg inn først for å bli med i en gruppe."
          />
        </div>

        <!-- If the user is member of the community, this hamburger menu will show -->
        <div v-if="member">
          <svg
            @click="toggleHamburgerMenu()"
            xmlns="http://www.w3.org/2000/svg"
            class="w-9 h-9 cursor-pointer"
            fill="none"
            viewBox="0 0 24 24"
            stroke="currentColor"
          >
            <path
              stroke-linecap="round"
              stroke-linejoin="round"
              stroke-width="2"
              d="M4 6h16M4 12h16M4 18h16"
            />
          </svg>

          <CommunityHamburger
            @openLeaveCommunityDialog="this.leaveDialog = true"
            v-if="hamburgerOpen"
            class="origin-top-right absolute right-0"
            :community-i-d="community.communityId"
            :admin="admin"
          />
          <!-- class="absolute" -->
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import CommunityHamburger from "@/components/CommunityComponents/CommunityHamburger";
import ColoredButton from "@/components/BaseComponents/ColoredButton";
import LoaderSpinner from "@/components/BaseComponents/LoaderSpinner";
import CommunityService from "@/services/community.service";
import CustomFooterModal from "@/components/BaseComponents/CustomFooterModal";
import { parseCurrentUser } from "@/utils/token-utils";
import { LeaveCommunity } from "@/utils/apiutil";

import {
  JoinOpenCommunity,
  // GetIfUserAlreadyInCommunity,
} from "@/utils/apiutil";

export default {
  name: "CommunityHeader",
  components: {
    CommunityHamburger,
    ColoredButton,
    CustomFooterModal,
    LoaderSpinner,
  },
  computed: {
    userid() {
      return parseCurrentUser().accountId;
    },
  },
  data() {
    return {
      hamburgerOpen: false,
      leaveDialog: false,
      member: false,
      community: {},
      loading: true,
      openDialog: false,
    };
  },
  props: {
    admin: Boolean,
  },
  methods: {
    toggleHamburgerMenu() {
      this.hamburgerOpen = !this.hamburgerOpen;
    },
    leaveCommunity: async function () {
      await LeaveCommunity(this.community.communityId);
      this.$router.push("/");
    },
    async load() {
      this.community = await CommunityService.getCommunity(
        this.$route.params.communityID
      );
      if (this.$store.state.user.token !== null) {
        const members = await CommunityService.getCommunityMembers(
          this.$route.params.communityID
        );
        for (let i = 0; i < members.length; i++) {
          if (members[i].userId == this.userid) {
            this.member = true;
            return;
          }
        }
      }
    },
    joinCommunity: async function (id) {
      const response = await JoinOpenCommunity(id);
      if (response === "Login to join any community") {
        this.dialogOpen = true;
      } else {
        window.location.reload();
      }
    },
  },
  async created() {
    await this.load();
    this.loading = false;
  },
};
</script>