feat [both]: fill values from film
This commit is contained in:
parent
e80c833c83
commit
ac07bf5e1a
5 changed files with 59 additions and 12 deletions
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column is-three-fifths">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label">Date de projection</label>
|
<label class="label">Date de projection</label>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
|
@ -140,13 +140,14 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="column">
|
<div class="column is-two-fifths">
|
||||||
<!-- doc : https://bluefantail.github.io/bulma-list/ -->
|
<!-- doc : https://bluefantail.github.io/bulma-list/ -->
|
||||||
<div class="list has-visible-pointer-controls">
|
<div class="list has-visible-pointer-controls">
|
||||||
<div
|
<div
|
||||||
v-for="(foundFilm, index) of foundFilms"
|
v-for="(foundFilm, index) of foundFilms"
|
||||||
:key="foundFilm.id"
|
:key="foundFilm.id"
|
||||||
class="list-item"
|
class="list-item"
|
||||||
|
:class="{ 'is-active': isChosen(foundFilm) }"
|
||||||
>
|
>
|
||||||
<div class="list-item-image">
|
<div class="list-item-image">
|
||||||
<figure class="image is-64x64">
|
<figure class="image is-64x64">
|
||||||
|
@ -161,8 +162,16 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="list-item-controls">
|
<div class="list-item-controls">
|
||||||
<div class="buttons is-right">
|
<div class="buttons is-right">
|
||||||
<button class="button" @click="fill(foundFilm.id)">
|
<button
|
||||||
Préremplir
|
v-if="isChosen(foundFilm)"
|
||||||
|
class="button"
|
||||||
|
@click="fillAll"
|
||||||
|
>
|
||||||
|
<v-icon name="bi-arrow-bar-left" />
|
||||||
|
Remplir tout
|
||||||
|
</button>
|
||||||
|
<button v-else class="button" @click="choose(foundFilm.id)">
|
||||||
|
Choisir
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -186,7 +195,7 @@ defineProps({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
const emits = defineEmits(["save", "publish"])
|
const emits = defineEmits(["save", "publish", "update:modelValue"])
|
||||||
const film = useModel<Film>("modelValue", { type: "object" })
|
const film = useModel<Film>("modelValue", { type: "object" })
|
||||||
|
|
||||||
const foundFilms = ref()
|
const foundFilms = ref()
|
||||||
|
@ -215,9 +224,18 @@ async function findFilm() {
|
||||||
).data.value
|
).data.value
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fill(tmdbId: number) {
|
async function choose(tmdbId: number) {
|
||||||
film.value = (await apiGet(`tmdb/${tmdbId}/fill/`)).data.value
|
chosenFilm.value =
|
||||||
// TODO fix form reactivity
|
((await apiGet<Film>(`tmdb/${tmdbId}/fill/`)).data.value as Film) ||
|
||||||
|
undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
function isChosen(filmToCheck: Film) {
|
||||||
|
return chosenFilm.value?.tmdbId === filmToCheck?.tmdbId
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAll() {
|
||||||
|
Object.assign(film.value, chosenFilm.value)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -225,4 +243,10 @@ async function fill(tmdbId: number) {
|
||||||
.image img
|
.image img
|
||||||
height: 100%
|
height: 100%
|
||||||
object-fit: cover
|
object-fit: cover
|
||||||
|
|
||||||
|
textarea
|
||||||
|
resize: vertical
|
||||||
|
|
||||||
|
.list-item.is-active
|
||||||
|
background-color: $grey-lighter
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -25,6 +25,7 @@ export type Film = {
|
||||||
posterLink?: string
|
posterLink?: string
|
||||||
bannerLink?: string
|
bannerLink?: string
|
||||||
isConfirmed?: boolean
|
isConfirmed?: boolean
|
||||||
|
tmdbId?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ShortFilm = {
|
export type ShortFilm = {
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import { OhVueIcon, addIcons } from "oh-vue-icons"
|
import { OhVueIcon, addIcons } from "oh-vue-icons"
|
||||||
import {
|
import {
|
||||||
|
BiArrowBarLeft,
|
||||||
RiCalendarEventFill,
|
RiCalendarEventFill,
|
||||||
RiDoubleQuotesL,
|
RiDoubleQuotesL,
|
||||||
RiFacebookBoxFill,
|
RiFacebookBoxFill,
|
||||||
RiInstagramFill,
|
RiInstagramFill,
|
||||||
RiMailFill,
|
RiMailFill,
|
||||||
|
RiMailLine,
|
||||||
RiMapPin2Fill,
|
RiMapPin2Fill,
|
||||||
RiPlayCircleFill,
|
RiPlayCircleFill,
|
||||||
} from "oh-vue-icons/icons"
|
} from "oh-vue-icons/icons"
|
||||||
|
@ -15,8 +17,10 @@ addIcons(
|
||||||
RiFacebookBoxFill,
|
RiFacebookBoxFill,
|
||||||
RiInstagramFill,
|
RiInstagramFill,
|
||||||
RiMailFill,
|
RiMailFill,
|
||||||
|
RiMailLine,
|
||||||
RiMapPin2Fill,
|
RiMapPin2Fill,
|
||||||
RiPlayCircleFill
|
RiPlayCircleFill,
|
||||||
|
BiArrowBarLeft
|
||||||
)
|
)
|
||||||
|
|
||||||
export default defineNuxtPlugin((nuxtApp) => {
|
export default defineNuxtPlugin((nuxtApp) => {
|
||||||
|
|
|
@ -16,3 +16,21 @@ class FilmSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Film
|
model = Film
|
||||||
fields = "__all__" #
|
fields = "__all__" #
|
||||||
|
|
||||||
|
|
||||||
|
class FromTmdbFilmSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Film
|
||||||
|
fields = [
|
||||||
|
"title",
|
||||||
|
"actors",
|
||||||
|
"director",
|
||||||
|
"duration",
|
||||||
|
"synopsis",
|
||||||
|
"origin_country",
|
||||||
|
"release_year",
|
||||||
|
"is_in_color",
|
||||||
|
"poster_link",
|
||||||
|
"imdb_id",
|
||||||
|
"tmdb_id",
|
||||||
|
]
|
||||||
|
|
|
@ -7,7 +7,7 @@ from rest_framework.response import Response
|
||||||
from tmdbv3api import TMDb, Search, Movie
|
from tmdbv3api import TMDb, Search, Movie
|
||||||
|
|
||||||
from myapi.models import Film
|
from myapi.models import Film
|
||||||
from myapi.serializers import FilmSerializer
|
from myapi.serializers import FilmSerializer, FromTmdbFilmSerializer
|
||||||
from ulm_cine_club_api.settings.base import TMDB_API_KEY
|
from ulm_cine_club_api.settings.base import TMDB_API_KEY
|
||||||
|
|
||||||
tmdb = TMDb()
|
tmdb = TMDb()
|
||||||
|
@ -23,7 +23,7 @@ class TmdbViewSet(viewsets.ViewSet):
|
||||||
tmdb_results = search.movies({"query": query})
|
tmdb_results = search.movies({"query": query})
|
||||||
res = [
|
res = [
|
||||||
{
|
{
|
||||||
"id": film["id"],
|
"tmdb_id": film["id"],
|
||||||
"release_date": film["release_date"],
|
"release_date": film["release_date"],
|
||||||
"title": film["title"],
|
"title": film["title"],
|
||||||
"poster_path": film["poster_path"],
|
"poster_path": film["poster_path"],
|
||||||
|
@ -50,7 +50,7 @@ class TmdbViewSet(viewsets.ViewSet):
|
||||||
), # TODO iso to French name
|
), # TODO iso to French name
|
||||||
is_in_color=not any(keyword["id"] == 12999 for keyword in tmdb_movie["keywords"]["keywords"])
|
is_in_color=not any(keyword["id"] == 12999 for keyword in tmdb_movie["keywords"]["keywords"])
|
||||||
)
|
)
|
||||||
serializer = FilmSerializer(internal_movie)
|
serializer = FromTmdbFilmSerializer(internal_movie)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue