22import Image from " ~/components/misc/Image.vue" ;
33
44const props = defineProps <{
5- webtoon: Webtoon
5+ webtoon: Webtoon ,
6+ liked: boolean ,
67}>();
78
9+ const likedState = ref (props .liked );
10+ const emits = defineEmits ([" like" , " unlike" ]);
11+
812const genres = computed (()=> {
913 return props .webtoon .genres .map ((genre : string ) => {
1014 if (genre .length > 2 )
@@ -16,24 +20,42 @@ const genres = computed(()=>{
1620 return genre ;
1721 });
1822});
23+
24+ function toggleLike(){
25+ if (likedState .value ){
26+ emits (" unlike" , props .webtoon .id );
27+ } else {
28+ emits (" like" , props .webtoon .id );
29+ }
30+ likedState .value = ! likedState .value ;
31+ }
1932 </script >
2033
2134<template >
22- <NuxtLink class =" flex border border-t-0 hover:cursor-pointer hover:bg-secondary" :to =" `/webtoon/${webtoon.id}`" >
35+ <NuxtLink class =" flex w-full border border-t-0 hover:cursor-pointer hover:bg-secondary" :to =" `/webtoon/${webtoon.id}`" >
2336 <Image :sum =" webtoon.thumbnail" />
24- <div class =" flex w-full flex-col items-start justify-between p-2" >
25- <div class =" flex flex-col" >
26- <div class =" flex w-full items-center gap-2 md:w-[30rem] lg:w-[40rem] " >
27- <UiBadge v-if =" props.webtoon.isNew" variant =" default" class =" h-max" >New</UiBadge >
28- <UiBadge v-if =" props.webtoon.hasNewEpisodes && !webtoon.isNew" variant =" secondary" class =" h-max" >Updated</UiBadge >
29- <h3 class =" truncate" >{{webtoon.title}}</h3 >
37+ <div class =" flex w-full min-w-0 flex-1 flex-col items-start justify-between p-2" >
38+ <div class =" flex w-full flex-col" >
39+ <div class =" flex w-full min-w-0 items-center gap-2" >
40+ <UiBadge v-if =" props.webtoon.isNew" variant =" default" class =" h-max shrink-0 " >New</UiBadge >
41+ <UiBadge v-if =" props.webtoon.hasNewEpisodes && !webtoon.isNew" variant =" secondary" class =" h-max shrink-0 " >Updated</UiBadge >
42+ <h3 class =" min-w-0 flex-1 truncate" >{{webtoon.title}}</h3 >
3043 </div >
31- <p >{{webtoon.author}}</p >
44+ <p class = " truncate " >{{webtoon.author}}</p >
3245 </div >
33- <div class =" flex gap-2" >
34- <UiBadge variant =" secondary" >{{webtoon.language.toUpperCase()}}</UiBadge >
35- <UiBadge v-for =" (genre, i) in genres" :key =" i" variant =" outline" >{{genre}}</UiBadge >
46+ <div class =" flex w-full gap-2 overflow-x-hidden" >
47+ <UiBadge variant =" secondary" class =" shrink-0" >{{webtoon.language.toUpperCase()}}</UiBadge >
48+ <div class =" flex flex-nowrap gap-2 overflow-x-hidden" >
49+ <UiBadge v-for =" (genre, i) in genres" :key =" i" variant =" outline" class =" shrink-0 whitespace-nowrap" >
50+ {{genre}}
51+ </UiBadge >
52+ </div >
3653 </div >
3754 </div >
55+ <div class =" flex items-center p-2" >
56+ <UiButton variant =" outline" @click.stop.prevent =" toggleLike" >
57+ <Icon name =" iconoir:heart" />
58+ </UiButton >
59+ </div >
3860 </NuxtLink >
3961</template >
0 commit comments