From 36a920df51ce431ed648ae69d762158421cc2221 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Tue, 6 Aug 2024 13:10:10 -0700 Subject: [PATCH] Break out some utils --- src/app/components/PrimaryNav.svelte | 6 +-- src/app/components/SecondaryNav.svelte | 4 +- src/app/modal.ts | 21 +++++++++ src/app/state.ts | 60 +------------------------- src/app/toast.ts | 27 ++++++++++++ src/lib/components/Icon.svelte | 24 +++++------ src/lib/index.ts | 2 +- src/lib/transition.ts | 5 +++ src/routes/+layout.svelte | 12 +++--- src/routes/+page.svelte | 2 +- svelte.config.js | 8 ++-- 11 files changed, 84 insertions(+), 87 deletions(-) create mode 100644 src/app/modal.ts create mode 100644 src/app/toast.ts create mode 100644 src/lib/transition.ts diff --git a/src/app/components/PrimaryNav.svelte b/src/app/components/PrimaryNav.svelte index ca661470..0a3fe386 100644 --- a/src/app/components/PrimaryNav.svelte +++ b/src/app/components/PrimaryNav.svelte @@ -6,9 +6,9 @@
diff --git a/src/app/components/SecondaryNav.svelte b/src/app/components/SecondaryNav.svelte index 4e2768b9..ea873052 100644 --- a/src/app/components/SecondaryNav.svelte +++ b/src/app/components/SecondaryNav.svelte @@ -1,6 +1,6 @@
diff --git a/src/app/modal.ts b/src/app/modal.ts new file mode 100644 index 00000000..a72dbc16 --- /dev/null +++ b/src/app/modal.ts @@ -0,0 +1,21 @@ +import type {ComponentType} from "svelte" +import {readable, writable} from "svelte/store" +import {randomId} from "@welshman/lib" +import {pushState} from "$app/navigation" + +export const modals = new Map() + +export const pushModal = (component: ComponentType, props: Record) => { + const id = randomId() + + // TODO: fix memory leak here by listening to history somehow + modals.set(id, {component, props}) + pushState("", {modal: id}) + + return id +} + +export const popModal = (id: string) => { + modals.delete(id) + history.back() +} diff --git a/src/app/state.ts b/src/app/state.ts index cd1002a8..e905f3d2 100644 --- a/src/app/state.ts +++ b/src/app/state.ts @@ -1,62 +1,4 @@ -import type {ComponentType} from "svelte" -import {readable, writable} from "svelte/store" -import type {FlyParams} from "svelte/transition" -import {fly as baseFly} from "svelte/transition" -import {randomId} from "@welshman/lib" -import {pushState} from "$app/navigation" - -// Animations - -export const fly = (node: Element, params?: FlyParams | undefined) => - baseFly(node, {y: 20, ...params}) - -// Toast - -export type Toast = { - id: number - message: string - options: ToastOptions -} - -export type ToastOptions = { - timeout?: number -} - -export const toast = writable(null) - -export const pushToast = ( - {message = "", id = Math.random()}: Partial, - options: ToastOptions, -) => { - toast.set({id, message, options}) - - setTimeout(() => popToast(id), options.timeout || 5000) - - return id -} - -export const popToast = (id: number) => toast.update($t => ($t?.id === id ? null : $t)) - -// Modals - -export const modals = new Map() - -export const pushModal = (component: ComponentType, props: Record) => { - const id = randomId() - - // TODO: fix memory leak here by listening to history somehow - modals.set(id, {component, props}) - pushState("", {modal: id}) - - return id -} - -export const popModal = (id: string) => { - modals.delete(id) - history.back() -} - -// App state +import {readable} from "svelte/store" export const spaces = readable([ { diff --git a/src/app/toast.ts b/src/app/toast.ts new file mode 100644 index 00000000..4d555f84 --- /dev/null +++ b/src/app/toast.ts @@ -0,0 +1,27 @@ +import {writable} from "svelte/store" +import {randomId} from "@welshman/lib" + +export type Toast = { + id: string + message: string + options: ToastOptions +} + +export type ToastOptions = { + timeout?: number +} + +export const toast = writable(null) + +export const pushToast = ( + {message = "", id = randomId()}: Partial, + options: ToastOptions, +) => { + toast.set({id, message, options}) + + setTimeout(() => popToast(id), options.timeout || 5000) + + return id +} + +export const popToast = (id: string) => toast.update($t => ($t?.id === id ? null : $t)) diff --git a/src/lib/components/Icon.svelte b/src/lib/components/Icon.svelte index aafb7f7a..b3df4ba0 100644 --- a/src/lib/components/Icon.svelte +++ b/src/lib/components/Icon.svelte @@ -8,18 +8,18 @@
diff --git a/svelte.config.js b/svelte.config.js index 6695d41e..73246338 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -14,10 +14,10 @@ const config = { // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter(), alias: { - src: "src", - app: "src/app", - lib: "src/lib", - assets: "src/assets", + '@src': "src", + '@app': "src/app", + '@lib': "src/lib", + '@assets': "src/assets", }, }, }