Skip to content
Snippets Groups Projects
ProjectDescriptionCard.vue 5.12 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>
fibasile's avatar
fibasile committed
          <q-item-label>{{ category_label }}</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>
fibasile's avatar
fibasile committed
          <div class="row">
            <q-chip
              dense
              v-for="tag,idx in project.tags"
              :key="tag"
              :label="tag"
            />
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" />
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';

fibasile's avatar
fibasile committed
export default {
  // name: 'ComponentName',
  props: ['project'],
  components: { SelectCollectionDialog },
  data () {
    return { showSelectCollectionDialog: false };
fibasile's avatar
fibasile committed
  },
fibasile's avatar
fibasile committed
  methods: {
    showDocumentation () { },
    showDownloads () { },
    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
    },
    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>