NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

artist.js 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import api from '../../utils/api'
  2. import { sortTypes } from '../../utils/helpers'
  3. const state = {
  4. all: [],
  5. loaded: false,
  6. singleArtist: null,
  7. seenTitles: []
  8. }
  9. const getters = {
  10. allArtists: state => state.all,
  11. allArtistsBySlug: state =>
  12. Object.values(state.all).reduce((bySlug, artist) => {
  13. bySlug[artist.slug] = artist
  14. return bySlug
  15. }, {}),
  16. allArtistsLoaded: state => state.loaded,
  17. }
  18. const _arrangeByMaterial = artistsList => {
  19. const byMaterial = {
  20. clay: []
  21. }
  22. artistsList.forEach(artist => {
  23. artist.materials.forEach(mat => {
  24. if(!byMaterial[mat]) byMaterial[mat] = []
  25. byMaterial[mat].push(artist)
  26. })
  27. })
  28. const flatPacked = []
  29. Object.keys(byMaterial).forEach(material => {
  30. flatPacked.push({ slug: material, title: material, inbetween: true })
  31. byMaterial[material].forEach(artist => flatPacked.push(artist))
  32. })
  33. return flatPacked
  34. }
  35. const _arrangeByAlpha = artistsList => {
  36. const alphabet = [...'9abcdefghijklmnopqrstuvwxyz']
  37. const flatPacked = []
  38. const storeTitle = letter => {
  39. if(state.seenTitles.includes(letter)) return
  40. flatPacked.push({ slug: letter, title: letter, inbetween: true })
  41. state.seenTitles.push(letter)
  42. }
  43. artistsList.forEach(artist => {
  44. const lastWord = artist.slug.split('-').filter(c => c).pop()
  45. const firstCharaOflastWord = lastWord[0]
  46. const firstCharaOfSortWord = artist.sortname ? artist.sortname[0] : 'z'
  47. const charaIndex = alphabet.indexOf(firstCharaOflastWord) < alphabet.indexOf(firstCharaOfSortWord) ? alphabet.indexOf(firstCharaOflastWord) : alphabet.indexOf(firstCharaOfSortWord)
  48. storeTitle(alphabet[charaIndex])
  49. flatPacked.push(artist)
  50. })
  51. return flatPacked
  52. }
  53. const actions = {
  54. getAllArtists({ commit }, { sortType, params }) {
  55. commit('CLEAR_ARTISTS')
  56. commit('ARTISTS_LOADED', false)
  57. const storeFetch = (artists => {
  58. let repacked = artists
  59. if(sortType == sortTypes.material) {
  60. repacked = _arrangeByMaterial(artists)
  61. }
  62. commit('STORE_FETCHED_ARTISTS', { artists: repacked })
  63. commit('ARTISTS_LOADED', true)
  64. })
  65. return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch })
  66. },
  67. getMoreArtists({ commit }, { sortType, params }) {
  68. commit('ARTISTS_LOADED', false)
  69. const storeFetch = (artists => {
  70. let repacked = artists
  71. if(sortType == sortTypes.alpha) {
  72. repacked = _arrangeByAlpha(artists)
  73. }
  74. commit('ADD_TO_FETCHED_ARTISTS', { artists: repacked })
  75. commit('ARTISTS_LOADED', true)
  76. })
  77. return api.getByType({ type: 'artist', sort: sortType, params, cb: storeFetch })
  78. },
  79. getSingleArtist({ commit }, id) {
  80. commit('CLEAR_SINGLE_ARTISTS')
  81. commit('ARTISTS_LOADED', false)
  82. api.getSingleType('artist', id, artist => {
  83. commit('STORE_FETCHED_SINGLE_ARTIST', artist)
  84. commit('ARTISTS_LOADED', true)
  85. })
  86. },
  87. }
  88. const mutations = {
  89. ADD_TO_FETCHED_ARTISTS(state, { artists }) {
  90. state.all = [...state.all, ...artists]
  91. },
  92. STORE_FETCHED_ARTISTS(state, { artists }) {
  93. state.all = artists
  94. },
  95. STORE_FETCHED_SINGLE_ARTIST(state, artist) {
  96. state.singleArtist = artist
  97. },
  98. CLEAR_ARTISTS(state) {
  99. state.all = []
  100. },
  101. CLEAR_ARTISTS_SEEN(state) {
  102. state.seenTitles = []
  103. },
  104. CLEAR_SINGLE_ARTISTS(state) {
  105. state.singleArtist = null
  106. },
  107. ARTISTS_LOADED(state, val) {
  108. state.loaded = val
  109. },
  110. }
  111. export default { state, getters, actions, mutations }