IndexOperum.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <MainContentLayout id="index-operum" class="index">
  3. <template v-slot:header>
  4. <h1>Œuvres</h1>
  5. <span v-if="!items.length" class="loading">Chargement ...</span>
  6. <span v-else>{{ meta.quantity.quantity }} {{ meta.quantity.unit }}</span>
  7. </template>
  8. <ul v-if="items.length" class="item-list">
  9. <li
  10. v-for="item in items"
  11. :key="item.uuid"
  12. :class="{ hidden: activeLetter && item.letter !== activeLetter }"
  13. >
  14. <OperumItem :item="item" />
  15. </li>
  16. </ul>
  17. <template v-slot:nav>
  18. <div v-if="items.length" class="abc">
  19. <ul>
  20. <li :class="{ inactive: activeLetter }">
  21. <span
  22. class="tout"
  23. @click.prevent="onClickLetter(null)"
  24. @keyup.enter="onClickLetter(null)"
  25. >tout</span>
  26. <span class="quantity">[{{ items.length }}]</span>
  27. </li>
  28. <li
  29. v-for="l in letters" :key="l.l"
  30. :class="{ inactive: activeLetter && l.l !== activeLetter }"
  31. >
  32. <span
  33. class="letter"
  34. @click.prevent="onClickLetter(l.l)"
  35. @keyup.enter="onClickLetter(l.l)"
  36. >{{ l.l }}</span>
  37. <span class="quantity">[{{ l.q }}]</span>
  38. </li>
  39. </ul>
  40. </div>
  41. </template>
  42. </MainContentLayout>
  43. </template>
  44. <script>
  45. import { REST } from 'api/rest-axios'
  46. import qs from 'querystring'
  47. import MainContentLayout from '../components/Layouts/MainContentLayout'
  48. import OperumItem from '../components/Content/OperumItem'
  49. export default {
  50. name: 'IndexOperum',
  51. metaInfo: {
  52. title: 'Index Operum'
  53. },
  54. components: {
  55. OperumItem,
  56. MainContentLayout
  57. },
  58. data: () => ({
  59. items: [],
  60. letters: {},
  61. activeLetter: null,
  62. meta: null,
  63. content: []
  64. }),
  65. created () {
  66. this.loadIndex(1, 200)
  67. },
  68. methods: {
  69. loadIndex (start, count) {
  70. console.log('loadIndex', start, count)
  71. // construct params
  72. let params = {
  73. start: start,
  74. count: count
  75. }
  76. let q = qs.stringify(params)
  77. REST.get(`${window.apipath}/indexOperum?` + q, {})
  78. .then(({ data }) => {
  79. console.log('index operum REST: data', data)
  80. this.meta = data.meta
  81. this.content = this.content.concat(data.content)
  82. if (this.content.length < data.meta.quantity.quantity) {
  83. this.loadIndex(start + count, count)
  84. } else {
  85. this.parseIndex()
  86. }
  87. })
  88. .catch((error) => {
  89. console.warn('Issue with index operum', error)
  90. Promise.reject(error)
  91. })
  92. },
  93. parseIndex () {
  94. if (this.content.length) {
  95. this.items = this.content.sort((a, b) => {
  96. let Aletter = a.letter.toLowerCase()
  97. let Bletter = b.letter.toLowerCase()
  98. if (Aletter < Bletter) {
  99. return -1
  100. } else if (Aletter > Bletter) {
  101. return 1
  102. } else {
  103. return 0
  104. }
  105. })
  106. }
  107. for (let i = 0; i < this.items.length; i++) {
  108. // console.log(typeof this.items[i].letter)
  109. if (this.items[i].letter !== '') {
  110. let letter = this.items[i].letter.toLowerCase()
  111. console.log(letter)
  112. if (Object.keys(this.letters).indexOf(letter) === -1) {
  113. this.letters[letter] = {
  114. l: letter,
  115. q: 1
  116. }
  117. } else {
  118. this.letters[letter].q += 1
  119. }
  120. }
  121. }
  122. // console.log(this.letters)
  123. // this.letters = this.letters.sort((a, b) => {
  124. // if (a.l < b.l) {
  125. // return -1
  126. // } else if (a.l > b.l) {
  127. // return 1
  128. // } else {
  129. // return 0
  130. // }
  131. // })
  132. },
  133. onClickLetter (l) {
  134. this.activeLetter = l
  135. // console.log('activeLetter', this.activeLetter)
  136. }
  137. }
  138. }
  139. </script>
  140. <style lang="scss" scoped>
  141. </style>