NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

artist.js 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import api from '../../utils/api'
  2. import { sortTypes } from '../../utils/helpers'
  3. const state = {
  4. all: [],
  5. loaded: false,
  6. singleArtist: null,
  7. }
  8. const getters = {
  9. allArtists: state => state.all,
  10. allArtistsBySlug: state =>
  11. Object.values(state.all).reduce((bySlug, artist) => {
  12. bySlug[artist.slug] = artist
  13. return bySlug
  14. }, {}),
  15. allArtistsLoaded: state => state.loaded,
  16. }
  17. const _insertInbetweens = posts => {
  18. // const posts = [
  19. // { name: "cedar", count: 2 },
  20. // { name: "fir", count: 6 },
  21. // { name: "pine", count: 3 }
  22. // ];
  23. // suppose we need to skip the first element
  24. const result = posts.find((tree, i) => {
  25. if (tree.count > 1 && i !== 0) return true;
  26. });
  27. // { name: "fir", count: 6 }
  28. }
  29. const _arrangeByMaterial = artistsList => {
  30. const byMaterial = {}
  31. artistsList.forEach(artist => {
  32. artist.materials.forEach(mat => {
  33. if(!byMaterial[mat]) byMaterial[mat] = []
  34. byMaterial[mat].push(artist)
  35. })
  36. })
  37. const flatPacked = []
  38. Object.keys(byMaterial).forEach(material => {
  39. flatPacked.push({ slug: material, title: material })
  40. byMaterial[material].forEach(artist => flatPacked.push(artist))
  41. })
  42. return flatPacked
  43. }
  44. const actions = {
  45. getAllArtists({ commit }, { sortType, params }) {
  46. commit('CLEAR_ARTISTS')
  47. commit('ARTISTS_LOADED', false)
  48. const storeFetch = (artists => {
  49. let repacked = artists
  50. if(sortType == sortTypes.material) {
  51. repacked = _arrangeByMaterial(artists)
  52. }
  53. commit('STORE_FETCHED_ARTISTS', { artists })
  54. commit('ARTISTS_LOADED', true)
  55. })
  56. return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch })
  57. },
  58. getMoreArtists({ commit }, { sortType, params }) {
  59. const storeFetch = (artists => {
  60. commit('ADD_TO_FETCHED_ARTISTS', { artists })
  61. commit('ARTISTS_LOADED', true)
  62. })
  63. return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch })
  64. },
  65. getSingleArtist({ commit }, id) {
  66. commit('CLEAR_SINGLE_ARTISTS')
  67. commit('ARTISTS_LOADED', false)
  68. api.getSingleType('artist', id, artist => {
  69. commit('STORE_FETCHED_SINGLE_ARTIST', artist)
  70. commit('ARTISTS_LOADED', true)
  71. })
  72. },
  73. }
  74. const mutations = {
  75. ADD_TO_FETCHED_ARTISTS(state, { artists }) {
  76. state.all = [...state.all, ...artists]
  77. },
  78. STORE_FETCHED_ARTISTS(state, { artists }) {
  79. state.all = artists
  80. },
  81. STORE_FETCHED_SINGLE_ARTIST(state, artist) {
  82. state.singleArtist = artist
  83. },
  84. CLEAR_ARTISTS(state) {
  85. state.all = []
  86. },
  87. CLEAR_SINGLE_ARTISTS(state) {
  88. state.singleArtist = null
  89. },
  90. ARTISTS_LOADED(state, val) {
  91. state.loaded = val
  92. },
  93. }
  94. export default { state, getters, actions, mutations }