GroupDiscover.vue 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <div class="group-discover-component">
  3. <div class="row border-bottom m-0 p-0">
  4. <sidebar />
  5. <div class="col-12 col-md-9 px-md-0">
  6. <loader v-if="!loaded" :loaded="loaded" />
  7. <template v-else>
  8. <div class="container-fluid">
  9. <div class="py-5">
  10. <h1>Discover</h1>
  11. </div>
  12. <div class="popular row">
  13. <group-card
  14. v-for="(popular, idx) in popularGroups"
  15. :key="idx"
  16. :group="popular"
  17. />
  18. </div>
  19. </div>
  20. </template>
  21. </div>
  22. </div>
  23. </div>
  24. </template>
  25. <script type="text/javascript">
  26. import SidebarComponent from '@/groups/sections/Sidebar.vue';
  27. import LoaderComponent from '@/groups/sections/Loader.vue';
  28. import GroupCard from '@/groups/partials/GroupCard.vue';
  29. export default {
  30. components: {
  31. "sidebar": SidebarComponent,
  32. "loader": LoaderComponent,
  33. "group-card": GroupCard
  34. },
  35. data() {
  36. return {
  37. loaded: false,
  38. loadTimeout: undefined,
  39. popularGroups: [],
  40. newGroups: [],
  41. }
  42. },
  43. methods: {
  44. fetchPopular() {
  45. axios.get('/api/v0/groups/discover/popular')
  46. .then(res => this.popularGroups = res.data)
  47. .finally(() => this.fetchNewGroups())
  48. },
  49. fetchNewGroups() {
  50. axios.get('/api/v0/groups/discover/new')
  51. .then(res => this.newGroups = res.data)
  52. .finally(() => this.loaded = true)
  53. },
  54. },
  55. created() {
  56. this.fetchPopular()
  57. },
  58. beforeUnmount() {
  59. clearTimeout(this.loadTimeout);
  60. }
  61. }
  62. </script>
  63. <style lang="scss" scoped>
  64. .group-discover-component {
  65. font-family: var(--font-family-sans-serif);
  66. .jumbotron {
  67. background-color: #fff;
  68. border-radius: 0px;
  69. }
  70. }
  71. </style>