mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
151 lines
3.7 KiB
Vue
151 lines
3.7 KiB
Vue
|
<template>
|
||
|
<div>
|
||
|
<div class="text-center">
|
||
|
<table id="providers">
|
||
|
<tr>
|
||
|
<th>{{ $strings.LabelName }}</th>
|
||
|
<th>{{ $strings.LabelUrl }}</th>
|
||
|
<th>{{ $strings.LabelApiKey }}</th>
|
||
|
<th class="w-12"></th>
|
||
|
</tr>
|
||
|
<tr v-for="provider in providers" :key="provider.id">
|
||
|
<td class="text-sm">{{ provider.name }}</td>
|
||
|
<td class="text-sm">{{ provider.url }}</td>
|
||
|
<td class="text-sm">
|
||
|
<span class="custom-provider-api-key">{{ provider.apiKey }}</span>
|
||
|
</td>
|
||
|
<td class="py-0">
|
||
|
<div class="h-8 w-8 flex items-center justify-center text-white text-opacity-50 hover:text-error cursor-pointer" @click.stop="removeProvider(provider)">
|
||
|
<button type="button" :aria-label="$strings.ButtonDelete" class="material-icons text-base">delete</button>
|
||
|
</div>
|
||
|
</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
</div>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
export default {
|
||
|
data() {
|
||
|
return {
|
||
|
providers: [],
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
addedProvider(provider) {
|
||
|
if (!Array.isArray(this.providers)) return
|
||
|
|
||
|
this.providers.push(provider)
|
||
|
},
|
||
|
removedProvider(provider) {
|
||
|
this.providers = this.providers.filter((p) => p.id !== provider.id)
|
||
|
},
|
||
|
removeProvider(provider) {
|
||
|
this.$axios
|
||
|
.$delete(`/api/custom-metadata-providers/admin/${provider.id}`)
|
||
|
.then((data) => {
|
||
|
if (data.error) {
|
||
|
this.$toast.error(`Failed to remove provider: ${data.error}`)
|
||
|
} else {
|
||
|
this.$toast.success('Provider removed')
|
||
|
}
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
console.error('Failed to remove provider', error)
|
||
|
this.$toast.error('Failed to remove provider')
|
||
|
})
|
||
|
},
|
||
|
loadProviders() {
|
||
|
this.$axios.$get('/api/custom-metadata-providers/admin')
|
||
|
.then((res) => {
|
||
|
this.providers = res.providers
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
console.error('Failed', error)
|
||
|
})
|
||
|
},
|
||
|
init(attempts = 0) {
|
||
|
if (!this.$root.socket) {
|
||
|
if (attempts > 10) {
|
||
|
return console.error('Failed to setup socket listeners')
|
||
|
}
|
||
|
setTimeout(() => {
|
||
|
this.init(++attempts)
|
||
|
}, 250)
|
||
|
return
|
||
|
}
|
||
|
this.$root.socket.on('custom_metadata_provider_added', this.addedProvider)
|
||
|
this.$root.socket.on('custom_metadata_provider_removed', this.removedProvider)
|
||
|
}
|
||
|
},
|
||
|
mounted() {
|
||
|
this.loadProviders()
|
||
|
this.init()
|
||
|
},
|
||
|
beforeDestroy() {
|
||
|
if (this.$refs.addModal) {
|
||
|
this.$refs.addModal.close()
|
||
|
}
|
||
|
|
||
|
if (this.$root.socket) {
|
||
|
this.$root.socket.off('custom_metadata_provider_added', this.addedProvider)
|
||
|
this.$root.socket.off('custom_metadata_provider_removed', this.removedProvider)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style>
|
||
|
#providers {
|
||
|
table-layout: fixed;
|
||
|
border-collapse: collapse;
|
||
|
border: 1px solid #474747;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
#providers td,
|
||
|
#providers th {
|
||
|
/* border: 1px solid #2e2e2e; */
|
||
|
padding: 8px 8px;
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
#providers td.py-0 {
|
||
|
padding: 0px 8px;
|
||
|
}
|
||
|
|
||
|
#providers tr:nth-child(even) {
|
||
|
background-color: #373838;
|
||
|
}
|
||
|
|
||
|
#providers tr:nth-child(odd) {
|
||
|
background-color: #2f2f2f;
|
||
|
}
|
||
|
|
||
|
#providers tr:hover {
|
||
|
background-color: #444;
|
||
|
}
|
||
|
|
||
|
#providers th {
|
||
|
font-size: 0.8rem;
|
||
|
font-weight: 600;
|
||
|
padding-top: 5px;
|
||
|
padding-bottom: 5px;
|
||
|
background-color: #272727;
|
||
|
}
|
||
|
|
||
|
.custom-provider-api-key {
|
||
|
padding: 1px;
|
||
|
background-color: #272727;
|
||
|
border-radius: 4px;
|
||
|
color: transparent;
|
||
|
transition: color, background-color 0.5s ease;
|
||
|
}
|
||
|
|
||
|
.custom-provider-api-key:hover {
|
||
|
background-color: transparent;
|
||
|
color: white;
|
||
|
}
|
||
|
</style>
|