Skip to content

Commit 9fb2b8e

Browse files
committed
fix(panel): adds transition to prevent watched/collected flicker
1 parent fa08ea2 commit 9fb2b8e

File tree

4 files changed

+60
-27
lines changed

4 files changed

+60
-27
lines changed

src/components/views/panel/MoviePanelDetails.vue

+10-8
Original file line numberDiff line numberDiff line change
@@ -170,45 +170,47 @@ const movieTitle = computed(() => deCapitalise(movie?.value?.title));
170170
/>
171171
</NFlex>
172172

173-
<NFlex v-if="watchedDate" class="row" size="large">
173+
<NFlex class="row hidden" :class="{ show: watchedDate }" size="large">
174174
<!-- Watched Date -->
175175
<TextField
176176
:label="i18n('watched')"
177-
:value="watchedDate.toLocaleDateString()"
177+
:value="watchedDate?.toLocaleDateString() ?? '-'"
178178
:skeleton="{ width: '5.125rem' }"
179179
/>
180180

181181
<!-- watched time -->
182182
<TextField
183-
v-if="watchedTime"
184183
:label="i18n('watched_time')"
185-
:value="watchedTime"
184+
:value="watchedTime ?? '-'"
186185
:skeleton="{ width: '5.125rem' }"
187186
/>
188187
</NFlex>
189188

190-
<NFlex v-if="collectionDate" class="row" size="large">
189+
<NFlex class="row hidden" :class="{ show: collectionDate }" size="large">
191190
<!-- Collection Date -->
192191
<TextField
193192
:label="i18n('collected')"
194-
:value="collectionDate.toLocaleDateString()"
193+
:value="collectionDate?.toLocaleDateString() ?? '-'"
195194
:skeleton="{ width: '5.125rem' }"
196195
/>
197196

198197
<!-- Collection time -->
199198
<TextField
200-
v-if="collectionTime"
201199
:label="i18n('collected_time')"
202-
:value="collectionTime"
200+
:value="collectionTime ?? '-'"
203201
:skeleton="{ width: '5.125rem' }"
204202
/>
205203
</NFlex>
206204
</NFlex>
207205
</template>
208206

209207
<style lang="scss" scoped>
208+
@use '~/styles/mixin' as mixin;
209+
210210
.container,
211211
.row {
212+
@include mixin.transition-show-hide-height;
213+
212214
flex: 1 1 auto;
213215
width: 100%;
214216
}

src/components/views/panel/ShowPanelDetails.vue

+12-10
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ const runtime = computed(() => {
9898
9999
const watchedDate = computed(() => {
100100
if (!watchedProgress?.value?.date) return;
101-
return watchedProgress.value.date;
101+
return watchedProgress.value.date.toLocaleDateString();
102102
});
103103
104104
const watchedTime = computed(() => {
@@ -108,7 +108,7 @@ const watchedTime = computed(() => {
108108
109109
const collectionDate = computed(() => {
110110
if (!collectionProgress?.value?.date) return;
111-
return collectionProgress.value.date;
111+
return collectionProgress.value.date.toLocaleDateString();
112112
});
113113
114114
const collectionTime = computed(() => {
@@ -298,45 +298,47 @@ const title = computed(() =>
298298
/>
299299
</NFlex>
300300

301-
<NFlex v-if="watchedDate" class="row" size="large">
301+
<NFlex class="row hidden" :class="{ show: watchedDate }" size="large">
302302
<!-- Watched Date -->
303303
<TextField
304304
:label="i18n('watched')"
305-
:value="watchedDate.toLocaleDateString()"
305+
:value="watchedDate ?? '-'"
306306
:skeleton="{ width: '5.125rem' }"
307307
/>
308308

309309
<!-- watched time -->
310310
<TextField
311-
v-if="watchedTime"
312311
:label="i18n('watched_time')"
313-
:value="watchedTime"
312+
:value="watchedTime ?? '-'"
314313
:skeleton="{ width: '5.125rem' }"
315314
/>
316315
</NFlex>
317316

318-
<NFlex v-if="collectionDate" class="row" size="large">
317+
<NFlex class="row hidden" :class="{ show: collectionDate }" size="large">
319318
<!-- Collection Date -->
320319
<TextField
321320
:label="i18n('collected')"
322-
:value="collectionDate.toLocaleDateString()"
321+
:value="collectionDate ?? '-'"
323322
:skeleton="{ width: '5.125rem' }"
324323
/>
325324

326325
<!-- Collection time -->
327326
<TextField
328-
v-if="collectionTime"
329327
:label="i18n('collected_time')"
330-
:value="collectionTime"
328+
:value="collectionTime ?? '-'"
331329
:skeleton="{ width: '5.125rem' }"
332330
/>
333331
</NFlex>
334332
</NFlex>
335333
</template>
336334

337335
<style lang="scss" scoped>
336+
@use '~/styles/mixin' as mixin;
337+
338338
.container,
339339
.row {
340+
@include mixin.transition-show-hide-height;
341+
340342
flex: 1 1 auto;
341343
width: 100%;
342344
}

src/styles/mixin.scss

+27
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,31 @@
5858
&:hover {
5959
box-shadow: $box-shadow;
6060
}
61+
}
62+
63+
@mixin transition-show-hide-height($transition: var(--n-bezier), $padding: 12px) {
64+
&.hidden {
65+
max-height: 0;
66+
margin-top: -#{$padding};
67+
overflow: hidden;
68+
opacity: 0;
69+
transition:
70+
scale 0.5s $transition,
71+
opacity 0.5s $transition,
72+
max-height 0.25s $transition,
73+
margin-top 0.5s $transition;
74+
scale: 0.95;
75+
76+
&.show {
77+
max-height: 100dvh;
78+
margin-top: initial;
79+
opacity: 1;
80+
transition:
81+
scale 0.5s $transition,
82+
opacity 0.5s $transition,
83+
max-height 0.25s $transition,
84+
margin-top 0.25s $transition;
85+
scale: 1;
86+
}
87+
}
6188
}

src/styles/transition.scss

+11-9
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,21 @@
3434

3535

3636
@mixin height(
37-
$height: 20rem,
38-
$opacity: 0,
37+
$height: 100%,
38+
$opacity: 1,
3939
$transition: 0.25s ease
4040
) {
41-
.scale-enter-active,
42-
.scale-leave-active {
43-
transition: all $transition;
41+
.height-enter-active,
42+
.height-leave-active {
43+
max-height: $height;
44+
opacity: $opacity;
45+
transition: max-height $transition, opacity $transition;
4446
will-change: transform, opacity;
4547
}
4648

47-
.scale-enter-from,
48-
.scale-leave-to {
49-
max-height: $height;
50-
opacity: $opacity;
49+
.height-enter-from,
50+
.height-leave-to {
51+
max-height: 0;
52+
opacity: 0;
5153
}
5254
}

0 commit comments

Comments
 (0)