mirror of
https://github.com/mmahdium/TBW.git
synced 2025-12-21 05:03:55 +01:00
Minor improvements
This commit is contained in:
38
.github/workflows/deploy.yml
vendored
Normal file
38
.github/workflows/deploy.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Deploy to GitHub Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '22'
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
run: npm install -g pnpm
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Build project
|
||||||
|
run: pnpm build
|
||||||
|
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
|
uses: peaceiris/actions-gh-pages@v4
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./dist
|
||||||
|
publish_branch: gh-pages
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useMoviesStore } from '@/stores/movies'
|
import { useMoviesStore } from '@/stores/movies'
|
||||||
import { computed } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import type { MovieType } from '@/types/Movie'
|
import type { MovieType } from '@/types/Movie'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@@ -12,6 +12,8 @@ const emit = defineEmits<{ (e: 'loaded', id: string): void }>()
|
|||||||
|
|
||||||
const store = useMoviesStore()
|
const store = useMoviesStore()
|
||||||
|
|
||||||
|
const imageLoadFailed = ref(false)
|
||||||
|
|
||||||
const alreadyAdded = computed(() =>
|
const alreadyAdded = computed(() =>
|
||||||
store.movieList.some((movie) => movie.imdbID === props.movie.imdbID),
|
store.movieList.some((movie) => movie.imdbID === props.movie.imdbID),
|
||||||
)
|
)
|
||||||
@@ -25,12 +27,35 @@ const alreadyAdded = computed(() =>
|
|||||||
>
|
>
|
||||||
<span v-if="props.loading" class="loading loading-ring loading-xl text-primary"></span>
|
<span v-if="props.loading" class="loading loading-ring loading-xl text-primary"></span>
|
||||||
|
|
||||||
|
<div v-else-if="imageLoadFailed" class="flex items-center justify-center">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-12 h-12 text-gray-400"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
|
||||||
<img
|
<img
|
||||||
v-show="!props.loading"
|
v-show="!props.loading && !imageLoadFailed"
|
||||||
:src="props.movie.Poster"
|
:src="props.movie.Poster"
|
||||||
:alt="props.movie.Title"
|
:alt="props.movie.Title"
|
||||||
class="object-cover w-full h-full"
|
class="object-cover w-full h-full"
|
||||||
@load="emit('loaded', props.movie.imdbID)"
|
@load="emit('loaded', props.movie.imdbID)"
|
||||||
|
@error="
|
||||||
|
() => {
|
||||||
|
imageLoadFailed = true
|
||||||
|
emit('loaded', props.movie.imdbID)
|
||||||
|
}
|
||||||
|
"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ async function loadMore() {
|
|||||||
isLoadingMore.value = true
|
isLoadingMore.value = true
|
||||||
searchPage.value++
|
searchPage.value++
|
||||||
const result = await loadMoreMovies(searchQuery.value, searchPage.value)
|
const result = await loadMoreMovies(searchQuery.value, searchPage.value)
|
||||||
movies.value.push(...result.Search)
|
movies.value?.push(...result.Search)
|
||||||
state.setState(searchPage.value, searchQuery.value, movies.value)
|
state.setState(searchPage.value, searchQuery.value, movies.value)
|
||||||
for (const m of result.Search) {
|
for (const m of result.Search) {
|
||||||
loadingImages.value[m.imdbID] = true
|
loadingImages.value[m.imdbID] = true
|
||||||
|
|||||||
Reference in New Issue
Block a user