mrgodhani/raven-reader

View on GitHub
src/components/MenuItems.vue

Summary

Maintainability
Test Coverage
<template>
  <ul class="nav flex-column">
    <li class="nav-item">
      <a
        href="#"
        class="nav-link feed-mix-link menu-link-clickable"
        :class="{ active: isMenuItemActive('all') }"
        @click="handleMenuItem('all')"
      >
        <feed-mix
          feed-id="allFeeds"
          mark="allFeeds"
        >
          <feather-icon name="list" />{{ $t('All Feeds') }}
          <span
            v-if="isMenuItemActive('all')"
            class="sr-only"
          >(current)</span>
          <span
            v-if="getAllCount > 0"
            class="items-counter"
          >{{ getAllCount }}</span>
        </feed-mix>
      </a>
    </li>
    <li class="nav-item">
      <a
        class="nav-link feed-mix-link menu-link-clickable"
        href="#"
        :class="{ active: isMenuItemActive('favourites') }"
        @click.prevent="handleMenuItem('favourites')"
      >
        <feed-mix
          feed-id="favourites"
          mark="favourites"
        >
          <feather-icon name="star" />{{ $t('Favourites') }}
          <span
            v-if="isMenuItemActive('favourites')"
            class="sr-only"
          >(current)</span>
          <span
            v-if="getFavouriteCount > 0"
            class="items-counter"
          >{{ getFavouriteCount }}</span>
        </feed-mix>
      </a>
    </li>
    <li class="nav-item">
      <a
        class="nav-link feed-mix-link menu-link-clickable"
        href="#"
        :class="{ active: isMenuItemActive('unread') }"
        @click.prevent="handleMenuItem('unread')"
      >
        <feed-mix
          feed-id="unreadArticles"
          mark="unreadArticles"
        >
          <feather-icon name="circle" />{{ $t('Unread Articles') }}
          <span
            v-if="isMenuItemActive('unread')"
            class="sr-only"
          >(current)</span>
          <span
            v-if="getUnreadCount > 0"
            class="items-counter"
          >{{ getUnreadCount }}</span>
        </feed-mix>
      </a>
    </li>
    <li
      class="nav-item"
      :class="{ 'd-none': showLess }"
    >
      <a
        class="nav-link feed-mix-link menu-link-clickable"
        href="#"
        :class="{ active: isMenuItemActive('read') }"
        @click.prevent="handleMenuItem('read')"
      >
        <feed-mix
          feed-id="recentlyRead"
          mark="recentlyRead"
        >
          <feather-icon
            name="circle"
            filled
          />{{ $t('Recently Read') }}
          <span
            v-if="isMenuItemActive('read')"
            class="sr-only"
          >(current)</span>
          <span
            v-if="getReadCount > 0"
            class="items-counter"
          >{{ getReadCount }}</span>
        </feed-mix>
      </a>
    </li>
    <li
      class="nav-item"
      :class="{ 'd-none': showLess }"
    >
      <a
        class="nav-link feed-mix-link menu-link-clickable"
        href="#"
        :class="{ active: isMenuItemActive('played') }"
        @click.prevent="handleMenuItem('played')"
      >
        <feed-mix
          feed-id="recentlyPlayed"
          mark="recentlyPlayed"
        >
          <feather-icon name="play-circle" />{{ $t('Recently Played') }}
          <span
            v-if="isMenuItemActive('played')"
            class="sr-only"
          >(current)</span>
          <span
            v-if="getPlayedCount > 0"
            class="items-counter"
          >{{ getPlayedCount }}</span>
        </feed-mix>
      </a>
    </li>
    <li
      class="nav-item"
      :class="{ 'd-none': showLess }"
    >
      <a
        class="nav-link feed-mix-link menu-link-clickable"
        href="#"
        :class="{ active: isMenuItemActive('saved') }"
        @click.prevent="handleMenuItem('saved')"
      >
        <feed-mix
          feed-id="savedArticles"
          mark="savedArticles"
        >
          <feather-icon name="wifi-off" />{{ $t('Saved articles') }}
          <span
            v-if="isMenuItemActive('saved')"
            class="sr-only"
          >(current)</span>
          <span
            v-if="getSavedCount > 0"
            class="items-counter"
          >{{ getSavedCount }}</span>
        </feed-mix>
      </a>
    </li>
    <li class="nav-item">
      <a
        class="nav-link menu-link-clickable"
        href="#"
        @click="showLessItems"
      >
        <template v-if="showLess">
          <feather-icon name="arrow-down" /> {{ $t('Show more') }}
        </template>
        <template v-if="!showLess">
          <feather-icon name="arrow-up" /> {{ $t('Show less') }}
        </template>
      </a>
    </li>
  </ul>
</template>
<script>
import bus from '../services/bus'
import feedMix from '../mixins/feedMix'

export default {
  mixins: [
    feedMix
  ],
  data () {
    return {
      showLess: false
    }
  },
  computed: {
    getAllCount () {
      return this.$store.state.Article.articles.length
    },
    getFavouriteCount () {
      return this.$store.state.Article.articles.filter(article => article.articles.favourite).length
    },
    getUnreadCount () {
      return this.$store.state.Article.articles.filter(article => !article.articles.read).length
    },
    getReadCount () {
      return this.$store.state.Article.articles.filter(article => article.articles.read).length
    },
    getPlayedCount () {
      return this.$store.state.Article.articles.filter(article => article.articles.podcast && article.articles.played).length
    },
    getSavedCount () {
      return this.$store.state.Article.articles.filter(article => article.articles.offline).length
    }
  },
  methods: {
    handleMenuItem (type) {
      bus.$emit('change-article-list', {
        type: 'type-page',
        item: type
      })
    },
    showLessItems () {
      this.showLess = !this.showLess
    }
  }
}
</script>
<style lang="scss" scoped>
.menu-link-clickable {
  cursor: pointer;
}
</style>