corpus.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. import { REST } from 'api/rest-axios'
  2. export default {
  3. namespaced: true,
  4. // initial state
  5. state: {
  6. // items: [],
  7. authors: [],
  8. editionslist: [],
  9. editionsbyuuid: {},
  10. editionsuuids: [],
  11. corpusLoaded: false,
  12. numTocsItem: 0
  13. },
  14. // getters
  15. getters: {},
  16. // mutations
  17. mutations: {
  18. setAuthors (state, authors) {
  19. state.authors = authors
  20. },
  21. setEditionslist (state, editionslist) {
  22. state.editionslist = editionslist
  23. },
  24. setEditionsByUUID (state, editionlist) {
  25. for (var i = 0; i < editionlist.length; i++) {
  26. for (var j = 0; j < editionlist[i].editions.content.length; j++) {
  27. state.editionsbyuuid[editionlist[i].editions.content[j].uuid] = editionlist[i].editions.content[j]
  28. state.editionsuuids.push(editionlist[i].editions.content[j].uuid)
  29. }
  30. }
  31. console.log('corpus editionsbyuuid', state.editionsbyuuid)
  32. },
  33. setTocs (state, tocslist) {
  34. // console.log('setTocs', tocslist)
  35. tocslist.forEach((toc, i) => {
  36. state.editionsbyuuid[toc.uuid].toc = Array.isArray(toc.toc) ? toc.toc : [toc.toc]
  37. })
  38. // console.log('corpus editionsbyuuid', state.editionsbyuuid)
  39. },
  40. buildFlatTocsAndFilters (state) {
  41. let recurseToc = (state, eduuid, a) => {
  42. // console.log('recurseToc', a)
  43. a.forEach((item, i) => {
  44. if (item) {
  45. // flatToc
  46. state.editionsbyuuid[eduuid].flattoc.push(item.uuid)
  47. state.numTocsItem++
  48. // filters
  49. let indexes = item.indexes[0]
  50. for (const key in indexes) {
  51. // loop through indexes (objects, persons, places)
  52. if (Object.hasOwnProperty.call(indexes, key)) {
  53. indexes[key].forEach(element => {
  54. // loop through index elements
  55. if (!(element.uuid in state.editionsbyuuid[eduuid].indexes[key])) {
  56. state.editionsbyuuid[eduuid].indexes[key][element.uuid] = element
  57. }
  58. })
  59. }
  60. }
  61. // recursive loop
  62. if (item.children && item.children.length) {
  63. recurseToc(state, eduuid, item.children)
  64. }
  65. }
  66. })
  67. }
  68. state.editionsuuids.forEach((eduuid, i) => {
  69. // console.log('buildFlatTocsAndFilters', i, eduuid)
  70. state.editionsbyuuid[eduuid].flattoc = []
  71. state.editionsbyuuid[eduuid].indexes = {
  72. objects: {},
  73. persons: {},
  74. places: {}
  75. }
  76. recurseToc(state, eduuid, state.editionsbyuuid[eduuid].toc)
  77. console.log('buildFlatTocsAndFilters DONE',
  78. eduuid,
  79. `places: ${Object.keys(state.editionsbyuuid[eduuid].indexes['places']).length}`,
  80. `objects: ${Object.keys(state.editionsbyuuid[eduuid].indexes['objects']).length}`,
  81. `persons: ${Object.keys(state.editionsbyuuid[eduuid].indexes['persons']).length}`,
  82. state.editionsbyuuid[eduuid].indexes)
  83. })
  84. console.log('numTocsItem', state.numTocsItem)
  85. },
  86. setPaginations (state, paginationslist) {
  87. // console.log('setPaginations', paginationslist)
  88. paginationslist.forEach((pagination, i) => {
  89. state.editionsbyuuid[pagination.uuid].pagination = pagination.pagination
  90. })
  91. // console.log('corpus editionsbyuuid', state.editionsbyuuid)
  92. },
  93. setCorpusLoaded (state) {
  94. console.info('corpusLoaded')
  95. state.corpusLoaded = true
  96. }
  97. },
  98. // actions
  99. actions: {
  100. getCorpuses ({ dispatch, commit, state }) {
  101. return new Promise((resolve, reject) => {
  102. // get the list of corpuses (aka authors)
  103. dispatch('getAuthors')
  104. .then(({ data }) => {
  105. // console.log('getCorpuses authors data', data)
  106. commit('setAuthors', data.content)
  107. dispatch('getEditionsList', data.content)
  108. .then((editionslist) => {
  109. console.log('all texts returned: editionslist', editionslist)
  110. commit('setEditionslist', editionslist)
  111. commit('setEditionsByUUID', editionslist)
  112. dispatch('getEditionsTocs')
  113. .then((tocslist) => {
  114. console.log('all tocs returned: tocslist', tocslist)
  115. commit('setTocs', tocslist)
  116. commit('buildFlatTocsAndFilters')
  117. dispatch('getEditionsPaginations')
  118. .then((paginationslist) => {
  119. console.log('all paginations returned: paginationslist', paginationslist)
  120. commit('setPaginations', paginationslist)
  121. commit('setCorpusLoaded')
  122. })
  123. })
  124. })
  125. })
  126. })
  127. },
  128. // async get authors
  129. getAuthors ({ dispatch, commit, state }) {
  130. return REST.get(`${window.apipath}/corpus`, {})
  131. // .then(({ data }) => {
  132. // console.log('corpus getAuthors REST: data', data)
  133. // commit('setAuthors', data.content)
  134. // })
  135. .catch((error) => {
  136. console.warn('Issue with getAuthors', error)
  137. Promise.reject(error)
  138. })
  139. },
  140. // async get editionslist
  141. getEditionsList ({ dispatch, commit, state }, authors) {
  142. return Promise.all(authors.map(function (author) {
  143. return REST.get(`${window.apipath}/corpus/` + author.uuid, {})
  144. .then(({ data }) => {
  145. // console.log('corpus getEditionsList REST: author, data', author, data)
  146. // work arround
  147. if (!Array.isArray(data.content)) {
  148. data.content = [data.content]
  149. }
  150. return {
  151. author: author,
  152. editions: data
  153. }
  154. })
  155. .catch((error) => {
  156. console.warn('Issue with getEditionsList', error)
  157. Promise.reject(error)
  158. })
  159. }))
  160. },
  161. // async get tocslist
  162. getEditionsTocs ({ dispatch, commit, state }) {
  163. return Promise.all(state.editionsuuids.map(function (uuid) {
  164. return REST.get(`${window.apipath}/texts/${uuid}/toc`, {})
  165. .then(({ data }) => {
  166. console.log('corpus getEditionsTocs REST: uuid, data', uuid, data)
  167. // work arround
  168. // if (!Array.isArray(data.content)) {
  169. // data.content = [data.content]
  170. // }
  171. return {
  172. uuid: uuid,
  173. toc: data.content
  174. }
  175. })
  176. .catch((error) => {
  177. console.warn('Issue with getEditionsTocs', error)
  178. Promise.reject(error)
  179. })
  180. }))
  181. },
  182. // async get paginationslist
  183. getEditionsPaginations ({ dispatch, commit, state }) {
  184. return Promise.all(state.editionsuuids.map(function (uuid) {
  185. return REST.get(`${window.apipath}/texts/${uuid}/pagination`, {})
  186. .then(({ data }) => {
  187. // console.log('corpus getEditionsPaginations REST: uuid, data', uuid, data)
  188. // work arround
  189. // if (!Array.isArray(data.content)) {
  190. // data.content = [data.content]
  191. // }
  192. return {
  193. uuid: uuid,
  194. pagination: data.content
  195. }
  196. })
  197. .catch((error) => {
  198. console.warn('Issue with getEditionsPaginations', error)
  199. Promise.reject(error)
  200. })
  201. }))
  202. }
  203. },
  204. methods: {
  205. testMethod () {
  206. console.log('testmethod')
  207. }
  208. }
  209. }