diff --git a/views/pages/collection.ejs b/views/pages/collection.ejs index 8ba62cd..d7f4114 100644 --- a/views/pages/collection.ejs +++ b/views/pages/collection.ejs @@ -85,6 +85,12 @@
+
+
+
+ Chargement des données en cours… +
+
{{ item.artists_sort}} - {{ item.title }} @@ -172,8 +178,56 @@ methods: { fetch() { this.loading = true; + this.total = 0; + + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + const entries = urlParams.entries(); + + for(const entry of entries) { + console.log(`${entry[0]}: ${entry[1]}`); + switch(entry[0]) { + case 'artists_sort': + this.artist = entry[1]; + break; + default: + this[entry[0]] = entry[1]; + } + } let url = `/api/v1/albums?userId=${this.userId}&page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; + if ( this.artist ) { + url += `&artists_sort=${this.artist}`; + } + if ( this.format ) { + url += `&format=${this.format}`; + } + if ( this.year ) { + url += `&year=${this.year}`; + } + if ( this.genre ) { + url += `&genre=${this.genre}`; + } + if ( this.style ) { + url += `&style=${this.style}`; + } + + axios.get(url) + .then( response => { + this.items = response.data.rows; + this.total = response.data.count || 0; + this.totalPages = parseInt(response.data.count / this.limit) + (response.data.count % this.limit > 0 ? 1 : 0); + + }) + .catch((err) => { + showToastr(err.response?.data?.message || "Impossible de charger cette collection"); + }) + .finally(() => { + this.loading = false; + }); + }, + changeUrl() { + let url = `?page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; if ( this.artist ) { url += `&artists_sort=${this.artist.replace('&', '%26')}`; } @@ -190,38 +244,26 @@ url += `&style=${this.style.replace('&', '%26')}`; } - axios.get(url) - .then( response => { - this.items = response.data.rows; - this.total = response.data.count; - this.totalPages = parseInt(response.data.count / this.limit) + (response.data.count % this.limit > 0 ? 1 : 0); - - }) - .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de charger cette collection"); - }) - .finally(() => { - this.loading = false; - }); + location.href = url; }, next(event) { event.preventDefault(); this.page += 1; - this.fetch(); + this.changeUrl(); }, previous(event) { event.preventDefault(); this.page -= 1; - this.fetch(); + this.changeUrl(); }, goTo(page) { this.page = page; - this.fetch(); + this.changeUrl(); }, changeSort() { const [sort,order] = this.sortOrder.split('-'); @@ -229,12 +271,12 @@ this.order = order; this.page = 1; - this.fetch(); + this.changeUrl(); }, changeFilter() { this.page = 1; - this.fetch(); + this.changeUrl(); }, showMoreFilters() { this.moreFilters = !this.moreFilters; diff --git a/views/pages/mon-compte/ma-collection/index.ejs b/views/pages/mon-compte/ma-collection/index.ejs index 54f129a..b54d728 100644 --- a/views/pages/mon-compte/ma-collection/index.ejs +++ b/views/pages/mon-compte/ma-collection/index.ejs @@ -234,7 +234,53 @@ this.loading = true; this.total = 0; + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + const entries = urlParams.entries(); + + for(const entry of entries) { + console.log(`${entry[0]}: ${entry[1]}`); + switch(entry[0]) { + case 'artists_sort': + this.artist = entry[1]; + break; + default: + this[entry[0]] = entry[1]; + } + } + let url = `/api/v1/albums?page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; + if ( this.artist ) { + url += `&artists_sort=${this.artist}`; + } + if ( this.format ) { + url += `&format=${this.format}`; + } + if ( this.year ) { + url += `&year=${this.year}`; + } + if ( this.genre ) { + url += `&genre=${this.genre}`; + } + if ( this.style ) { + url += `&style=${this.style}`; + } + + axios.get(url) + .then( response => { + this.items = response.data.rows; + this.total = response.data.count || 0; + this.totalPages = parseInt(response.data.count / this.limit) + (response.data.count % this.limit > 0 ? 1 : 0); + }) + .catch((err) => { + showToastr(err.response?.data?.message || "Impossible de charger votre collection"); + }) + .finally(() => { + this.loading = false; + }); + }, + changeUrl() { + let url = `?page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; if ( this.artist ) { url += `&artists_sort=${this.artist.replace('&', '%26')}`; } @@ -251,37 +297,26 @@ url += `&style=${this.style.replace('&', '%26')}`; } - axios.get(url) - .then( response => { - this.items = response.data.rows; - this.total = response.data.count || 0; - this.totalPages = parseInt(response.data.count / this.limit) + (response.data.count % this.limit > 0 ? 1 : 0); - }) - .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de charger votre collection"); - }) - .finally(() => { - this.loading = false; - }); + location.href = url; }, next(event) { event.preventDefault(); this.page += 1; - this.fetch(); + this.changeUrl(); }, previous(event) { event.preventDefault(); this.page -= 1; - this.fetch(); + this.changeUrl(); }, goTo(page) { this.page = page; - this.fetch(); + this.changeUrl(); }, changeSort() { const [sort,order] = this.sortOrder.split('-'); @@ -289,12 +324,12 @@ this.order = order; this.page = 1; - this.fetch(); + this.changeUrl(); }, changeFilter() { this.page = 1; - this.fetch(); + this.changeUrl(); }, showMoreFilters() { this.moreFilters = !this.moreFilters;