@@ -6,6 +6,9 @@ import type { TraktEpisodeExtended } from '~/models/trakt/trakt-episode.model';
6
6
import type { TraktSeasonExtended } from ' ~/models/trakt/trakt-season.model' ;
7
7
import type { TraktShowExtended } from ' ~/models/trakt/trakt-show.model' ;
8
8
9
+ import ShowPanelDetail from ' ~/components/views/panel/ShowPanelDetail.vue' ;
10
+
11
+ import { useI18n } from ' ~/utils' ;
9
12
import { capitalizeEachWord } from ' ~/utils/string.utils' ;
10
13
11
14
const props = defineProps ({
@@ -30,6 +33,8 @@ const props = defineProps({
30
33
31
34
const { mode, episode, season, show } = toRefs (props );
32
35
36
+ const i18n = useI18n (' panel' , ' detail' );
37
+
33
38
const aired = computed (() => {
34
39
if (mode .value === ' episode' ) {
35
40
if (! episode ?.value ) return ;
@@ -79,7 +84,9 @@ const airedEpisodes = computed(() => {
79
84
80
85
const episodeType = computed (() => {
81
86
if (! episode ?.value ) return ;
82
- return episode .value ?.episode_type ?? ' -' ;
87
+ if (episode .value ?.episode_type )
88
+ return i18n (episode .value ?.episode_type , ' common' , ' tag' , ' label' );
89
+ return ' -' ;
83
90
});
84
91
85
92
const network = computed (() => {
@@ -97,69 +104,72 @@ const country = computed(() => {
97
104
<NFlex size =" large" class =" container" vertical >
98
105
<NFlex class =" row" size =" large" >
99
106
<!-- Show Year -->
100
- <NFlex class = " detail " align = " center " >
101
- < span class = " prefix " >Year</ span >
102
- < span v-if =" year" >{{ year }}</ span >
103
- < NSkeleton v-else style = " width : 2.25rem " round />
104
- </ NFlex >
107
+ <ShowPanelDetail
108
+ :label = " i18n('year') "
109
+ :value =" year"
110
+ :skeleton = " { width: ' 2.25rem' } "
111
+ / >
105
112
106
113
<!-- Show Country -->
107
- <NFlex class = " detail " align = " center " >
108
- < span class = " prefix " >Country</ span >
109
- < span v-if =" country" >{{ country }}</ span >
110
- < NSkeleton v-else style = " width : 2ch " round />
111
- </ NFlex >
114
+ <ShowPanelDetail
115
+ :label = " i18n('country') "
116
+ :value =" country"
117
+ :skeleton = " { width: ' 2ch' } "
118
+ / >
112
119
113
120
<!-- Show Network -->
114
- <NFlex class =" detail" align =" center" >
115
- <span class =" prefix" >Network</span >
116
- <span v-if =" network" >{{ network }}</span >
117
- <NSkeleton v-else style =" width : 5.5rem " round />
118
- </NFlex >
121
+ <ShowPanelDetail
122
+ :label =" i18n('network')"
123
+ :value =" network"
124
+ :grow =" true"
125
+ :skeleton =" { width: '5.5rem' }"
126
+ />
119
127
</NFlex >
120
128
121
129
<NFlex class =" row" size =" large" >
122
130
<!-- Air date -->
123
- <NFlex class = " detail " align = " center " >
124
- < span class = " prefix " >Aired</ span >
125
- < span v-if =" aired" >{{ aired }}</ span >
126
- < NSkeleton v-else style = " width : 5.125rem " round />
127
- </ NFlex >
131
+ <ShowPanelDetail
132
+ :label = " i18n('aired') "
133
+ :value =" aired"
134
+ :skeleton = " { width: ' 5.125rem' } "
135
+ / >
128
136
129
137
<!-- Show Status -->
130
- <NFlex class = " detail " align = " center " >
131
- < span class = " prefix " >Status</ span >
132
- < span v-if =" status" >{{ status }}</ span >
133
- < NSkeleton v-else style = " width : 7.5rem " round />
134
- </ NFlex >
138
+ <ShowPanelDetail
139
+ :label = " i18n('status') "
140
+ :value =" status"
141
+ :skeleton = " { width: ' 7.5rem' } "
142
+ / >
135
143
136
144
<!-- Runtime -->
137
- <NFlex class = " detail " align = " center " >
138
- < span class = " prefix " >Runtime</ span >
139
- < span v-if =" runtime" >{{ runtime }}</ span >
140
- < NSkeleton v-else style = " width : 3.75rem " round />
141
- </ NFlex >
145
+ <ShowPanelDetail
146
+ :label = " i18n('runtime') "
147
+ :value =" runtime"
148
+ :skeleton = " { width: ' 3.75rem' } "
149
+ / >
142
150
</NFlex >
143
151
144
152
<NFlex class =" row" size =" large" >
145
153
<!-- Season aired episodes -->
146
- <NFlex v-if =" mode !== 'show'" class =" detail" align =" center" >
147
- <span class =" prefix" >Aired episodes</span >
148
- <span v-if =" airedEpisodes" >{{ airedEpisodes }}</span >
149
- <NSkeleton v-else style =" width : 3rem " round />
150
- </NFlex >
154
+ <ShowPanelDetail
155
+ v-if =" mode !== 'show'"
156
+ :label =" i18n('aired_episodes')"
157
+ :value =" airedEpisodes"
158
+ :skeleton =" { width: '3rem' }"
159
+ />
151
160
152
161
<!-- Type -->
153
- <NFlex v-if =" mode === 'episode'" class =" detail" align =" center" >
154
- <span class =" prefix" >Type</span >
155
- <span v-if =" episodeType" >{{ episodeType }}</span >
156
- <NSkeleton v-else style =" width : 6.25rem " round />
157
- </NFlex >
162
+ <ShowPanelDetail
163
+ v-if =" mode === 'episode'"
164
+ :label =" i18n('type')"
165
+ :value =" episodeType"
166
+ :skeleton =" { width: '6.25rem' }"
167
+ />
158
168
</NFlex >
159
169
160
170
<!-- Genres -->
161
171
<NFlex class =" detail genres" align =" center" justify =" flex-start" >
162
- <span class =" prefix" >Genres </span >
172
+ <span class =" prefix" >{{ i18n('genres') }} </span >
163
173
<template v-if =" genres " >
164
174
<NTag v-for =" (genre, i) of genres" :key =" i" size =" small" round >{{ genre }}</NTag >
165
175
</template >
@@ -180,18 +190,23 @@ const country = computed(() => {
180
190
}
181
191
182
192
.prefix {
193
+ min-width : 2.5rem ;
183
194
color : var (--white-50 );
184
195
font-weight : 600 ;
185
196
transition : color 0.3s var (--n-bezier );
186
197
}
187
198
188
199
.detail {
189
- flex : 1 1 30% ;
200
+ flex : 0 1 30% ;
190
201
191
202
& :hover .prefix {
192
203
color : var (--white-70 );
193
204
}
194
205
206
+ & .grow {
207
+ flex : 1 1 auto ;
208
+ }
209
+
195
210
& .genres {
196
211
flex : 1 1 auto ;
197
212
width : 100% ;
0 commit comments