IndexOperum.vue 3.3 KB

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