import { SortDirection } from '$gql/graphql'; import { getContext, setContext } from 'svelte'; import { writable, type Writable } from 'svelte/store'; import { navigate } from './Navigation'; export interface SortData { on: T; direction: SortDirection; seed: number | undefined; } export class SortContext { on: T; direction: SortDirection; seed: number | undefined; labels: Record; constructor({ on, direction, seed }: SortData, labels: Record) { this.on = on; this.direction = direction; this.seed = seed; this.labels = labels; } set update({ on, direction, seed }: SortData) { this.on = on; this.direction = direction; this.seed = seed; } apply(params: URLSearchParams) { navigate({ sort: { on: this.on, direction: this.direction, seed: this.seed } }, params); } } export function initSortContext(sort: SortData, labels: Record) { return setContext>>('sort', writable(new SortContext(sort, labels))); } export function getSortContext() { return getContext>>('sort'); }