import api from '../../utils/api' import { sortTypes } from '../../utils/helpers' import { repackBySort } from './arrangements' const state = { all: [], loaded: false, singleArtist: null, seenTitles: [] } const getters = { allArtists: state => state.all, allArtistsBySlug: state => Object.values(state.all).reduce((bySlug, artist) => { bySlug[artist.slug] = artist return bySlug }, {}), allArtistsLoaded: state => state.loaded, } const actions = { getAllArtists({ commit }, { sortType, params }) { commit('CLEAR_ARTISTS') commit('ARTISTS_LOADED', false) const storeFetch = (artists => { let repacked = repackBySort(artists, sortType) commit('STORE_FETCHED_ARTISTS', { artists: repacked }) commit('ARTISTS_LOADED', true) }) return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch }) }, getMoreArtists({ commit }, { sortType, params }) { const storeFetch = (artists => { let repacked = artists if(sortType == sortTypes.alpha) { repacked = repackBySort(artists, sortType) } commit('ADD_TO_FETCHED_ARTISTS', { artists: repacked }) commit('ARTISTS_LOADED', true) }) return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch }) }, getSingleArtist({ commit }, id) { commit('CLEAR_SINGLE_ARTISTS') commit('ARTISTS_LOADED', false) api.getSingleType('artist', id, artist => { commit('STORE_FETCHED_SINGLE_ARTIST', artist) commit('ARTISTS_LOADED', true) }) }, } const mutations = { ADD_TO_FETCHED_ARTISTS(state, { artists }) { state.all = [...state.all, ...artists] }, STORE_FETCHED_ARTISTS(state, { artists }) { state.all = artists }, STORE_FETCHED_SINGLE_ARTIST(state, artist) { state.singleArtist = artist }, CLEAR_ARTISTS(state) { state.all = [] }, CLEAR_ARTISTS_SEEN(state) { state.seenTitles = [] }, CLEAR_SINGLE_ARTISTS(state) { state.singleArtist = null }, ARTISTS_LOADED(state, val) { state.loaded = val }, } export default { state, getters, actions, mutations }