From 2fe4842a140dd33fabd1ed5b40cc80f832abfae9 Mon Sep 17 00:00:00 2001
From: Dlurak <84224239+Dlurak@users.noreply.github.com>
Date: Wed, 5 Jun 2024 14:29:15 +0200
Subject: [PATCH] Use localstorage for the filters
---
.github/workflows/format.yml | 4 +-
.github/workflows/test.yml | 4 +-
.../AssignmentGrid/ReadAssignmentBox.svelte | 2 +-
.../assignment/SideMenu/Filter/Filter.svelte | 42 ++++++++-----------
.../components/filter/SchoolAndClass.svelte | 18 +++++---
src/lib/utils/store/svocal.ts | 13 ++++++
6 files changed, 47 insertions(+), 36 deletions(-)
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index f444e4f..aacf252 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -2,7 +2,7 @@ name: Linting & formatting
on:
push:
- branches: ["master", "actions"]
+ branches: ['master', 'actions']
workflow_dispatch:
jobs:
@@ -19,7 +19,7 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 18.x
- cache: "pnpm"
+ cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index d98fbb4..9252e75 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -2,7 +2,7 @@ name: Test using vitest
on:
push:
- branches: "master"
+ branches: 'master'
workflow_dispatch:
jobs:
@@ -18,7 +18,7 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 18.x
- cache: "pnpm"
+ cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
diff --git a/src/lib/components/assignment/AssignmentGrid/ReadAssignmentBox.svelte b/src/lib/components/assignment/AssignmentGrid/ReadAssignmentBox.svelte
index 27cbf51..8a602b5 100644
--- a/src/lib/components/assignment/AssignmentGrid/ReadAssignmentBox.svelte
+++ b/src/lib/components/assignment/AssignmentGrid/ReadAssignmentBox.svelte
@@ -8,7 +8,7 @@
export let assignment: Assignment;
- $: icon = getSubjectIcon(assignment.subject)
+ $: icon = getSubjectIcon(assignment.subject);
diff --git a/src/lib/components/assignment/SideMenu/Filter/Filter.svelte b/src/lib/components/assignment/SideMenu/Filter/Filter.svelte
index d75110a..090491a 100644
--- a/src/lib/components/assignment/SideMenu/Filter/Filter.svelte
+++ b/src/lib/components/assignment/SideMenu/Filter/Filter.svelte
@@ -8,6 +8,7 @@
import type { CustomDate } from '$lib/utils/dates/custom';
import School from '$lib/components/input/School.svelte';
import Classes from '$lib/components/input/Classes.svelte';
+ import SchoolAndClass from '$lib/components/filter/SchoolAndClass.svelte';
type Query
= {
school: S;
@@ -34,13 +35,20 @@
const dispatch = createEventDispatcher<{ filterApply: Query }>();
-
- Filters
-
-
-
-
-
+
+
{
+ dispatch('filterApply', {
+ classes: detail.classes,
+ school: detail.school,
+ dueStart,
+ dueEnd,
+ fromStart,
+ fromEnd
+ });
+ }}
+ >
@@ -56,21 +64,5 @@
-
- {
- dispatch('filterApply', {
- classes: classes,
- school: school ?? '',
- dueStart,
- dueEnd,
- fromStart,
- fromEnd
- });
- }}
- >
-
-
-
-
+
+
diff --git a/src/lib/components/filter/SchoolAndClass.svelte b/src/lib/components/filter/SchoolAndClass.svelte
index 1288c03..4c8c767 100644
--- a/src/lib/components/filter/SchoolAndClass.svelte
+++ b/src/lib/components/filter/SchoolAndClass.svelte
@@ -5,7 +5,8 @@
import Collapseable from '$lib/components/utils/Collapseable.svelte';
import School from '../input/School.svelte';
import Classes from '../input/Classes.svelte';
- import { createEventDispatcher } from 'svelte';
+ import { createEventDispatcher, onMount } from 'svelte';
+ import { svocalWithFallback } from '$lib/utils/store/svocal';
type Query = {
school: string | S;
@@ -14,7 +15,12 @@
export let query: Query;
- let { school, classes } = query;
+ const school = svocalWithFallback('filter.school', query.school);
+ const classes = svocalWithFallback('filter.classes', query.classes);
+
+ onMount(() => {
+ dispatch('change', { school: $school ?? '', classes: $classes ?? [] });
+ });
const dispatch = createEventDispatcher<{
change: Query;
@@ -25,15 +31,15 @@
-
-
+
+
= 1)}
+ disabled={!($school && $classes.length >= 1)}
on:click={() => {
- dispatch('change', { school: school ?? '', classes: classes ?? [] });
+ dispatch('change', { school: $school ?? '', classes: $classes ?? [] });
}}
>
diff --git a/src/lib/utils/store/svocal.ts b/src/lib/utils/store/svocal.ts
index 8ce4cf0..a59a5b6 100644
--- a/src/lib/utils/store/svocal.ts
+++ b/src/lib/utils/store/svocal.ts
@@ -46,3 +46,16 @@ export const svocal = (key: T) => {
return localstorage(svocalKey, fallback);
};
+
+const svNoCallback = {
+ 'filter.school': null as string | null,
+ 'filter.classes': [] as string[]
+} as const;
+
+type SvocalNoFallback = keyof typeof svNoCallback;
+type SvocalFallback = (typeof svNoCallback)[T];
+
+export const svocalWithFallback = >(
+ key: T,
+ fallback: F
+) => localstorage(key, fallback);