From 95a5c17e5a820460060df523c42bed5345c5c983 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Mon, 29 Apr 2024 18:06:32 +0200 Subject: [PATCH 1/8] fix: show only 4 pagination buttons on mobile --- .../components/ui/PaginationButtons.svelte | 19 ++++++++++++------- src/lib/stores/layout.ts | 5 +++++ src/routes/+layout.svelte | 3 ++- 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 src/lib/stores/layout.ts diff --git a/src/lib/components/ui/PaginationButtons.svelte b/src/lib/components/ui/PaginationButtons.svelte index 443c22b..3a070e0 100644 --- a/src/lib/components/ui/PaginationButtons.svelte +++ b/src/lib/components/ui/PaginationButtons.svelte @@ -6,6 +6,8 @@ import { PAGINATION_LIMIT } from "$lib/shared/constants"; import type { Pagination, PaginationRequest } from "$lib/shared/model"; + import { screenWidthSmall } from "$lib/stores/layout"; + import Icon from "./Icon.svelte"; export let paginationData: PaginationRequest | null | undefined; @@ -17,18 +19,21 @@ $: nPages = Math.ceil(data.total / limit); let windowBottom: number; let windowTop: number; - $: if (nPages <= 10) { + + $: buttonLim = $screenWidthSmall ? 4 : 10; + + $: if (nPages <= buttonLim) { windowBottom = 1; windowTop = nPages; - } else if (thisPage <= 6) { + } else if (thisPage <= buttonLim * 0.6) { windowBottom = 1; - windowTop = 10; - } else if (thisPage + 4 >= nPages) { - windowBottom = nPages - 9; + windowTop = buttonLim; + } else if (thisPage + (buttonLim * 0.4) >= nPages) { + windowBottom = nPages - buttonLim + 1; windowTop = nPages; } else { - windowBottom = thisPage - 5; - windowTop = thisPage + 4; + windowBottom = thisPage - Math.floor(buttonLim / 2); + windowTop = thisPage + Math.ceil(buttonLim / 2) - 1; } function getPaginationRequest(page: number): PaginationRequest | null { diff --git a/src/lib/stores/layout.ts b/src/lib/stores/layout.ts new file mode 100644 index 0000000..d69b86a --- /dev/null +++ b/src/lib/stores/layout.ts @@ -0,0 +1,5 @@ +import { derived, writable } from "svelte/store"; + +// Width of the main section of the layout +export const screenWidth = writable(0); +export const screenWidthSmall = derived(screenWidth, ($mainWidth) => $mainWidth < 500); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 1a8a2b5..0d87d59 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -4,6 +4,7 @@ import { navigating } from "$app/stores"; import LoadingBar from "$lib/components/ui/LoadingBar.svelte"; + import { screenWidth } from "$lib/stores/layout"; let loadingBar: LoadingBar | undefined; @@ -16,6 +17,6 @@ -
+
From 52d50e75ceab9b0d394663e75ee54dbfc67c6f38 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Wed, 1 May 2024 00:39:12 +0200 Subject: [PATCH 2/8] feat: add date range filter --- src/lib/components/filter/FilterBar.svelte | 6 ++++-- .../components/table/FilteredEntryTable.svelte | 3 ++- src/lib/server/query/entry.ts | 9 ++++++++- src/lib/server/query/util.ts | 3 +++ src/lib/shared/model/model.ts | 2 ++ src/lib/shared/model/requests.ts | 1 + src/lib/shared/model/validation.ts | 3 +++ src/lib/shared/util/index.test.ts | 13 ++++++++++++- src/lib/shared/util/index.ts | 18 ++++++++++++++++-- src/routes/(app)/plan/+page.svelte | 2 +- tests/integration/query/entry.ts | 12 ++++++++++++ 11 files changed, 64 insertions(+), 8 deletions(-) diff --git a/src/lib/components/filter/FilterBar.svelte b/src/lib/components/filter/FilterBar.svelte index daf6a16..7d7473c 100644 --- a/src/lib/components/filter/FilterBar.svelte +++ b/src/lib/components/filter/FilterBar.svelte @@ -28,7 +28,7 @@ export let hiddenFilters: string[] = []; /** True if a separate search field should be displayed */ export let search = false; - export let view: string; + export let view: string | undefined = undefined; let autocomplete: Autocomplete | undefined; let activeFilters: FilterData[] = []; @@ -248,7 +248,9 @@
- +{#if view} + +{/if}