mirror of
https://github.com/mmahdium/TBW.git
synced 2026-08-14 16:22:48 +03:30
Minor improvements and api fix
This commit is contained in:
@@ -3,6 +3,7 @@ import { useMediaStore } from '@/stores/media'
|
|||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import type { MediaType } from '@/types/Media'
|
import type { MediaType } from '@/types/Media'
|
||||||
import ImageWithFallback from './ImageWithFallback.vue'
|
import ImageWithFallback from './ImageWithFallback.vue'
|
||||||
|
import ScoreRing from './ScoreRing.vue'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
media: MediaType
|
media: MediaType
|
||||||
@@ -20,7 +21,7 @@ const alreadyAdded = computed(() => store.mediaList.some((media) => media.Id ===
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="card relative w-full h-full overflow-hidden bg-white/70 backdrop-blur-md border border-gray-200/60 shadow-md hover:shadow-xl transition-all duration-300"
|
class="card relative w-full h-full overflow-hidden bg-white/70 backdrop-blur-md border border-gray-200/60 shadow-xs hover:shadow-xl transition-all duration-300"
|
||||||
v-motion-fade-visible-once
|
v-motion-fade-visible-once
|
||||||
>
|
>
|
||||||
<!-- Poster wrapper with fixed aspect -->
|
<!-- Poster wrapper with fixed aspect -->
|
||||||
@@ -39,21 +40,7 @@ const alreadyAdded = computed(() => store.mediaList.some((media) => media.Id ===
|
|||||||
|
|
||||||
<!-- Radial progress placed on the right edge, centered on the seam between poster and body -->
|
<!-- Radial progress placed on the right edge, centered on the seam between poster and body -->
|
||||||
<div class="absolute left-3 bottom-0 z-20 translate-y-1/2" aria-hidden="true">
|
<div class="absolute left-3 bottom-0 z-20 translate-y-1/2" aria-hidden="true">
|
||||||
<div
|
<ScoreRing :VoteAverage="props.media.VoteAverage" />
|
||||||
class="radial-progress bg-primary text-primary-content border-primary border-4 font-bold flex items-center justify-center"
|
|
||||||
:style="{
|
|
||||||
'--value': props.media.VoteAverage * 10,
|
|
||||||
'--size': '2rem',
|
|
||||||
'--thickness': '3px',
|
|
||||||
}"
|
|
||||||
:aria-valuenow="props.media.VoteAverage"
|
|
||||||
role="progressbar"
|
|
||||||
>
|
|
||||||
<span class="flex items-baseline text-[0.7em]">
|
|
||||||
{{ props.media.VoteAverage === 0 ? '?' : (props.media.VoteAverage * 10).toFixed(0) }}
|
|
||||||
<span class="text-[0.5em] relative -top-1 ml-0.5">%</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -70,14 +57,14 @@ const alreadyAdded = computed(() => store.mediaList.some((media) => media.Id ===
|
|||||||
</h2>
|
</h2>
|
||||||
<time
|
<time
|
||||||
class="text-sm text-gray-400"
|
class="text-sm text-gray-400"
|
||||||
:datetime="new Date(props.media.ReleaseDate).toISOString()"
|
:datetime="new Date(props.media.ReleaseDate === '' ? props.media.FirstAirDate : props.media.ReleaseDate).toISOString()"
|
||||||
>
|
>
|
||||||
{{
|
{{
|
||||||
new Intl.DateTimeFormat('default', {
|
new Intl.DateTimeFormat('default', {
|
||||||
year: 'numeric',
|
year: 'numeric',
|
||||||
month: 'long',
|
month: 'long',
|
||||||
day: 'numeric',
|
day: 'numeric',
|
||||||
}).format(new Date(props.media.ReleaseDate))
|
}).format(new Date(props.media.ReleaseDate === '' ? props.media.FirstAirDate : props.media.ReleaseDate))
|
||||||
}}
|
}}
|
||||||
</time>
|
</time>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
const props = defineProps<{ VoteAverage: number }>()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="radial-progress bg-primary text-primary-content border-primary border-4 font-bold flex items-center justify-center"
|
||||||
|
:style="{
|
||||||
|
'--value': props.VoteAverage * 10,
|
||||||
|
'--size': '2rem',
|
||||||
|
'--thickness': '3px',
|
||||||
|
}"
|
||||||
|
:aria-valuenow="props.VoteAverage"
|
||||||
|
role="progressbar"
|
||||||
|
>
|
||||||
|
<span class="flex items-baseline text-[0.7em]">
|
||||||
|
{{ props.VoteAverage === 0 ? '?' : (props.VoteAverage * 10).toFixed(0) }}
|
||||||
|
<span class="text-[0.5em] relative -top-1 ml-0.5">%</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
+2
-2
@@ -41,7 +41,7 @@ export const loadMedia = async (
|
|||||||
const responses = await Promise.all(requests)
|
const responses = await Promise.all(requests)
|
||||||
|
|
||||||
// If only one type was requested, handle that directly
|
// If only one type was requested, handle that directly
|
||||||
if (filters.onlyMovies) {
|
if (filters.onlyMovies && !filters.onlySeries) {
|
||||||
const movieSearch = responses[0]
|
const movieSearch = responses[0]
|
||||||
if (movieSearch.status !== 200) {
|
if (movieSearch.status !== 200) {
|
||||||
return {
|
return {
|
||||||
@@ -62,7 +62,7 @@ export const loadMedia = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filters.onlySeries) {
|
if (filters.onlySeries && !filters.onlyMovies) {
|
||||||
const tvSearch = responses[0]
|
const tvSearch = responses[0]
|
||||||
if (tvSearch.status !== 200) {
|
if (tvSearch.status !== 200) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ export const useSearchPageStore = defineStore('searchPage', () => {
|
|||||||
searchQuery.value = query
|
searchQuery.value = query
|
||||||
mediaList.value = medias
|
mediaList.value = medias
|
||||||
searchFilters.value = filters
|
searchFilters.value = filters
|
||||||
console.log('setState', page, query, medias, filters)
|
|
||||||
}
|
}
|
||||||
return { searchPage, searchQuery, mediaList, searchFilters, setState }
|
return { searchPage, searchQuery, mediaList, searchFilters, setState }
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user