Skip to content
Snippets Groups Projects
ProjectDescriptionCard.vue 6.09 KiB
Newer Older
fibasile's avatar
fibasile committed
<template>
  <div class="col q-gutter-md">
    <q-list dense>
      <q-item>
        <q-item-section side>
          <q-item-label caption>
            Uploaded by
          </q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
      <q-item>
fibasile's avatar
fibasile committed
        <q-item-section avatar>
          <div class="text-center">
            <router-link :to="`/users/${project.owner.uid}`">
fibasile's avatar
fibasile committed
              <q-avatar size="128px">
                <q-img
                  basic
                  :src="project.owner.avatarURL"
                />
fibasile's avatar
fibasile committed
              </q-avatar>
            </router-link>
            <br>
            <div class="text-caption">
              {{ project.owner.name }}
            </div>
fibasile's avatar
fibasile committed
          </div>
        </q-item-section>
      </q-item>
    </q-list>

    <q-list>
      <q-item
        clickable
        @click="showDocumentation"
      >
fibasile's avatar
fibasile committed
        <q-item-section side>
          <q-icon
            name="book"
            color="teal-3"
          />
fibasile's avatar
fibasile committed
        </q-item-section>
        <q-item-section>
          <q-item-label class="text-teal-6 text-weight-bold">
            Documentation
          </q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
      <q-item
        clickable
        @click="showDownloads"
      >
fibasile's avatar
fibasile committed
        <q-item-section side>
          <q-icon
            name="save"
            color="teal-3"
          />
        </q-item-section>
        <q-item-section class="text-teal-6 text-weight-bold">
          Download files
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
      <q-item
        clickable
        @click="handleAddBookmark"
      >
        <q-item-section side>
          <q-icon
            name="bookmark"
            color="teal-3"
          />
        </q-item-section>
        <q-item-section class="text-teal-6 text-weight-bold">
          Add to collection
        </q-item-section>
      </q-item>
fibasile's avatar
fibasile committed
    </q-list>

    <q-list>
      <q-item>
        <q-item-section side>
          <q-item-label caption>
            Category
          </q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
fibasile's avatar
fibasile committed
        <q-item-section>
          <q-item-label>
            <router-link :to="`/catalogue/category/${category_link}`">
              {{ category_label }}
            </router-link>
          </q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
      <q-item>
        <q-item-section side>
          <q-item-label caption>
            Created
          </q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
        <q-item-section>
          <q-item-label>{{ formatted_date }}</q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
fibasile's avatar
fibasile committed
      <q-item v-if="project.tags && project.tags.length > 0">
        <q-item-section side>
          <q-item-label caption>
            Tags
          </q-item-label>
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
fibasile's avatar
fibasile committed
      <q-item v-if="project.tags && project.tags.length > 0">
fibasile's avatar
fibasile committed
        <q-item-section>
          <div class="flex row">
            <router-link
              class="text-caption q-mr-sm"
              style="text-decoration: none"
              v-for="tag in project.tags"
              v-bind:key="tag"
              :to="`/catalogue/tags/${tag}`"
            >#{{tag}}</router-link>
fibasile's avatar
fibasile committed
          </div>
fibasile's avatar
fibasile committed
        </q-item-section>
      </q-item>
    </q-list>
fibasile's avatar
fibasile committed

    <div class="flex row q-gutter-md">
      <q-card
        flat
        class="text-center"
      >
        <q-icon
          size="64px"
          name="star"
          color="grey-3"
        />
        <div class="text-center text-caption">
          Stars
        </div>
        <div class="text-center text-h6 text-grey text-weight-bold">
          0
        </div>
fibasile's avatar
fibasile committed
      </q-card>
      <q-card
        flat
        class="text-center"
      >
        <q-icon
          size="64px"
          name="save"
          color="grey-3"
        />
        <div class="text-center text-caption">
          Downloads
        </div>
        <div class="text-center text-h6 text-grey text-weight-bold">
          {{ project.downloadsCount || 0 }}
        </div>
fibasile's avatar
fibasile committed
      </q-card>
      <SelectCollectionDialog :show="showSelectCollectionDialog" />
      <q-dialog v-model="showDownloadsDialog">
        <DownloadsDialog
          :downloads="downloads"
          :project="project"
        />
      </q-dialog>
fibasile's avatar
fibasile committed
    </div>
fibasile's avatar
fibasile committed
  </div>
</template>

<script>
import { mapGetters } from 'vuex';
import SelectCollectionDialog from 'src/components/collection/SelectCollectionDialog';
import DownloadsDialog from 'src/components/project/DownloadsDialog';
import { openURL } from 'quasar'
fibasile's avatar
fibasile committed
export default {
  // name: 'ComponentName',
  props: ['project', 'downloads'],
  components: { SelectCollectionDialog, DownloadsDialog },
  data () {
    return { showSelectCollectionDialog: false, showDownloadsDialog: false };
fibasile's avatar
fibasile committed
  },
fibasile's avatar
fibasile committed
  methods: {
    openURL,
    showDocumentation () {
      // this.showDocumentationDialog = true;
      // this.openURL
    },
    searchTag (tag) {
      let _tag = '/catalogue/tags/' + tag
      this.$router.push(_tag)
    },
    searchCategory (category) {
      this.$router.push(`/catalogue/categories/${category}`)
    },
    showDownloads () {
      this.showDownloadsDialog = true;
    },
    handleAddBookmark (key) {
      this.showSelectCollectionDialog = true;
    },
    saveBookmark (collection, project) {
      this.addBookmark(null, null).then(() => {
        this.$q.notify('Bookmark added')
      }).catch((e) => {
        console.log(e)
        this.$q.notify('Some error occurred, please try again later')
      })
    }
fibasile's avatar
fibasile committed
  },
fibasile's avatar
fibasile committed
  computed: {
    category_label () {
      if (!this.project) return '';
fibasile's avatar
fibasile committed
      console.log(this.project.category);
      const cat = this.getCategory(this.project.category);
      return cat ? cat.label : 'No category';
fibasile's avatar
fibasile committed
    },
    category_link () {
      if (!this.project) return '';
      return this.project.category
    },
    formatted_date () {
      if (!this.project) return '';
fibasile's avatar
fibasile committed
      if (this.project.created) {
        try {
          const createdDate = this.project.created.toDate();
          console.log(createdDate);
          return this.$niceTime(createdDate);
fibasile's avatar
fibasile committed
        } catch {
          return '';
      return '';
    ...mapGetters({ getCategory: 'categories/categoryByName' })
fibasile's avatar
fibasile committed
  }
};
</script>