Merge pull request 'add-movie-refresher' (#9) from add-movie-refresher into main

Reviewed-on: #9
This commit is contained in:
Edward Tirado Jr 2025-04-23 20:44:18 +00:00
commit a1a80a42da
3 changed files with 49 additions and 4 deletions

3
.idea/workspace.xml generated
View file

@ -6,7 +6,8 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="5e320804-68c9-4504-97d5-d421de3438b2" name="Changes" comment=""> <list default="true" id="5e320804-68c9-4504-97d5-d421de3438b2" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/LoadingIcon.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/LoadingIcon.vue" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/components/modal-content/ShowMovie.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/modal-content/ShowMovie.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/lists/[id].vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/lists/[id].vue" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />

View file

@ -1,6 +1,7 @@
<template> <template>
<div class="sm:m-5 p-10 movie-card neon-border"> <div class="sm:m-5 p-10 movie-card neon-border">
<div> <div>
<LoadingIcon v-if="updating" />
<h2 class="text-xl pb-3 text-center sm:text-left"> <h2 class="text-xl pb-3 text-center sm:text-left">
{{ movie.title }} ({{ movie.year }}) {{ movie.title }} ({{ movie.year }})
</h2> </h2>
@ -18,6 +19,10 @@
class="mt-5" class="mt-5"
@close-modal="$emit('close-modal')" @close-modal="$emit('close-modal')"
/> />
<button class="my-10 btn p-2 rounded" @click="updateMovie">
Refresh movie
</button>
</div> </div>
</div> </div>
</div> </div>
@ -27,10 +32,14 @@
<script lang="ts" setup> <script lang="ts" setup>
import ScheduleMovie from "~/components/forms/ScheduleMovie.vue"; import ScheduleMovie from "~/components/forms/ScheduleMovie.vue";
const props = defineProps(["movie"]); const props = defineProps(["movie", "updating"]);
const emits = defineEmits(["close-modal"]); const emits = defineEmits(["close-modal", "update-movie"]);
const logged_in = ref(false); const logged_in = ref(false);
const updateMovie = function () {
emits("update-movie");
};
onMounted(() => { onMounted(() => {
const token = useCookie("token").value; const token = useCookie("token").value;
if (token) { if (token) {

View file

@ -5,7 +5,9 @@
<ShowMovie <ShowMovie
v-if="modal_movie" v-if="modal_movie"
:movie="modal_movie" :movie="modal_movie"
:updating="updating"
@close-modal="closeModal" @close-modal="closeModal"
@update-movie="updateMovie(modal_movie)"
></ShowMovie> ></ShowMovie>
</Modal> </Modal>
<h2 class="text-xl font-bold pb-5">{{ list.name }}</h2> <h2 class="text-xl font-bold pb-5">{{ list.name }}</h2>
@ -38,7 +40,7 @@
> >
<li <li
v-for="movie in filtered_movies" v-for="movie in filtered_movies"
:key="movie.id" :key="movie.poster"
class="rounded movie-card neon-border" class="rounded movie-card neon-border"
> >
<!-- POSTER --> <!-- POSTER -->
@ -71,6 +73,7 @@ import type { MovieList } from "~/types/movielist";
import type { Movie } from "~/types/movie"; import type { Movie } from "~/types/movie";
import Modal from "~/components/Modal.vue"; import Modal from "~/components/Modal.vue";
import { useCookie } from "#app"; import { useCookie } from "#app";
import { $fetch } from "ofetch";
const list_id = ref(0); const list_id = ref(0);
const list = defineModel<MovieList>("movie_list", { default: [] }); const list = defineModel<MovieList>("movie_list", { default: [] });
@ -168,6 +171,38 @@ const removeMovie = async function (movie_id: string) {
} }
}; };
const updating = ref(false);
const updateMovie = async function (movie: Movie) {
let config = useRuntimeConfig();
updating.value = true;
$fetch<Movie>(`${config.public.apiURL}/movies/${movie.id}/`, {
method: "PUT",
headers: {
"Content-type": "application/json",
Authorization: `Token ${useCookie("token").value}`,
},
body: JSON.stringify(movie),
})
.then((data) => {
modal_movie.value = data || [];
movies.value = movies.value.map((movie) => {
return movie.id === data.id ? data : movie;
});
filtered_movies.value = movies.value;
updating.value = false;
})
.catch((err) => {
if (err.statusCode === 401) {
navigateTo("/");
}
if (err.statusCode === 404) {
alert("Unable to update movie");
}
updating.value = false;
});
};
const filterMovies = function () { const filterMovies = function () {
if (!movie_query) { if (!movie_query) {
filtered_movies.value = movies.value; filtered_movies.value = movies.value;