From deafb00d5c91231f4957ff716f1148cc0b7ac3d2 Mon Sep 17 00:00:00 2001 From: Tobias Frischmann Date: Sun, 20 Sep 2026 18:51:47 +0200 Subject: [PATCH] make it possible to set filter via url query --- app/composables/useFilters.ts | 58 +++++++++++++++++++++++++++++++++++ app/pages/index.vue | 2 ++ 2 files changed, 60 insertions(+) diff --git a/app/composables/useFilters.ts b/app/composables/useFilters.ts index 9e2eb66..43409c1 100644 --- a/app/composables/useFilters.ts +++ b/app/composables/useFilters.ts @@ -72,3 +72,61 @@ export function useFilter() { return { tags, rawTags, category, rawCategory, time, isFiltering }; } + +export function useFilterFromUrl() { + const { rawTags, rawCategory, time } = useFilter(); + + const route = useRoute(); + + // nextTick needed for filter changes to be correctly applied + nextTick(() => { + watch( + route, + () => { + let hasChanges = false; + + if (route.query.tag) { + if (typeof route.query.tag === "string") { + rawTags.value = [route.query.tag]; + } else { + rawTags.value = route.query.tag.map((tag) => tag as string); + } + + hasChanges = true; + } + + if (route.query.category) { + if (typeof route.query.category === "string") { + rawCategory.value = [route.query.category]; + } else { + rawCategory.value = route.query.category.map( + (category) => category as string, + ); + } + + hasChanges = true; + } + + if (route.query.time) { + if (typeof route.query.time === "string") { + time.value = route.query.time as "all" | "today" | "week"; + } + + hasChanges = true; + } + + if (hasChanges) { + navigateTo({ + query: { + ...route.query, + tag: undefined, + category: undefined, + time: undefined, + }, + }); + } + }, + { immediate: true }, + ); + }); +} diff --git a/app/pages/index.vue b/app/pages/index.vue index 7a99fca..afc51e3 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -14,6 +14,8 @@ const selectedOrg = useSelectedOrg(); onMounted(async () => { + useFilterFromUrl(); + // Timeout to avoid browser confusing sse as page load progress setTimeout(() => { watch(selectedOrg, () => { -- 2.51.2