From fcdae270b74f00e61951aae36515f5943c5b7c17 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Mon, 24 Apr 2023 11:47:38 -0400 Subject: [PATCH] conflagrate exports --- src/lib/actions/clipboard.js | 27 +++++++++ src/lib/store/api.ts | 10 +++- src/params/outputFormat.js | 4 ++ src/routes/export/+layout.svelte | 1 + .../export/[format=outputFormat]/+page.js | 6 ++ .../export/[format=outputFormat]/+page.svelte | 21 +++++++ .../Serialized.svelte} | 20 +++---- src/routes/export/yaml/+page.svelte | 60 ------------------- 8 files changed, 74 insertions(+), 75 deletions(-) create mode 100644 src/lib/actions/clipboard.js create mode 100644 src/params/outputFormat.js create mode 100644 src/routes/export/[format=outputFormat]/+page.js create mode 100644 src/routes/export/[format=outputFormat]/+page.svelte rename src/routes/export/{json/+page.svelte => [format=outputFormat]/Serialized.svelte} (66%) delete mode 100644 src/routes/export/yaml/+page.svelte diff --git a/src/lib/actions/clipboard.js b/src/lib/actions/clipboard.js new file mode 100644 index 0000000..410fc52 --- /dev/null +++ b/src/lib/actions/clipboard.js @@ -0,0 +1,27 @@ +// stolen from svelte-copy-clipboard-action + +export function clipboard(node, { trigger = "click", text = "" } = {}) { + const handle = async (e) => { + await navigator.clipboard.writeText(text).then( + () => + node.dispatchEvent( + new CustomEvent("copied", { detail: { clipboard: text } }) + ), + (e) => + node.dispatchEvent(new CustomEvent("error", { detail: { error: e } })) + ); + }; + + node.addEventListener(trigger, handle, true); + + return { + update: (params) => { + if (params.trigger !== undefined) trigger = params.trigger; + + if (params.text !== undefined) text = params.text; + }, + destroy() { + node.removeEventListener(trigger, handle, true); + }, + }; +} diff --git a/src/lib/store/api.ts b/src/lib/store/api.ts index ff43570..997ec61 100644 --- a/src/lib/store/api.ts +++ b/src/lib/store/api.ts @@ -1,5 +1,6 @@ import ship from "./ship"; import { browser } from "$app/environment"; +import { writable } from "svelte/store"; export type Api = ReturnType; @@ -14,12 +15,17 @@ export const createApi = () => { api.dispatch.restore(state); + const svelteStore = writable(state); + if (browser) { api.subscribe(() => { - console.log("saving...", api.getState()); - localStorage.setItem("ship", JSON.stringify(api.getState())); + const state = api.getState(); + svelteStore.set(state); + localStorage.setItem("ship", JSON.stringify(state)); }); } + api.svelteStore = svelteStore; + return api; }; diff --git a/src/params/outputFormat.js b/src/params/outputFormat.js new file mode 100644 index 0000000..4c040ea --- /dev/null +++ b/src/params/outputFormat.js @@ -0,0 +1,4 @@ +/** @type {import('@sveltejs/kit').ParamMatcher} */ +export function match(param) { + return ["json", "yaml"].includes(param); +} diff --git a/src/routes/export/+layout.svelte b/src/routes/export/+layout.svelte index d561c3c..45a92fd 100644 --- a/src/routes/export/+layout.svelte +++ b/src/routes/export/+layout.svelte @@ -1,4 +1,5 @@