From 3ee26830f0c6f4222f50dbbbec56e85102f6f21e Mon Sep 17 00:00:00 2001 From: tobinio Date: Thu, 15 Aug 2024 19:01:50 +0200 Subject: [PATCH 1/2] feat: show random featured projects on home screen --- apps/app-frontend/src/pages/Index.vue | 34 +++++-------- .../src/store/featuredProjects.js | 49 +++++++++++++++++++ 2 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 apps/app-frontend/src/store/featuredProjects.js diff --git a/apps/app-frontend/src/pages/Index.vue b/apps/app-frontend/src/pages/Index.vue index 1d51e2f27..485ff0ef0 100644 --- a/apps/app-frontend/src/pages/Index.vue +++ b/apps/app-frontend/src/pages/Index.vue @@ -7,7 +7,7 @@ import { profile_listener } from '@/helpers/events' import { useBreadcrumbs } from '@/store/breadcrumbs' import { handleError } from '@/store/notifications.js' import dayjs from 'dayjs' -import { get_search_results } from '@/helpers/cache.js' +import { useFeaturedProjects } from '@/store/featuredProjects.js' const featuredModpacks = ref({}) const featuredMods = ref({}) @@ -51,36 +51,26 @@ const getInstances = async () => { filter.value = filters.join(' AND ') } -const getFeaturedModpacks = async () => { - const response = await get_search_results( - `?facets=[["project_type:modpack"]]&limit=10&index=follows&filters=${filter.value}`, - ) +await getInstances() - if (response) { - featuredModpacks.value = response.result.hits - } else { - featuredModpacks.value = [] - } -} -const getFeaturedMods = async () => { - const response = await get_search_results('?facets=[["project_type:mod"]]&limit=10&index=follows') +let featuredProjects = useFeaturedProjects() - if (response) { - featuredMods.value = response.result.hits - } else { - featuredModpacks.value = [] - } +async function updateFeaturedProjects() { + let [modpacks, mods] = await Promise.all([ + await featuredProjects.getFeaturedModpack(filter), + await featuredProjects.getFeaturedMods(), + ]) + featuredModpacks.value = modpacks + featuredMods.value = mods } -await getInstances() - -await Promise.all([getFeaturedModpacks(), getFeaturedMods()]) +await updateFeaturedProjects() const unlistenProfile = await profile_listener(async (e) => { await getInstances() if (e.event === 'added' || e.event === 'created' || e.event === 'removed') { - await Promise.all([getFeaturedModpacks(), getFeaturedMods()]) + await updateFeaturedProjects() } }) diff --git a/apps/app-frontend/src/store/featuredProjects.js b/apps/app-frontend/src/store/featuredProjects.js new file mode 100644 index 000000000..20fefbb04 --- /dev/null +++ b/apps/app-frontend/src/store/featuredProjects.js @@ -0,0 +1,49 @@ +import { defineStore } from 'pinia' +import { get_search_results } from '@/helpers/cache.js' + +export const useFeaturedProjects = defineStore('featuredProjects', { + state: () => ({ + modpacks: undefined, + mods: undefined, + }), + actions: { + async getFeaturedModpack(filter) { + if (this.modpacks !== undefined && this.modpacks.length !== 0) { + return this.modpacks + } + + let offset = Math.floor(Math.random() * 100) + + const response = await get_search_results( + `?facets=[["project_type:modpack"]]&limit=10&filters=${filter.value}&offset=${offset}`, + ) + + if (response) { + this.modpacks = response.result.hits + } else { + this.modpacks = [] + } + + return this.modpacks + }, + async getFeaturedMods() { + if (this.mods !== undefined && this.mods.length !== 0) { + return this.mods + } + + let offset = Math.floor(Math.random() * 100) + + const response = await get_search_results( + `?facets=[["project_type:mod"]]&limit=10&offset=${offset}`, + ) + + if (response) { + this.mods = response.result.hits + } else { + this.mods = [] + } + + return this.mods + }, + }, +}) From 7b134a500abea6020f0a35221b2bcd7060bd016e Mon Sep 17 00:00:00 2001 From: tobinio Date: Thu, 15 Aug 2024 19:15:05 +0200 Subject: [PATCH 2/2] apply code review suggestions --- apps/app-frontend/src/store/featuredProjects.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/app-frontend/src/store/featuredProjects.js b/apps/app-frontend/src/store/featuredProjects.js index 20fefbb04..45d5d4b60 100644 --- a/apps/app-frontend/src/store/featuredProjects.js +++ b/apps/app-frontend/src/store/featuredProjects.js @@ -8,11 +8,11 @@ export const useFeaturedProjects = defineStore('featuredProjects', { }), actions: { async getFeaturedModpack(filter) { - if (this.modpacks !== undefined && this.modpacks.length !== 0) { + if (this.modpacks?.length) { return this.modpacks } - let offset = Math.floor(Math.random() * 100) + const offset = Math.floor(Math.random() * 100) const response = await get_search_results( `?facets=[["project_type:modpack"]]&limit=10&filters=${filter.value}&offset=${offset}`, @@ -27,11 +27,11 @@ export const useFeaturedProjects = defineStore('featuredProjects', { return this.modpacks }, async getFeaturedMods() { - if (this.mods !== undefined && this.mods.length !== 0) { + if (this.mods?.length) { return this.mods } - let offset = Math.floor(Math.random() * 100) + const offset = Math.floor(Math.random() * 100) const response = await get_search_results( `?facets=[["project_type:mod"]]&limit=10&offset=${offset}`,