tp4
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
|
||||
import model from '../module/model.js'
|
||||
import Controller from '../module/controller.js'
|
||||
import View from '../module/view.js'
|
||||
|
||||
const view = new View()
|
||||
const app = new Controller(view,model)
|
||||
@@ -0,0 +1,26 @@
|
||||
class Controller {
|
||||
constructor(view,model){
|
||||
this.view = view
|
||||
this.model = model
|
||||
|
||||
this.loading = false
|
||||
this.lastSearch = null
|
||||
this.error = null
|
||||
this.results = []
|
||||
|
||||
this.view.setLoading(false)
|
||||
this.view.bindSearch(this.search.bind(this))
|
||||
}
|
||||
reset() {
|
||||
this.loading = false
|
||||
this.error = null
|
||||
this.results = []
|
||||
}
|
||||
|
||||
async search(searchMovie) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
export default Controller
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// Returns a function, that, as long as it continues to be invoked, will not
|
||||
// be triggered. The function will be called after it stops being called for
|
||||
// N milliseconds.
|
||||
function debounce(fn, wait) {
|
||||
let timeout
|
||||
|
||||
return (...args) => {
|
||||
clearTimeout(timeout)
|
||||
timeout = setTimeout(() => fn(...args), wait)
|
||||
}
|
||||
}
|
||||
export default debounce
|
||||
@@ -0,0 +1,9 @@
|
||||
let apiKey = '2fcb2848'
|
||||
|
||||
let model = {
|
||||
getMovies(search){
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
export default model
|
||||
@@ -0,0 +1,44 @@
|
||||
import debounce from "./helpers.js"
|
||||
|
||||
class View {
|
||||
constructor(){
|
||||
this.listMovies = document.querySelector("#list-movies")
|
||||
this.inputSearch = document.querySelector("input")
|
||||
this.loader = document.querySelector(".loader")
|
||||
this.message = document.querySelector("p.error")
|
||||
}
|
||||
|
||||
#getInput(){
|
||||
return this.inputSearch.value
|
||||
}
|
||||
|
||||
setLoading(loading){
|
||||
if (loading)
|
||||
this.loader.style.display = "block"
|
||||
else
|
||||
this.loader.style.display = "none"
|
||||
}
|
||||
|
||||
renderMessage(error){
|
||||
this.message.style.display = "block"
|
||||
this.message.textContent = error
|
||||
}
|
||||
|
||||
renderList(movies){
|
||||
let ul = document.createElement("ul")
|
||||
|
||||
movies.forEach((movie)=>{
|
||||
// TODO
|
||||
})
|
||||
|
||||
this.listMovies.replaceChildren(ul)
|
||||
}
|
||||
|
||||
bindSearch(handler){
|
||||
this.inputSearch.addEventListener("input",debounce((e)=>{
|
||||
handler(this.#getInput())
|
||||
},500))
|
||||
}
|
||||
}
|
||||
|
||||
export default View
|
||||
Reference in New Issue
Block a user