mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <div>
 | 
						|
    <app-settings-content :header-text="$strings.HeaderApiKeys">
 | 
						|
      <template #header-items>
 | 
						|
        <div v-if="numApiKeys" class="mx-2 px-1.5 rounded-lg bg-primary/50 text-gray-300/90 text-sm inline-flex items-center justify-center">
 | 
						|
          <span>{{ numApiKeys }}</span>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
 | 
						|
          <a href="https://www.audiobookshelf.org/guides/api-keys" target="_blank" class="inline-flex">
 | 
						|
            <span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
 | 
						|
          </a>
 | 
						|
        </ui-tooltip>
 | 
						|
 | 
						|
        <div class="grow" />
 | 
						|
 | 
						|
        <ui-btn color="bg-primary" :disabled="loadingUsers || users.length === 0" small @click="setShowApiKeyModal()">{{ $strings.ButtonAddApiKey }}</ui-btn>
 | 
						|
      </template>
 | 
						|
 | 
						|
      <tables-api-keys-table ref="apiKeysTable" class="pt-2" @edit="setShowApiKeyModal" @numApiKeys="(count) => (numApiKeys = count)" />
 | 
						|
    </app-settings-content>
 | 
						|
    <modals-api-key-modal ref="apiKeyModal" v-model="showApiKeyModal" :api-key="selectedApiKey" :users="users" @created="apiKeyCreated" @updated="apiKeyUpdated" />
 | 
						|
    <modals-api-key-created-modal ref="apiKeyCreatedModal" v-model="showApiKeyCreatedModal" :api-key="selectedApiKey" />
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
export default {
 | 
						|
  asyncData({ store, redirect }) {
 | 
						|
    if (!store.getters['user/getIsAdminOrUp']) {
 | 
						|
      redirect('/')
 | 
						|
    }
 | 
						|
  },
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      loadingUsers: false,
 | 
						|
      selectedApiKey: null,
 | 
						|
      showApiKeyModal: false,
 | 
						|
      showApiKeyCreatedModal: false,
 | 
						|
      numApiKeys: 0,
 | 
						|
      users: []
 | 
						|
    }
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    apiKeyCreated(apiKey) {
 | 
						|
      this.numApiKeys++
 | 
						|
      this.selectedApiKey = apiKey
 | 
						|
      this.showApiKeyCreatedModal = true
 | 
						|
      if (this.$refs.apiKeysTable) {
 | 
						|
        this.$refs.apiKeysTable.addApiKey(apiKey)
 | 
						|
      }
 | 
						|
    },
 | 
						|
    apiKeyUpdated(apiKey) {
 | 
						|
      if (this.$refs.apiKeysTable) {
 | 
						|
        this.$refs.apiKeysTable.updateApiKey(apiKey)
 | 
						|
      }
 | 
						|
    },
 | 
						|
    setShowApiKeyModal(selectedApiKey) {
 | 
						|
      this.selectedApiKey = selectedApiKey
 | 
						|
      this.showApiKeyModal = true
 | 
						|
    },
 | 
						|
    loadUsers() {
 | 
						|
      this.loadingUsers = true
 | 
						|
      this.$axios
 | 
						|
        .$get('/api/users')
 | 
						|
        .then((res) => {
 | 
						|
          this.users = res.users.sort((a, b) => {
 | 
						|
            return a.createdAt - b.createdAt
 | 
						|
          })
 | 
						|
        })
 | 
						|
        .catch((error) => {
 | 
						|
          console.error('Failed', error)
 | 
						|
        })
 | 
						|
        .finally(() => {
 | 
						|
          this.loadingUsers = false
 | 
						|
        })
 | 
						|
    }
 | 
						|
  },
 | 
						|
  mounted() {
 | 
						|
    this.loadUsers()
 | 
						|
  },
 | 
						|
  beforeDestroy() {}
 | 
						|
}
 | 
						|
</script>
 |