search.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { JSONAPI } from 'vuejs/api/json-axios'
  2. import { MA } from 'vuejs/api/ma-axios'
  3. import qs from 'querystring'
  4. export default {
  5. namespaced: true,
  6. // initial state
  7. state : {
  8. keys: "",
  9. term: "",
  10. uuids: [],
  11. items: [],
  12. offset: 0,
  13. limit: 15,
  14. infos: null,
  15. count: 0
  16. },
  17. // getters
  18. getters : {},
  19. // mutations
  20. mutations : {
  21. setUuids (state, uuids) {
  22. state.uuids = uuids
  23. },
  24. resetUuids (state) {
  25. state.uuids = []
  26. },
  27. setItems (state, items) {
  28. state.items = items
  29. },
  30. resetItems (state) {
  31. state.items = []
  32. },
  33. setKeys (state, keys) {
  34. state.keys = keys
  35. },
  36. setTerm (state, term) {
  37. state.term = term
  38. },
  39. setInfos (state, infos) {
  40. state.infos = infos
  41. },
  42. setCount (state, count) {
  43. state.count = count
  44. },
  45. resetOffset(state) {
  46. state.offset = 0
  47. },
  48. incrementOffset(state) {
  49. state.offset += state.limit
  50. }
  51. },
  52. // actions
  53. actions : {
  54. newSearch({ dispatch, commit, state }) {
  55. console.log('Search newSearch');
  56. commit('resetUuids')
  57. commit('resetItems')
  58. commit('resetOffset')
  59. dispatch('getResults')
  60. },
  61. getResults ({ dispatch, commit, state }) {
  62. let params = {
  63. keys: state.keys,
  64. term: state.term,
  65. offset:state.offset,
  66. limit: state.limit
  67. }
  68. // console.log('Search getResults params', params);
  69. let q = qs.stringify(params)
  70. return MA.get(`/materio_sapi/getresults?`+q)
  71. .then(({ data }) => {
  72. console.log('search MA getresults data', data)
  73. // commit('setItems', data.items)
  74. commit('setInfos', data.infos)
  75. commit('setCount', data.count)
  76. commit('setUuids', data.uuids)
  77. dispatch('getItems', data.uuids)
  78. })
  79. .catch(( error ) => {
  80. console.warn('Issue with getResults', error)
  81. Promise.reject(error)
  82. })
  83. },
  84. getItems({ dispatch, commit, state }, uuids) {
  85. let params = {
  86. // include: 'images', // no needs to include thanks to consumers_image_styles module
  87. 'filter[uuids-groupe][group][conjunction]': 'OR'
  88. };
  89. for (var i = 0; i < uuids.length; i++) {
  90. let uuid = uuids[i]
  91. params[`filter[${uuid}][condition][path]`] = 'id'
  92. params[`filter[${uuid}][condition][value]`] = uuid
  93. params[`filter[${uuid}][condition][operator]`] = '='
  94. params[`filter[${uuid}][condition][memberOf]`] = 'uuids-groupe'
  95. }
  96. console.log('search JSONAPI params', params);
  97. let q = qs.stringify(params)
  98. return JSONAPI.get('node/materiau?'+q)
  99. .then(({ data }) => {
  100. console.log('search getItems data', data)
  101. dispatch('parseItems', {data:data.data, uuids:uuids})
  102. // commit('setItems', data.items)
  103. })
  104. .catch(( error ) => {
  105. console.warn('Issue with getItems', error)
  106. Promise.reject(error)
  107. })
  108. },
  109. parseItems({ dispatch, commit, state }, { data, uuids }) {
  110. // data comes from jsonapi query
  111. // uuids comes from solr search query (we loop from uuids to conserve the search results order)
  112. console.log('search parseItems data, uuids', data, uuids)
  113. let items = []
  114. // for (var i = 0; i < data.length; i++) {
  115. for (var i = 0; i < uuids.length; i++) {
  116. let uuid = uuids[i]
  117. let item_index = data.findIndex(p => p.id == uuid)
  118. let item_src = data[item_index]
  119. let attrs = item_src.attributes
  120. let relations = item_src.relationships
  121. // get field values
  122. let item = {
  123. uuid: uuid,
  124. title: attrs.title,
  125. description: attrs.field_short_description,
  126. body: attrs.body,
  127. reference: attrs.field_reference,
  128. }
  129. // get images included values
  130. let img_src = relations.images.data
  131. item.images = []
  132. for (var j = 0; j < img_src.length; j++) {
  133. // // https://stackoverflow.com/questions/11258077/how-to-find-index-of-an-object-by-key-and-value-in-an-javascript-array
  134. // let index = included.findIndex(p => p.id == img_src[j].id)
  135. // let img = included[index]
  136. item.images.push({
  137. title: img_src[j].meta.title,
  138. url: img_src[j].meta.imageDerivatives.links.card_medium.href
  139. })
  140. }
  141. items.push(item)
  142. }
  143. console.log('items', items);
  144. commit('setItems', items);
  145. }
  146. }
  147. }