2025-03-30 20:51:11 -05:00
|
|
|
<template>
|
|
|
|
<div class="p-5 sm:p-0">
|
2025-04-06 17:54:59 -05:00
|
|
|
<div v-if="lists.length < 1">
|
|
|
|
<p>No lists found</p>
|
|
|
|
</div>
|
2025-03-30 20:51:11 -05:00
|
|
|
<ul class="grid grid-cols-2 gap-3 mt-5">
|
|
|
|
<li v-for="list in lists" class="movie-card neon-border p-5 rounded">
|
|
|
|
<div class="grid grid-rows-2 gap-3">
|
|
|
|
<NuxtLink :to="`/lists/${list.id}`" class="underline">
|
|
|
|
<h2 class="text-lg">{{ list.name }}</h2>
|
|
|
|
</NuxtLink>
|
2025-04-07 00:44:51 -05:00
|
|
|
<span>Movies: {{ list.movie_count || 0 }}</span>
|
2025-03-30 20:51:11 -05:00
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
2025-04-06 17:30:14 -05:00
|
|
|
<script lang="ts" setup>
|
|
|
|
import type { MovieList } from "~/types/movielist";
|
|
|
|
|
|
|
|
const lists = defineModel<MovieList[]>("movie_list", { default: [] });
|
|
|
|
const updateLists = async function () {
|
|
|
|
let config = useRuntimeConfig();
|
2025-04-06 17:54:59 -05:00
|
|
|
const { data, error } = await useFetch<MovieList[]>(
|
2025-04-06 17:30:14 -05:00
|
|
|
`${config.public.apiURL}/lists`,
|
|
|
|
{
|
|
|
|
method: "GET",
|
2025-04-06 17:54:59 -05:00
|
|
|
headers: {
|
|
|
|
"Content-type": "application/json",
|
|
|
|
Authorization: `Token ${useCookie("token").value}`,
|
|
|
|
},
|
2025-03-30 20:51:11 -05:00
|
|
|
},
|
2025-04-06 17:30:14 -05:00
|
|
|
);
|
|
|
|
|
2025-04-07 00:44:51 -05:00
|
|
|
if (error.value) {
|
|
|
|
if (error.value.statusCode === 401) {
|
2025-04-06 17:54:59 -05:00
|
|
|
navigateTo("/");
|
2025-04-06 17:30:14 -05:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
lists.value = data.value || [];
|
2025-03-30 20:51:11 -05:00
|
|
|
}
|
2025-04-06 17:30:14 -05:00
|
|
|
};
|
2025-03-30 20:51:11 -05:00
|
|
|
|
2025-04-06 17:30:14 -05:00
|
|
|
onMounted(() => {
|
|
|
|
updateLists();
|
|
|
|
});
|
|
|
|
</script>
|
2025-03-30 20:51:11 -05:00
|
|
|
|
2025-04-06 17:30:14 -05:00
|
|
|
<style scoped></style>
|