1
1
<script setup lang="ts">
2
- import { NFlex , NSkeleton , NTimelineItem } from ' naive-ui' ;
2
+ import { NFlex , NSkeleton } from ' naive-ui' ;
3
+
4
+ import { type PropType } from ' vue' ;
3
5
4
- import type { PropType } from ' vue' ;
5
6
import type { TraktHistory } from ' ~/models/trakt/trakt-history.model' ;
6
7
8
+ import PosterPlaceholder from ' ~/assets/images/poster-placholder.webp' ;
9
+
7
10
defineProps ({
8
11
item: {
9
12
type: Object as PropType <TraktHistory >,
10
13
required: true ,
11
14
},
12
- index : {
13
- type: Number ,
15
+ loading : {
16
+ type: Boolean ,
14
17
required: true ,
15
18
},
19
+ poster: {
20
+ type: String ,
21
+ required: false ,
22
+ default: PosterPlaceholder ,
23
+ },
16
24
});
17
25
18
26
const getTitle = (media : TraktHistory ) => {
@@ -32,41 +40,46 @@ const getDate = (media: TraktHistory) =>
32
40
</script >
33
41
34
42
<template >
35
- <template v-if =" item .id >= 0 " >
36
- <NTimelineItem
37
- v-if =" item.id >= 0"
38
- :key =" item.id"
39
- class =" timeline-item"
40
- :data-key =" item.id"
41
- :data-index =" index"
42
- type =" success"
43
- :title =" getTitle(item)"
44
- :content =" getContent(item)"
45
- :time =" getDate(item)"
46
- />
47
- </template >
48
- <template v-else >
49
- <NTimelineItem
50
- :key =" item.id"
51
- class =" timeline-item"
52
- :data-key =" item.id"
53
- :data-index =" index"
54
- line-type =" dashed"
55
- >
56
- <template #default >
57
- <NFlex vertical >
58
- <NSkeleton text style =" width : 70% " />
59
- <NSkeleton text style =" width : 60% " />
60
- <NSkeleton text style =" width : 20% " />
61
- </NFlex >
62
- </template >
63
- </NTimelineItem >
64
- </template >
43
+ <NFlex class =" panel" vertical size =" small" :theme-overrides =" { gapSmall: '0' }" >
44
+ <div class =" title" >
45
+ <NSkeleton v-if =" loading" text style =" width : 70% " />
46
+ <template v-else >{{ getTitle(item) }}</template >
47
+ </div >
48
+ <div class =" content" >
49
+ <NSkeleton v-if =" loading" text style =" width : 60% " />
50
+ <template v-else >{{ getContent(item) }}</template >
51
+ </div >
52
+ <div class =" time" >
53
+ <NSkeleton v-if =" loading" text style =" width : 20% " />
54
+ <template v-else >{{ getDate(item) }}</template >
55
+ </div >
56
+ </NFlex >
65
57
</template >
66
58
67
59
<style lang="scss" scoped>
68
- .timeline-item {
69
- font-variant-numeric : tabular-nums ;
70
- margin : 0 1rem ;
60
+ .panel {
61
+ flex : 1 1 auto ;
62
+ margin : 0.25rem 0 ;
63
+
64
+ .title {
65
+ margin : var (--n-title-margin );
66
+ color : var (--n-title-text-color );
67
+ font-weight : var (--n-title-font-weight );
68
+ font-size : var (--n-title-font-size );
69
+ transition : color 0.3s var (--n-bezier );
70
+ }
71
+
72
+ .content {
73
+ color : var (--n-content-text-color );
74
+ font-size : var (--n-content-font-size );
75
+ transition : color 0.3s var (--n-bezier );
76
+ }
77
+
78
+ .time {
79
+ margin-top : 6px ;
80
+ color : var (--n-meta-text-color );
81
+ font-size : 12px ;
82
+ transition : color 0.3s var (--n-bezier );
83
+ }
71
84
}
72
85
</style >
0 commit comments