summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/lib/Pagination.ts
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/lib/Pagination.ts')
-rw-r--r--frontend/src/lib/Pagination.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/frontend/src/lib/Pagination.ts b/frontend/src/lib/Pagination.ts
new file mode 100644
index 0000000..f05492b
--- /dev/null
+++ b/frontend/src/lib/Pagination.ts
@@ -0,0 +1,31 @@
+import { navigate } from '$lib/Navigation';
+import { getContext, setContext } from 'svelte';
+import { writable, type Writable } from 'svelte/store';
+
+export interface PaginationData {
+ page: number;
+ items: number;
+}
+
+export class PaginationContext {
+ page = 0;
+ items = 0;
+ total = 0;
+
+ set update({ page, items }: PaginationData) {
+ this.page = page;
+ this.items = items;
+ }
+
+ apply(params: URLSearchParams) {
+ navigate({ pagination: { items: this.items } }, params);
+ }
+}
+
+export function initPaginationContext() {
+ return setContext<Writable<PaginationContext>>('pagination', writable(new PaginationContext()));
+}
+
+export function getPaginationContext() {
+ return getContext<Writable<PaginationContext>>('pagination');
+}