| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import api from '../../utils/api'
- import { sortTypes } from '../../utils/helpers'
-
- const state = {
- all: [],
- loaded: false,
- singleArtist: null,
- }
-
- 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 _insertInbetweens = posts => {
- // const posts = [
- // { name: "cedar", count: 2 },
- // { name: "fir", count: 6 },
- // { name: "pine", count: 3 }
- // ];
-
- // suppose we need to skip the first element
- const result = posts.find((tree, i) => {
- if (tree.count > 1 && i !== 0) return true;
- });
- // { name: "fir", count: 6 }
- }
-
- const _arrangeByMaterial = artistsList => {
- const byMaterial = {}
- artistsList.forEach(artist => {
- artist.materials.forEach(mat => {
- if(!byMaterial[mat]) byMaterial[mat] = []
- byMaterial[mat].push(artist)
- })
- })
- const flatPacked = []
- Object.keys(byMaterial).forEach(material => {
- flatPacked.push({ slug: material, title: material })
- byMaterial[material].forEach(artist => flatPacked.push(artist))
- })
- return flatPacked
- }
-
- const actions = {
- getAllArtists({ commit }, { sortType, params }) {
- commit('CLEAR_ARTISTS')
- commit('ARTISTS_LOADED', false)
- const storeFetch = (artists => {
- let repacked = artists
- if(sortType == sortTypes.material) {
- repacked = _arrangeByMaterial(artists)
- }
- commit('STORE_FETCHED_ARTISTS', { artists })
- commit('ARTISTS_LOADED', true)
- })
- return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch })
- },
- getMoreArtists({ commit }, { sortType, params }) {
- const storeFetch = (artists => {
- commit('ADD_TO_FETCHED_ARTISTS', { artists })
- 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_SINGLE_ARTISTS(state) {
- state.singleArtist = null
- },
- ARTISTS_LOADED(state, val) {
- state.loaded = val
- },
- }
-
- export default { state, getters, actions, mutations }
|