Skip to content
Snippets Groups Projects
LibraryCard.vue 3.19 KiB
Newer Older
  • Learn to ignore specific revisions
  • <template>
      <div class="ui card">
        <div class="content">
          <div class="header">
    
          </div>
        </div>
        <div class="content">
    
          <span class="right floated" v-if="following">
    
    Bat's avatar
    Bat committed
            <i class="check icon"></i><i18next path="Following"/>
    
          </span>
          <span class="right floated" v-else-if="manuallyApprovesFollowers">
    
    Bat's avatar
    Bat committed
            <i class="lock icon"></i><i18next path="Followers only"/>
    
          <span class="right floated" v-else>
    
    Bat's avatar
    Bat committed
            <i class="open lock icon"></i><i18next path="Open"/>
    
          <span v-if="totalItems">
    
            <i class="music icon"></i>
    
    Bat's avatar
    Bat committed
            <i18next path="{%0%} tracks">
              {{ totalItems }}
            </i18next>
    
          </span>
        </div>
        <div class="extra content">
    
          <template v-if="awaitingApproval">
    
            <i class="clock icon"></i>
    
    Bat's avatar
    Bat committed
            <i18next path="Follow request pending approval"/>
    
            @click="follow"
            :disabled="isLoading"
            :class="['ui', 'basic', {loading: isLoading}, 'green', 'button']">
    
    Bat's avatar
    Bat committed
            <i18next v-if="manuallyApprovesFollowers" path="Send a follow request"/>
            <i18next v-else path="Follow">
    
          </div>
          <router-link
            v-else
            class="ui basic button"
            :to="{name: 'federation.libraries.detail', params: {id: library.uuid }}">
    
    Bat's avatar
    Bat committed
            <i18next path="Detail"/>
    
          </router-link>
        </div>
      </div>
    </template>
    
    <script>
    import axios from 'axios'
    
    export default {
    
      props: ['libraryData', 'libraryInstance'],
    
          library: this.libraryInstance,
    
          isLoading: false,
          data: null,
    
        }
      },
      methods: {
        follow () {
          let params = {
            'actor': this.libraryData['actor']['id'],
            'autoimport': false,
            'download_files': false,
            'federation_enabled': true
          }
          let self = this
          self.isLoading = true
          axios.post('/federation/libraries/', params).then((response) => {
            self.$emit('follow', {data: self.libraryData, library: response.data})
            self.library = response.data
            self.isLoading = false
          }, error => {
            self.isLoading = false
            self.errors = error.backendErrors
          })
        }
    
      },
      computed: {
        displayName () {
          if (this.libraryData) {
            return this.libraryData.display_name
          } else {
            return `${this.library.actor.preferred_username}@${this.library.actor.domain}`
          }
        },
        manuallyApprovesFollowers () {
          if (this.libraryData) {
            return this.libraryData.actor.manuallyApprovesFollowers
          } else {
            return this.library.actor.manually_approves_followers
          }
        },
        totalItems () {
          if (this.libraryData) {
            return this.libraryData.library.totalItems
          } else {
            return this.library.tracks_count
          }
        },
        awaitingApproval () {
          if (this.libraryData) {
            return this.libraryData.local.awaiting_approval
          } else {
            return this.library.follow.approved === null
          }
        },
        following () {
          if (this.libraryData) {
            return this.libraryData.local.following
          } else {
            return this.library.follow.approved
          }
        }