From d6a64cad0790119730e7a2d65642f4cbad535c45 Mon Sep 17 00:00:00 2001 From: Jeffrey Whitaker Date: Tue, 4 May 2021 17:19:18 -0700 Subject: [PATCH 1/4] shuffle VoteLeaderboardSearch if no search string given --- src/components/VoteLeaderboardSearch.vue | 34 +++++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/components/VoteLeaderboardSearch.vue b/src/components/VoteLeaderboardSearch.vue index 2013f62..4b345d3 100644 --- a/src/components/VoteLeaderboardSearch.vue +++ b/src/components/VoteLeaderboardSearch.vue @@ -123,15 +123,27 @@ export default { this.showModal = true; }, async setResult(result) { - await new Promise(resolve => + await new Promise(resolve => { setTimeout(async () => { + // shuffle the results if no search string given + let shuffled; + if (this.searchText.length > 0) { + shuffled = result.items; + } else { + shuffled = this.shuffle(result.items); + } + + console.log("shuffled", shuffled); for (const [key, value] of Object.entries(result)) { - Vue.set(this.pageData, key, value); + if (key !== "items") { + Vue.set(this.pageData, key, value); + } } + Vue.set(this.pageData, "items", shuffled); await this.updateQueryParams(); resolve(); - }, 1000) - ); + }, 1000); + }); }, async search() { if (this.searchText === "") { @@ -207,6 +219,20 @@ export default { } else { this.search(); } + }, + /** + * Shuffles array in place. + * @param {Array} a items An array containing the items. + */ + shuffle(a) { + var j, x, i; + for (i = a.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + x = a[i]; + a[i] = a[j]; + a[j] = x; + } + return a; } }, computed: { From 432cf1d861a318371965929017f6291086cf9940 Mon Sep 17 00:00:00 2001 From: Jeffrey Whitaker Date: Tue, 4 May 2021 17:22:19 -0700 Subject: [PATCH 2/4] remove console log --- src/components/VoteLeaderboardSearch.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/VoteLeaderboardSearch.vue b/src/components/VoteLeaderboardSearch.vue index 4b345d3..2f6ce6b 100644 --- a/src/components/VoteLeaderboardSearch.vue +++ b/src/components/VoteLeaderboardSearch.vue @@ -133,7 +133,6 @@ export default { shuffled = this.shuffle(result.items); } - console.log("shuffled", shuffled); for (const [key, value] of Object.entries(result)) { if (key !== "items") { Vue.set(this.pageData, key, value); From e602c98505851f87b91d27d49c06970ce7bcf260 Mon Sep 17 00:00:00 2001 From: Jeffrey Whitaker Date: Wed, 5 May 2021 09:05:56 -0700 Subject: [PATCH 3/4] update VoteLeaderboardSearch to shuffle on empty string, update pagination component and local state to reflect this --- src/components/VoteLeaderboardSearch.vue | 71 ++++++++++++++---------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/components/VoteLeaderboardSearch.vue b/src/components/VoteLeaderboardSearch.vue index 2f6ce6b..39d5bf8 100644 --- a/src/components/VoteLeaderboardSearch.vue +++ b/src/components/VoteLeaderboardSearch.vue @@ -55,7 +55,7 @@ @@ -106,13 +107,13 @@ export default { item: null, per: 10, pageData: { - hasNext: false, - hasPrev: false, - nextNum: false, + // hasNext: false, + // hasPrev: false, + // nextNum: false, page: -1, items: [], - prevNum: null, - totalItems: 0, + // prevNum: null, + // totalItems: 0, totalPages: 0 } }; @@ -122,6 +123,10 @@ export default { this.item = item; this.showModal = true; }, + nextPageOnClick(page) { + Vue.set(this.pageData, "page", page); + this.updateQueryParams(); + }, async setResult(result) { await new Promise(resolve => { setTimeout(async () => { @@ -133,12 +138,22 @@ export default { shuffled = this.shuffle(result.items); } - for (const [key, value] of Object.entries(result)) { - if (key !== "items") { - Vue.set(this.pageData, key, value); - } + // push into sub arrays + let postShuffled = []; + while (shuffled.length > 0) { + postShuffled.push(shuffled.splice(0, 10)); } - Vue.set(this.pageData, "items", shuffled); + + // set data + Vue.set(this.pageData, "items", postShuffled); + Vue.set(this.pageData, "totalPages", this.pageData.items.length); + + // for (const [key, value] of Object.entries(result)) { + // if (key !== "items") { + // Vue.set(this.pageData, key, value); + // } + // } + // Vue.set(this.pageData, "items", shuffled); await this.updateQueryParams(); resolve(); }, 1000); @@ -148,17 +163,13 @@ export default { if (this.searchText === "") { return this.loadPage(); } - this.pageData.page = 1; + // this.pageData.page = 1; this.requestIndex++; this.requestCount++; const requestIndex = this.requestIndex; const searchText = this.searchText; try { - const results = await voting.search( - this.searchText, - this.pageData.page, - this.per - ); + const results = await voting.search(this.searchText, 1, 2000); if ( this.searchText === searchText && this.requestIndex === requestIndex @@ -183,7 +194,7 @@ export default { async loadPage() { this.requestCount++; try { - const results = await voting.getBallot(this.pageData.page, this.per); + const results = await voting.getBallot(1, 2000); await this.setResult(results); } catch (err) { if (err.status === 404) { @@ -242,18 +253,18 @@ export default { watch: { searchText() { this.search(); - }, - ["pageData.page"]() { - this.refresh(); - }, - ["$route.query.page"](val) { - const page = parseInt(val); - if (this.pageData.page === page) { - return; - } - this.pageData.page = page; - this.refresh(); } + // ["pageData.page"]() { + // this.refresh(); + // }, + // ["$route.query.page"](val) { + // const page = parseInt(val); + // if (this.pageData.page === page) { + // return; + // } + // this.pageData.page = page; + // this.refresh(); + // } }, async mounted() { this.searchText = @@ -262,6 +273,8 @@ export default { this.$route.query.page === undefined ? 1 : parseInt(this.$route.query.page); + + this.refresh(); } }; From 01454ee04ebeba810248ed6ce9ba200a19a499b4 Mon Sep 17 00:00:00 2001 From: Jeffrey Whitaker Date: Wed, 5 May 2021 09:19:11 -0700 Subject: [PATCH 4/4] update search to do up to 10000 answers --- src/components/VoteLeaderboardSearch.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/VoteLeaderboardSearch.vue b/src/components/VoteLeaderboardSearch.vue index 39d5bf8..96a9f49 100644 --- a/src/components/VoteLeaderboardSearch.vue +++ b/src/components/VoteLeaderboardSearch.vue @@ -169,7 +169,7 @@ export default { const requestIndex = this.requestIndex; const searchText = this.searchText; try { - const results = await voting.search(this.searchText, 1, 2000); + const results = await voting.search(this.searchText, 1, 10000); if ( this.searchText === searchText && this.requestIndex === requestIndex @@ -194,7 +194,7 @@ export default { async loadPage() { this.requestCount++; try { - const results = await voting.getBallot(1, 2000); + const results = await voting.getBallot(1, 10000); await this.setResult(results); } catch (err) { if (err.status === 404) {