75 lines
2.2 KiB
Vue
75 lines
2.2 KiB
Vue
<template>
|
|
<div class="relative">
|
|
<app-settings-content :header-text="$strings.HeaderCustomMetadataProviders">
|
|
<template #header-prefix>
|
|
<nuxt-link to="/config/item-metadata-utils" class="w-8 h-8 flex items-center justify-center rounded-full cursor-pointer hover:bg-white hover:bg-opacity-10 text-center mr-2">
|
|
<span class="material-symbols text-2xl">arrow_back</span>
|
|
</nuxt-link>
|
|
</template>
|
|
<template #header-items>
|
|
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
|
|
<a href="https://www.audiobookshelf.org/guides/custom-metadata-providers" target="_blank" class="inline-flex">
|
|
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
|
|
</a>
|
|
</ui-tooltip>
|
|
<div class="flex-grow" />
|
|
|
|
<ui-btn color="primary" small @click="setShowAddModal">{{ $strings.ButtonAdd }}</ui-btn>
|
|
</template>
|
|
|
|
<tables-custom-metadata-provider-table :providers="providers" :processing.sync="processing" class="pt-2" @removed="providerRemoved" />
|
|
<modals-add-custom-metadata-provider-modal ref="addModal" v-model="showAddModal" @added="providerAdded" />
|
|
</app-settings-content>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
async asyncData({ store, redirect }) {
|
|
if (!store.getters['user/getIsAdminOrUp']) {
|
|
redirect('/')
|
|
return
|
|
}
|
|
return {}
|
|
},
|
|
data() {
|
|
return {
|
|
showAddModal: false,
|
|
processing: false,
|
|
providers: []
|
|
}
|
|
},
|
|
methods: {
|
|
providerRemoved(providerId) {
|
|
this.providers = this.providers.filter((p) => p.id !== providerId)
|
|
},
|
|
providerAdded(provider) {
|
|
this.providers.push(provider)
|
|
},
|
|
setShowAddModal() {
|
|
this.showAddModal = true
|
|
},
|
|
loadProviders() {
|
|
this.processing = true
|
|
this.$axios
|
|
.$get('/api/custom-metadata-providers')
|
|
.then((res) => {
|
|
this.providers = res.providers
|
|
})
|
|
.catch((error) => {
|
|
console.error('Failed', error)
|
|
this.$toast.error(this.$strings.ToastFailedToLoadData)
|
|
})
|
|
.finally(() => {
|
|
this.processing = false
|
|
})
|
|
}
|
|
},
|
|
mounted() {
|
|
this.loadProviders()
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style></style>
|