Merge pull request 'add-movie-refresher' (#9) from add-movie-refresher into main
Reviewed-on: #9
This commit is contained in:
commit
a1a80a42da
3 changed files with 49 additions and 4 deletions
3
.idea/workspace.xml
generated
3
.idea/workspace.xml
generated
|
@ -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" />
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue