primevue-mirror/apps/showcase/components/landing/samples/MoviesApp.vue

161 lines
11 KiB
Vue
Raw Normal View History

2024-06-11 21:33:37 +00:00
<template>
<div class="flex-1 flex flex-col gap-6 p-6 h-full overflow-y-auto overflow-x-clip overflow-hidden border border-surface rounded-2xl">
<div class="flex flex-wrap gap-4 items-center justify-between">
<SelectButton v-model="value" :options="options" aria-labelledby="basic" />
<div class="flex gap-2.5 items-center">
<IconField iconPosition="left">
<InputIcon class="pi pi-search"> </InputIcon>
<InputText v-model="search" placeholder="Search" />
</IconField>
<Button severity="secondary" outlined>
<OverlayBadge
severity="danger"
size="small"
:pt="{
pcbadge: {
root: {
class: '!min-w-0 !w-2.5 !h-2.5'
}
}
}"
>
<i class="pi pi-bell" />
</OverlayBadge>
</Button>
<Avatar image="https://www.primefaces.org/cdn/primevue/images/landing/apps/avatar11.jpg" shape="circle" class="w-9 h-9 cursor-pointer" />
</div>
</div>
<div class="">
<div class="flex items-center justify-between gap-2 mb-6">
<div class="text-color text-xl font-medium leading-7">Keep watching</div>
<div class="xl:flex hidden items-center gap-2">
<Button :disabled="page === 0" @click="page -= 1" icon="pi pi-chevron-left" severity="secondary" outlined />
<Button :disabled="page === carouselData.length - page" @click="page += 1" icon="pi pi-chevron-right" severity="secondary" outlined />
</div>
<div class="xl:hidden flex items-center gap-2">
<Button :disabled="page === 0" @click="page -= 1" icon="pi pi-chevron-left" severity="secondary" outlined />
<Button :disabled="page === carouselData.length - 3" @click="page += 1" icon="pi pi-chevron-right" severity="secondary" outlined />
</div>
</div>
<Carousel :value="carouselData" :page="page" :numVisible="5" :numScroll="1" :responsiveOptions="responsiveOptions" :showIndicators="false" :showNavigators="false">
<template #item="slotProps">
<div class="p-2 rounded-xl hover:bg-emphasis transition-colors cursor-pointer">
<div class="relative w-full aspect-[195/118.5] rounded-lg overflow-hidden">
<img :src="slotProps.data.image" class="w-full h-full object-cover" alt="Carousel Movie Image" />
<div class="absolute z-10 top-2 right-2 px-2 py-1 text-sm font-medium leading-tight bg-surface-0 dark:bg-surface-950 border border-surface rounded-md">
{{ slotProps.data.point }}
</div>
<div class="absolute z-10 bottom-2 inset-x-2">
<ProgressBar
:value="slotProps.data.watchedPercent"
:showValue="false"
:pt="{
root: {
2024-06-13 10:45:46 +00:00
class: '!h-1.5 !bg-surface-950 dark:!bg-surface-50 !rounded-full'
2024-06-11 21:33:37 +00:00
},
value: {
2024-06-13 10:45:46 +00:00
class: '!bg-surface-0 dark:!bg-surface-950 !rounded-full'
2024-06-11 21:33:37 +00:00
}
}"
></ProgressBar>
</div>
</div>
<div class="mt-2 flex items-start justify-between gap-1">
<div class="px-2 flex-1">
<div class="font-medium text-color leading-6 line-clamp-1">{{ slotProps.data.name }}</div>
<div class="mt-1 text-muted-color text-sm leading-5">{{ slotProps.data.categories.join(', ') }}</div>
</div>
<Button v-if="slotProps.data.bookmarked" icon="pi pi-bookmark-fill" severity="contrast" text rounded />
</div>
</div>
</template>
</Carousel>
</div>
<div>
<div class="mb-6 flex items-center gap-4 justify-between">
<div class="flex items-center gap-2">
<Button label="Popular" severity="secondary" />
<Button label="New Releases" text severity="secondary" />
<Button label="Recently Added" text severity="secondary" />
<Button label="For you" text severity="secondary" />
</div>
<Button label="Show All" severity="secondary" outlined />
</div>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-x-4 gap-y-6">
<div v-for="(movie, index) of popularMovies" :key="index" class="cursor-pointer">
<div class="relative aspect-[259/174.5] rounded-lg overflow-hidden">
<img class="w-full h-full object-cover" :src="movie.image" alt="Popular Movie Cover" />
<div class="absolute z-10 top-2 right-2 px-2 py-1 text-sm font-medium leading-tight bg-surface-0 dark:bg-surface-950 border border-surface rounded-md">
{{ movie.point }}
</div>
</div>
<div class="mt-2 flex items-start justify-between gap-1">
<div class="px-2 flex-1">
<div class="font-medium text-color leading-6 line-clamp-1">{{ movie.name }}</div>
<div class="mt-1 text-muted-color text-sm leading-5">{{ movie.categories.join(', ') }}</div>
</div>
<Button v-if="movie.bookmarked" icon="pi pi-bookmark-fill" severity="contrast" text rounded />
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Movies',
redrawListener: null,
data() {
return {
search: '',
page: 0,
value: 'Home',
options: ['Home', 'Movies', 'TV Shows', 'Recently Added', 'My List'],
responsiveOptions: [
{
breakpoint: '1199px',
numVisible: 3,
numScroll: 1
},
{
breakpoint: '767px',
numVisible: 2,
numScroll: 1
},
{
breakpoint: '575px',
numVisible: 1,
numScroll: 1
}
],
carouselData: [
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover1.png', name: 'Heat', bookmarked: true, point: '4.7', watchedPercent: 80, categories: ['Action', 'Crime', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover2.png', name: 'Batman Begins', bookmarked: false, point: '4.8', watchedPercent: 45, categories: ['Action', 'Crime', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover3.png', name: 'Leon: The Professional', bookmarked: false, point: '4.3', watchedPercent: 10, categories: ['Action', 'Crime', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover4.png', name: 'Matrix', bookmarked: false, point: '4.9', watchedPercent: 50, categories: ['Action', 'Sci-Fi'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover5.png', name: 'Fight Club', bookmarked: false, point: '4.4', watchedPercent: 30, categories: ['Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover6.png', name: 'The Big Lebowski', bookmarked: false, point: '4.7', watchedPercent: 40, categories: ['Comedy', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover7.png', name: 'Twelve Angry Men', bookmarked: false, point: '4.7', watchedPercent: 50, categories: ['Crime', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover8.png', name: 'Saving Private Ryan', bookmarked: true, point: '4.7', watchedPercent: 80, categories: ['Drama', 'War'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover9.png', name: 'Seven', bookmarked: false, point: '4.7', watchedPercent: 20, categories: ['Crime', 'Drama', 'Mystery'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover10.png', name: 'Shutter Island', bookmarked: false, point: '4.7', watchedPercent: 70, categories: ['Mystery', 'Thriller'] }
],
popularMovies: [
2024-06-11 22:13:02 +00:00
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover7.png', name: 'Twelve Angry Men', bookmarked: false, point: '4.6', categories: ['Crime', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover8.png', name: 'Saving Private Ryan', bookmarked: true, point: '4.4', categories: ['Drama', 'War'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover9.png', name: 'Seven', bookmarked: false, point: '4.3', categories: ['Crime', 'Drama', 'Mystery'] },
2024-06-11 21:33:37 +00:00
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover10.png', name: 'Shutter Island', bookmarked: false, point: '4.7', categories: ['Mystery', 'Thriller'] },
2024-06-11 22:13:02 +00:00
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover11.png', name: 'Basic Instinct', bookmarked: true, point: '4.3', categories: ['Drama', 'Mystery', 'Thriller'] },
2024-06-11 21:33:37 +00:00
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover12.png', name: 'Big Hero 6', bookmarked: false, point: '4.7', categories: ['Animation', 'Action', 'Adventure'] },
2024-06-11 22:13:02 +00:00
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover13.png', name: 'The Lord Of The Rings: Fellowship of the ring', bookmarked: true, point: '4.9', categories: ['Action', 'Adventure', 'Drama'] },
{ image: 'https://www.primefaces.org/cdn/primevue/images/landing/apps/movie-cover14.png', name: 'Kill Bill', bookmarked: true, point: '4.5', categories: ['Action', 'Crime', 'Thriller'] }
2024-06-11 21:33:37 +00:00
]
};
},
methods: {},
components: {}
};
</script>