Merge provider actions and mutations, add loaded state

This commit is contained in:
mikiher 2025-10-19 11:39:10 +03:00
parent b01e7570d3
commit 141211590f

View File

@ -2,7 +2,8 @@ export const state = () => ({
bookProviders: [], bookProviders: [],
podcastProviders: [], podcastProviders: [],
bookCoverProviders: [], bookCoverProviders: [],
podcastCoverProviders: [] podcastCoverProviders: [],
providersLoaded: false
}) })
export const getters = { export const getters = {
@ -11,63 +12,49 @@ export const getters = {
}, },
checkPodcastProviderExists: (state) => (providerValue) => { checkPodcastProviderExists: (state) => (providerValue) => {
return state.podcastProviders.some((p) => p.value === providerValue) return state.podcastProviders.some((p) => p.value === providerValue)
} },
areProvidersLoaded: (state) => state.providersLoaded
} }
export const actions = { export const actions = {
async fetchBookProviders({ commit }) { async fetchProviders({ commit, state }) {
// Only fetch if not already loaded
if (state.providersLoaded) {
return
}
try { try {
const response = await this.$axios.$get('/api/search/providers/books') const response = await this.$axios.$get('/api/search/providers')
if (response?.providers) { if (response?.providers) {
commit('setBookProviders', response.providers) commit('setAllProviders', response.providers)
} }
} catch (error) { } catch (error) {
console.error('Failed to fetch book providers', error) console.error('Failed to fetch providers', error)
} }
}, },
async fetchPodcastProviders({ commit }) { async refreshProviders({ commit, state }) {
// if providers are not loaded, do nothing - they will be fetched when required (
if (!state.providersLoaded) {
return
}
try { try {
const response = await this.$axios.$get('/api/search/providers/podcasts') const response = await this.$axios.$get('/api/search/providers')
if (response?.providers) { if (response?.providers) {
commit('setPodcastProviders', response.providers) commit('setAllProviders', response.providers)
} }
} catch (error) { } catch (error) {
console.error('Failed to fetch podcast providers', error) console.error('Failed to refresh providers', error)
}
},
async fetchBookCoverProviders({ commit }) {
try {
const response = await this.$axios.$get('/api/search/providers/books/covers')
if (response?.providers) {
commit('setBookCoverProviders', response.providers)
}
} catch (error) {
console.error('Failed to fetch book cover providers', error)
}
},
async fetchPodcastCoverProviders({ commit }) {
try {
const response = await this.$axios.$get('/api/search/providers/podcasts/covers')
if (response?.providers) {
commit('setPodcastCoverProviders', response.providers)
}
} catch (error) {
console.error('Failed to fetch podcast cover providers', error)
} }
} }
} }
export const mutations = { export const mutations = {
setBookProviders(state, providers) { setAllProviders(state, providers) {
state.bookProviders = providers state.bookProviders = providers.books || []
}, state.podcastProviders = providers.podcasts || []
setPodcastProviders(state, providers) { state.bookCoverProviders = providers.booksCovers || []
state.podcastProviders = providers state.podcastCoverProviders = providers.podcasts || [] // Use same as bookCovers since podcasts use iTunes only
}, state.providersLoaded = true
setBookCoverProviders(state, providers) {
state.bookCoverProviders = providers
},
setPodcastCoverProviders(state, providers) {
state.podcastCoverProviders = providers
} }
} }