IndexLocorum.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <MainContentLayout id="index-locorum" class="index">
  3. <template v-slot:header>
  4. <h1>Lieux</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. <LocorumItem :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 LocorumItem from '../components/Content/LocorumItem'
  49. export default {
  50. name: 'IndexLocorum',
  51. metaInfo: {
  52. title: 'Index Locorum'
  53. },
  54. components: {
  55. LocorumItem,
  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}/indexLocorum?` + q, {})
  78. .then(({ data }) => {
  79. console.log('index locorum 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 locorum', error)
  90. Promise.reject(error)
  91. })
  92. },
  93. parseIndex () {
  94. console.log('parseIndex', this.content)
  95. if (this.content.length) {
  96. this.items = this.content.sort((a, b) => {
  97. let Aletter = a.letter.toLowerCase()
  98. let Bletter = b.letter.toLowerCase()
  99. if (Aletter < Bletter) {
  100. return -1
  101. } else if (Aletter > Bletter) {
  102. return 1
  103. } else {
  104. return 0
  105. }
  106. })
  107. }
  108. for (let i = 0; i < this.items.length; i++) {
  109. // console.log(typeof this.items[i].letter)
  110. if (this.items[i].letter !== '') {
  111. let letter = this.items[i].letter.toLowerCase()
  112. console.log(letter)
  113. if (Object.keys(this.letters).indexOf(letter) === -1) {
  114. this.letters[letter] = {
  115. l: letter,
  116. q: 1
  117. }
  118. } else {
  119. this.letters[letter].q += 1
  120. }
  121. }
  122. }
  123. // console.log(this.letters)
  124. // this.letters = this.letters.sort((a, b) => {
  125. // if (a.l < b.l) {
  126. // return -1
  127. // } else if (a.l > b.l) {
  128. // return 1
  129. // } else {
  130. // return 0
  131. // }
  132. // })
  133. },
  134. onClickLetter (l) {
  135. this.activeLetter = l
  136. // console.log('activeLetter', this.activeLetter)
  137. }
  138. }
  139. }
  140. </script>
  141. <style lang="scss" scoped>
  142. </style>