From 47cb0bbdac61f4a0ff3670477038ef1c8d8773f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Viricel?= Date: Sun, 4 Oct 2020 15:35:49 +0200 Subject: [PATCH] Create results page + Vuex Store --- nuxt/pages/results.vue | 117 +++++++++++++++++++++++++++++++++++++++++ nuxt/store/index.js | 70 ++++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 nuxt/pages/results.vue create mode 100644 nuxt/store/index.js diff --git a/nuxt/pages/results.vue b/nuxt/pages/results.vue new file mode 100644 index 0000000..574cd80 --- /dev/null +++ b/nuxt/pages/results.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/nuxt/store/index.js b/nuxt/store/index.js new file mode 100644 index 0000000..eeccb9c --- /dev/null +++ b/nuxt/store/index.js @@ -0,0 +1,70 @@ +import { resolve } from "core-js/fn/promise"; + +export const strict = false; + +export const state = () => ({ + search: "", + movies: [], + nbResults: 0, + loading: false, + error: "" +}); + +export const mutations = { + setSearch: (state, search) => (state.search = search), + setMovies: (state, movies) => (state.movies = movies), + updateMovie: (state, { movie, index }) => (state.movies[index] = movie), + setNbResults: (state, nbResults) => (state.nbResults = nbResults), + setLoading: (state, loading) => (state.loading = loading), + setError: (state, error) => (state.error = error) +}; + +export const actions = { + async getMovies({ commit, state, dispatch }) { + commit("setLoading", true); + const response = await this.$axios.$get("", { + params: { + apikey: "a4bf96a7", + s: state.search, + type: "movie" + } + }); + + if (response.Response === "True") { + commit("setNbResults", response.totalResults); + dispatch("setDirectors", response.Search).then(function(res) { + console.log(res); + commit("setMovies", res); + }); + } else if (response.Response === "False") { + commit("setMovies", []); + commit("setNbResults", 0); + commit("setError", response.Error); + } + + commit("setLoading", false); + }, + async getDirector({}, id) { + const response = await this.$axios.$get("", { + params: { + apikey: "a4bf96a7", + i: id, + type: "movie" + } + }); + + if (response.Response === "True") return response.Director; + else if (response.Response === "False") throw new Error(response.Error); + }, + setDirectors({ dispatch }, data) { + let tmp = []; + data.forEach(async (movie, index) => { + const director = await dispatch("getDirector", movie.imdbID); + movie.Director = director; + tmp.push(movie); + }); + return tmp; + } +}; + +export const getters = {};