traxxx/assets/components/home/home.vue

116 lines
2.1 KiB
Vue
Raw Permalink Normal View History

<template>
<div class="home">
2021-01-17 20:24:20 +00:00
<div class="content-inner">
2023-07-02 03:13:40 +00:00
<div
v-if="config.campaigns.home"
class="campaign-container"
>
<Campaign
:min-ratio="6"
/>
</div>
2020-06-27 02:50:13 +00:00
<FilterBar
2021-01-17 20:24:20 +00:00
ref="filter"
2020-06-27 02:50:13 +00:00
:fetch-releases="fetchReleases"
2023-03-26 22:01:38 +00:00
:show-filters="false"
2020-06-27 02:50:13 +00:00
:items-total="totalCount"
:items-per-page="limit"
:content="$refs.content"
:show-total="false"
2020-06-27 02:50:13 +00:00
/>
2021-10-19 23:46:56 +00:00
<Releases
:releases="releases"
:done="done"
/>
2020-05-22 02:32:16 +00:00
<Pagination
2020-05-25 00:02:28 +00:00
v-if="totalCount > 0"
2020-05-22 02:32:16 +00:00
:items-total="totalCount"
:items-per-page="limit"
class="pagination-bottom"
/>
</div>
<Footer />
2020-05-22 02:32:16 +00:00
</div>
</template>
<script>
2023-07-02 03:13:40 +00:00
import config from 'config';
2020-07-20 02:20:33 +00:00
import FilterBar from '../filters/filter-bar.vue';
import Releases from '../releases/releases.vue';
2020-05-22 02:32:16 +00:00
import Pagination from '../pagination/pagination.vue';
import Campaign from '../campaigns/campaign.vue';
2019-09-10 14:48:04 +00:00
async function fetchReleases(scroll = true) {
2021-10-19 23:46:56 +00:00
this.done = false;
2020-05-22 02:32:16 +00:00
const { releases, totalCount } = await this.$store.dispatch('fetchReleases', {
limit: this.limit,
2020-05-26 23:40:10 +00:00
range: this.$route.params.range,
2020-05-22 02:32:16 +00:00
pageNumber: Number(this.$route.params.pageNumber) || 1,
});
this.totalCount = totalCount;
this.releases = releases;
2021-10-19 23:46:56 +00:00
this.done = true;
if (scroll) {
this.$refs.filter?.$el.scrollIntoView();
}
}
async function mounted() {
2020-05-22 02:32:16 +00:00
this.pageTitle = '';
2020-05-22 02:32:16 +00:00
await this.fetchReleases();
}
export default {
2020-05-22 02:32:16 +00:00
components: {
Campaign,
2020-05-22 02:32:16 +00:00
FilterBar,
Releases,
Pagination,
},
data() {
return {
releases: [],
networks: [],
pageTitle: null,
limit: Number(this.$route.query.limit || 30) - config.campaigns.tiles, // reserve one campaign spot
2020-05-22 02:32:16 +00:00
totalCount: 0,
from: null,
2021-10-19 23:46:56 +00:00
done: false,
2020-05-22 02:32:16 +00:00
};
},
watch: {
$route: fetchReleases,
'$store.state.ui.tagFilter': fetchReleases,
2020-05-22 02:32:16 +00:00
},
mounted,
methods: {
fetchReleases,
},
};
</script>
<style lang="scss" scoped>
.home {
display: flex;
flex-direction: column;
flex-grow: 1;
}
.campaign-container {
display: flex;
align-items: center;
justify-content: center;
padding: .75rem 1rem .25rem 1rem;
background: var(--background-dim);
}
</style>