index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import { createStore } from 'vuex-extensions'
  4. import { JSONAPI } from 'vuejs/api/json-axios'
  5. import qs from 'querystring-es3'
  6. import Common from './modules/common'
  7. import User from './modules/user'
  8. import Search from './modules/search'
  9. import Blabla from './modules/blabla'
  10. import Showrooms from './modules/showrooms'
  11. import Pages from './modules/pages'
  12. // https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart
  13. Vue.use(Vuex)
  14. // export default new Vuex.Store({
  15. export default createStore(Vuex.Store, {
  16. modules: {
  17. Common,
  18. User,
  19. Search,
  20. Blabla,
  21. Showrooms,
  22. Pages
  23. },
  24. // https://github.com/huybuidac/vuex-extensions
  25. mixins: {
  26. actions: {
  27. loadMaterials ({ dispatch }, { uuids, imgStyle, callBack, callBackArgs }) {
  28. const params = {
  29. // include: 'images', // no needs to include thanks to consumers_image_styles module
  30. // include: 'drupal_internal__nid',
  31. 'filter[uuids-groupe][group][conjunction]': 'OR'
  32. }
  33. for (let i = 0; i < uuids.length; i++) {
  34. const uuid = uuids[i]
  35. params[`filter[${uuid}][condition][path]`] = 'id'
  36. params[`filter[${uuid}][condition][value]`] = uuid
  37. params[`filter[${uuid}][condition][operator]`] = '='
  38. params[`filter[${uuid}][condition][memberOf]`] = 'uuids-groupe'
  39. }
  40. // console.log('search JSONAPI params', params);
  41. const q = qs.stringify(params)
  42. return JSONAPI.get('node/materiau?' + q)
  43. .then(({ data }) => {
  44. console.log('mixin getMaterials data', data)
  45. dispatch('parseMaterials', { data: data.data, uuids: uuids, imgStyle: imgStyle, callBack: callBack, callBackArgs: callBackArgs })
  46. // commit('setItems', data.items)
  47. })
  48. .catch((error) => {
  49. console.warn('Issue with getItems', error)
  50. Promise.reject(error)
  51. })
  52. },
  53. parseMaterials ({ dispatch }, { data, uuids, imgStyle, callBack, callBackArgs }) {
  54. // data comes from jsonapi query
  55. // uuids comes from original query (solr, FlagCollection, etc)
  56. // so we loop from uuids to conserve the original order
  57. console.log('mixin parseMaterials', data, uuids, callBack, callBackArgs)
  58. const items = []
  59. // for (var i = 0; i < data.length; i++) {
  60. for (let i = 0; i < uuids.length; i++) {
  61. const uuid = uuids[i]
  62. // https://stackoverflow.com/questions/11258077/how-to-find-index-of-an-object-by-key-and-value-in-an-javascript-array
  63. const item_index = data.findIndex(p => p.id === uuid)
  64. // console.log('item_index', item_index);
  65. if (item_index === -1) continue
  66. const item_src = data[item_index]
  67. const attrs = item_src.attributes
  68. const relations = item_src.relationships
  69. // get field values
  70. const item = {
  71. uuid: uuid,
  72. title: attrs.title,
  73. field_short_description: attrs.field_short_description,
  74. body: attrs.body,
  75. field_reference: attrs.field_reference
  76. }
  77. // get images included values
  78. const img_src = relations.images.data
  79. // console.log('img_src', img_src);
  80. // this is a temporary deactivation of images
  81. // img_src = [];
  82. item.images = []
  83. for (let j = 0; j < img_src.length; j++) {
  84. if (img_src[j].meta.imageDerivatives) {
  85. item.images.push({
  86. title: img_src[j].meta.title,
  87. // meta.imageDerivatives.style.href link is provided by drupal consumers_image_styles module
  88. // BUG: missing all image derivative but first
  89. url: img_src[j].meta.imageDerivatives.links.[imgStyle].href
  90. })
  91. } else {
  92. console.warn('missing image derivative ' + j + '/' + img_src.length + ' for ' + attrs.title)
  93. }
  94. }
  95. items.push(item)
  96. }
  97. console.log('items', items)
  98. dispatch(callBack, { items: items, callBackArgs: callBackArgs })
  99. }
  100. }
  101. }
  102. })