diff options
Diffstat (limited to 'packages/client/src/pages/channels.vue')
| -rw-r--r-- | packages/client/src/pages/channels.vue | 149 |
1 files changed, 75 insertions, 74 deletions
diff --git a/packages/client/src/pages/channels.vue b/packages/client/src/pages/channels.vue index 4e538a6da3..89d23350f2 100644 --- a/packages/client/src/pages/channels.vue +++ b/packages/client/src/pages/channels.vue @@ -1,82 +1,83 @@ <template> -<MkSpacer :content-max="700"> - <div v-if="tab === 'featured'" class="_content grwlizim featured"> - <MkPagination v-slot="{items}" :pagination="featuredPagination"> - <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> - </MkPagination> - </div> - <div v-else-if="tab === 'following'" class="_content grwlizim following"> - <MkPagination v-slot="{items}" :pagination="followingPagination"> - <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> - </MkPagination> - </div> - <div v-else-if="tab === 'owned'" class="_content grwlizim owned"> - <MkButton class="new" @click="create()"><i class="fas fa-plus"></i></MkButton> - <MkPagination v-slot="{items}" :pagination="ownedPagination"> - <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> - </MkPagination> - </div> -</MkSpacer> +<MkStickyContainer> + <template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> + <MkSpacer :content-max="700"> + <div v-if="tab === 'featured'" class="_content grwlizim featured"> + <MkPagination v-slot="{items}" :pagination="featuredPagination"> + <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> + </MkPagination> + </div> + <div v-else-if="tab === 'following'" class="_content grwlizim following"> + <MkPagination v-slot="{items}" :pagination="followingPagination"> + <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> + </MkPagination> + </div> + <div v-else-if="tab === 'owned'" class="_content grwlizim owned"> + <MkButton class="new" @click="create()"><i class="fas fa-plus"></i></MkButton> + <MkPagination v-slot="{items}" :pagination="ownedPagination"> + <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> + </MkPagination> + </div> + </MkSpacer> +</MkStickyContainer> </template> -<script lang="ts"> -import { computed, defineComponent } from 'vue'; +<script lang="ts" setup> +import { computed, defineComponent, inject } from 'vue'; import MkChannelPreview from '@/components/channel-preview.vue'; import MkPagination from '@/components/ui/pagination.vue'; import MkButton from '@/components/ui/button.vue'; -import * as symbols from '@/symbols'; +import { useRouter } from '@/router'; +import { definePageMetadata } from '@/scripts/page-metadata'; +import { i18n } from '@/i18n'; -export default defineComponent({ - components: { - MkChannelPreview, MkPagination, MkButton, - }, - data() { - return { - [symbols.PAGE_INFO]: computed(() => ({ - title: this.$ts.channel, - icon: 'fas fa-satellite-dish', - bg: 'var(--bg)', - actions: [{ - icon: 'fas fa-plus', - text: this.$ts.create, - handler: this.create, - }], - tabs: [{ - active: this.tab === 'featured', - title: this.$ts._channel.featured, - icon: 'fas fa-fire-alt', - onClick: () => { this.tab = 'featured'; }, - }, { - active: this.tab === 'following', - title: this.$ts._channel.following, - icon: 'fas fa-heart', - onClick: () => { this.tab = 'following'; }, - }, { - active: this.tab === 'owned', - title: this.$ts._channel.owned, - icon: 'fas fa-edit', - onClick: () => { this.tab = 'owned'; }, - },] - })), - tab: 'featured', - featuredPagination: { - endpoint: 'channels/featured' as const, - noPaging: true, - }, - followingPagination: { - endpoint: 'channels/followed' as const, - limit: 5, - }, - ownedPagination: { - endpoint: 'channels/owned' as const, - limit: 5, - }, - }; - }, - methods: { - create() { - this.$router.push(`/channels/new`); - } - } -}); +const router = useRouter(); + +let tab = $ref('featured'); + +const featuredPagination = { + endpoint: 'channels/featured' as const, + noPaging: true, +}; +const followingPagination = { + endpoint: 'channels/followed' as const, + limit: 5, +}; +const ownedPagination = { + endpoint: 'channels/owned' as const, + limit: 5, +}; + +function create() { + router.push('/channels/new'); +} + +const headerActions = $computed(() => [{ + icon: 'fas fa-plus', + text: i18n.ts.create, + handler: create, +}]); + +const headerTabs = $computed(() => [{ + active: tab === 'featured', + title: i18n.ts._channel.featured, + icon: 'fas fa-fire-alt', + onClick: () => { tab = 'featured'; }, +}, { + active: tab === 'following', + title: i18n.ts._channel.following, + icon: 'fas fa-heart', + onClick: () => { tab = 'following'; }, +}, { + active: tab === 'owned', + title: i18n.ts._channel.owned, + icon: 'fas fa-edit', + onClick: () => { tab = 'owned'; }, +}]); + +definePageMetadata(computed(() => ({ + title: i18n.ts.channel, + icon: 'fas fa-satellite-dish', + bg: 'var(--bg)', +}))); </script> |