diff --git a/components/ui/VersionFilterControl.vue b/components/ui/VersionFilterControl.vue index 9dff0ae83..c470af9fd 100644 --- a/components/ui/VersionFilterControl.vue +++ b/components/ui/VersionFilterControl.vue @@ -18,7 +18,7 @@ :show-labels="false" :allow-empty="true" placeholder="Filter loader..." - @update:model-value="updateVersionFilters()" + @update:model-value="updateQuery" /> @@ -88,7 +88,6 @@ import Multiselect from 'vue-multiselect' import Checkbox from '~/components/ui/Checkbox' import ClearIcon from '~/assets/images/utils/clear.svg' -const emit = defineEmits(['updateVersions']) const props = defineProps({ versions: { type: Array, @@ -124,26 +123,9 @@ const gameVersionFilters = shallowRef( const versionTypeFilters = shallowRef(Array.from(tempReleaseChannels)) const includeSnapshots = ref(route.query.s === 'true') -const selectedGameVersions = shallowRef(route.query.g ?? []) -const selectedLoaders = shallowRef(route.query.l ?? []) -const selectedVersionTypes = shallowRef(route.query.c ?? []) - -async function updateVersionFilters() { - const temp = props.versions.filter( - (projectVersion) => - (selectedGameVersions.value.length === 0 || - selectedGameVersions.value.some((gameVersion) => - projectVersion.game_versions.includes(gameVersion) - )) && - (selectedLoaders.value.length === 0 || - selectedLoaders.value.some((loader) => projectVersion.loaders.includes(loader))) && - (selectedVersionTypes.value.length === 0 || - selectedVersionTypes.value.includes(projectVersion.version_type)) - ) - - await updateQuery() - emit('updateVersions', temp) -} +const selectedGameVersions = shallowRef(getArrayOrString(route.query.g) ?? []) +const selectedLoaders = shallowRef(getArrayOrString(route.query.l) ?? []) +const selectedVersionTypes = shallowRef(getArrayOrString(route.query.c) ?? []) async function updateQuery() { const router = useRouter() diff --git a/composables/query.js b/composables/query.js new file mode 100644 index 000000000..0fb18fef5 --- /dev/null +++ b/composables/query.js @@ -0,0 +1,7 @@ +export const getArrayOrString = (x) => { + if (typeof x === 'string' || x instanceof String) { + return [x] + } else { + return x + } +} diff --git a/pages/[type]/[id]/changelog.vue b/pages/[type]/[id]/changelog.vue index aef007aa7..9fa4c2be0 100644 --- a/pages/[type]/[id]/changelog.vue +++ b/pages/[type]/[id]/changelog.vue @@ -7,15 +7,7 @@ - + { + const selectedGameVersions = getArrayOrString(route.query.g) ?? [] + const selectedLoaders = getArrayOrString(route.query.l) ?? [] + const selectedVersionTypes = getArrayOrString(route.query.c) ?? [] -async function switchPage(page) { + currentPage.value = 1 + return props.versions.filter( + (projectVersion) => + (selectedGameVersions.length === 0 || + selectedGameVersions.some((gameVersion) => + projectVersion.game_versions.includes(gameVersion) + )) && + (selectedLoaders.length === 0 || + selectedLoaders.some((loader) => projectVersion.loaders.includes(loader))) && + (selectedVersionTypes.length === 0 || + selectedVersionTypes.includes(projectVersion.version_type)) + ) +}) + +function switchPage(page) { currentPage.value = page const router = useRouter() const route = useRoute() - await router.replace({ + router.replace({ query: { ...route.query, p: currentPage.value !== 1 ? currentPage.value : undefined, diff --git a/pages/[type]/[id]/versions.vue b/pages/[type]/[id]/versions.vue index e008051b6..983f0e664 100644 --- a/pages/[type]/[id]/versions.vue +++ b/pages/[type]/[id]/versions.vue @@ -22,15 +22,7 @@ - + { + const selectedGameVersions = getArrayOrString(route.query.g) ?? [] + const selectedLoaders = getArrayOrString(route.query.l) ?? [] + const selectedVersionTypes = getArrayOrString(route.query.c) ?? [] -async function switchPage(page) { + currentPage.value = 1 + return props.versions.filter( + (projectVersion) => + (selectedGameVersions.length === 0 || + selectedGameVersions.some((gameVersion) => + projectVersion.game_versions.includes(gameVersion) + )) && + (selectedLoaders.length === 0 || + selectedLoaders.some((loader) => projectVersion.loaders.includes(loader))) && + (selectedVersionTypes.length === 0 || + selectedVersionTypes.includes(projectVersion.version_type)) + ) +}) + +function switchPage(page) { currentPage.value = page const router = useRouter() const route = useRoute() - await router.replace({ + router.replace({ query: { ...route.query, p: currentPage.value !== 1 ? currentPage.value : undefined, diff --git a/pages/search/[searchProjectType].vue b/pages/search/[searchProjectType].vue index f4353219c..98bd32cc6 100644 --- a/pages/search/[searchProjectType].vue +++ b/pages/search/[searchProjectType].vue @@ -406,14 +406,6 @@ export default defineNuxtComponent({ const currentPage = ref(1) const projectType = ref({ id: 'mod', display: 'mod', actual: 'mod' }) - function getArrayOrString(x) { - if (typeof x === 'string' || x instanceof String) { - return [x] - } else { - return x - } - } - if (route.query.q) { query.value = route.query.q } diff --git a/plugins/scroll.client.js b/plugins/scroll.client.js index 619a61a4c..554d6ea6c 100644 --- a/plugins/scroll.client.js +++ b/plugins/scroll.client.js @@ -2,6 +2,6 @@ export default defineNuxtPlugin(() => { const nuxtApp = useNuxtApp() nuxtApp.hooks.hook('page:transition:finish', () => { - document.querySelector('[data-scroll]')?.scrollTo({ top: 9 }) + document.querySelector('[data-scroll]')?.scrollTo({ top: 0 }) }) }) diff --git a/server/plugins/theme.js b/server/plugins/theme.js index b0f6ab623..f26b13b44 100644 --- a/server/plugins/theme.js +++ b/server/plugins/theme.js @@ -1,34 +1,38 @@ export default defineNitroPlugin((nitroApp) => { nitroApp.hooks.hook('render:html', (html, { event }) => { - const cookies = parseCookies(event) + try { + const cookies = parseCookies(event) - if (cookies && cookies['color-mode']) { - const theme = JSON.parse(cookies['color-mode']) + if (cookies && cookies['color-mode']) { + const theme = JSON.parse(cookies['color-mode']) - html.htmlAttrs.push(`class="${theme.value}-mode"`) - } else { - html.htmlAttrs.push(`class="dark-mode"`) - } - - // Reset cookie attributes to correct ones - if (cookies) { - const opts = { - maxAge: 60 * 60 * 24 * 365 * 10, - sameSite: 'lax', - secure: true, - httpOnly: false, - path: '/', + html.htmlAttrs.push(`class="${theme.value}-mode"`) + } else { + html.htmlAttrs.push(`class="dark-mode"`) } - if (cookies['auth-token']) { - setCookie(event, 'auth-token', cookies['auth-token'], opts) - } - if (cookies['color-mode']) { - setCookie(event, 'color-mode', cookies['color-mode'], opts) - } - if (cookies.cosmetics) { - setCookie(event, 'cosmetics', cookies.cosmetics, opts) + // Reset cookie attributes to correct ones + if (cookies) { + const opts = { + maxAge: 60 * 60 * 24 * 365 * 10, + sameSite: 'lax', + secure: true, + httpOnly: false, + path: '/', + } + + if (cookies['auth-token']) { + setCookie(event, 'auth-token', cookies['auth-token'], opts) + } + if (cookies['color-mode']) { + setCookie(event, 'color-mode', cookies['color-mode'], opts) + } + if (cookies.cosmetics) { + setCookie(event, 'cosmetics', cookies.cosmetics, opts) + } } + } catch (err) { + console.error(err) } }) })