1
1
<script setup lang="ts">
2
2
import { NFlex , NImage , NSkeleton , NTime , NTimelineItem } from ' naive-ui' ;
3
3
4
- import { computed , type PropType } from ' vue' ;
4
+ import { computed , type PropType , toRefs } from ' vue' ;
5
5
6
6
import type { ListScrollItem } from ' ~/components/common/list/ListScroll.model' ;
7
7
@@ -59,26 +59,31 @@ const emit = defineEmits<{
59
59
(e : ' onHover' , event : { index: number ; item: ListScrollItem ; hover: boolean }): void ;
60
60
}>();
61
61
62
- const onHover = (hover : boolean ) => {
63
- emit (' onHover' , { index: props .index , item: props .item , hover });
62
+ const { item, size, index, noHeader, nextHasHeader, poster } = toRefs (props );
63
+
64
+ const onHover = (_hover : boolean ) => {
65
+ emit (' onHover' , { index: index ?.value , item: item ?.value , hover: _hover });
64
66
};
65
67
66
- const noHeader = computed (() => props . noHeader || props . item .date ?.sameDayAsPrevious );
68
+ const noHead = computed (() => noHeader . value || item ?. value ? .date ?.sameDayAsPrevious );
67
69
const nextHasHead = computed (
68
- () => props . nextHasHeader || ! props . item .date ?.sameDayAsNext ,
70
+ () => nextHasHeader . value || ! item ?. value ? .date ?.sameDayAsNext ,
69
71
);
70
- const date = computed (() => props .item .date ?.current );
72
+ const date = computed (() => item ?.value ?.date ?.current );
73
+
71
74
const year = new Date ().getFullYear ();
72
75
const sameYear = computed (() => date .value ?.getFullYear () === year );
73
- const loading = computed (() => props .item .loading );
76
+ const loading = computed (() => item ?.value ?.loading );
77
+
78
+ const resolvedPoster = computed (() => item ?.value ?.poster ?.value || poster .value );
74
79
</script >
75
80
76
81
<template >
77
82
<NTimelineItem
78
83
:key =" item.id"
79
84
class =" timeline-item"
80
85
:class =" {
81
- 'no-header': noHeader ,
86
+ 'no-header': noHead ,
82
87
'next-has-header': nextHasHead,
83
88
'show-date': !hideDate,
84
89
}"
@@ -98,7 +103,7 @@ const loading = computed(() => props.item.loading);
98
103
<template #default >
99
104
<NFlex
100
105
class =" content"
101
- :class =" { 'no-border': noHeader }"
106
+ :class =" { 'no-border': noHead }"
102
107
size =" small"
103
108
:theme-overrides =" { gapSmall: '0' }"
104
109
:wrap =" false"
@@ -113,7 +118,7 @@ const loading = computed(() => props.item.loading);
113
118
size =" small"
114
119
:theme-overrides =" { gapSmall: '0.25rem' }"
115
120
>
116
- <template v-if =" date && ! noHeader && ! loading " >
121
+ <template v-if =" date && ! noHead && ! loading " >
117
122
<NTime class =" month" :time =" date" format =" MMM" />
118
123
<NTime class =" day" :time =" date" format =" dd" />
119
124
<NTime class =" week" :time =" date" format =" eee" />
@@ -131,8 +136,8 @@ const loading = computed(() => props.item.loading);
131
136
class =" poster"
132
137
lazy
133
138
preview-disabled
134
- :src =" poster "
135
- :preview-src =" poster "
139
+ :src =" resolvedPoster "
140
+ :preview-src =" resolvedPoster "
136
141
:fallback-src =" PosterPlaceholder"
137
142
/>
138
143
<ListItemPanel :item =" item" :loading =" loading" >
@@ -229,7 +234,7 @@ const loading = computed(() => props.item.loading);
229
234
230
235
.poster {
231
236
justify-content : center ;
232
- width : 5.5rem ;
237
+ min- width : 5.5rem ;
233
238
height : 8rem ;
234
239
background-color : #111 ;
235
240
}
0 commit comments