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 @@
- {
- filteredVersions = v
- switchPage(1)
- }
- "
- />
+
{
+ 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 @@
- {
- filteredVersions = v
- switchPage(1)
- }
- "
- />
+
{
+ 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)
}
})
})