diff options
| author | Adam Soltys <[email protected]> | 2024-08-23 23:53:29 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-08-23 23:53:29 -0700 |
| commit | 243f2b2f0f2da9735885978a6773b77a7bd139eb (patch) | |
| tree | 7ee9ed6e90dd1417cb87f091c03148b7eb06011f /src/routes/(app)/receive | |
| parent | 8d3fb861ef2a9e56fee6a0ab9c4c0e3c935305dc (diff) | |
| download | coinos-ui-243f2b2f0f2da9735885978a6773b77a7bd139eb.tar.gz coinos-ui-243f2b2f0f2da9735885978a6773b77a7bd139eb.zip | |
rename ecash routes
Diffstat (limited to 'src/routes/(app)/receive')
| -rw-r--r-- | src/routes/(app)/receive/[...token]/+page.server.js | 17 | ||||
| -rw-r--r-- | src/routes/(app)/receive/[...token]/+page.svelte | 92 |
2 files changed, 109 insertions, 0 deletions
diff --git a/src/routes/(app)/receive/[...token]/+page.server.js b/src/routes/(app)/receive/[...token]/+page.server.js new file mode 100644 index 00000000..30b42f32 --- /dev/null +++ b/src/routes/(app)/receive/[...token]/+page.server.js @@ -0,0 +1,17 @@ +import { auth, fd, get, post } from "$lib/utils"; +import { error, fail, redirect } from "@sveltejs/kit"; +import parse from "$lib/parse"; + +export async function load({ cookies, params, parent, url }) { + let { user } = await parent(); + if (!user) redirect(307, `/register?redirect=${url.pathname}`); + await parse(params.token, url.host, cookies); +} + +export const actions = { + default: async ({ cookies, request, url }) => { + let { text } = await fd(request); + let msg = await parse(text, url.host, cookies); + return fail(400, { error: msg || "default" }); + }, +}; diff --git a/src/routes/(app)/receive/[...token]/+page.svelte b/src/routes/(app)/receive/[...token]/+page.svelte new file mode 100644 index 00000000..2fd4b879 --- /dev/null +++ b/src/routes/(app)/receive/[...token]/+page.svelte @@ -0,0 +1,92 @@ +<script> + import { page } from "$app/stores"; + import { fly } from "svelte/transition"; + import { enhance } from "$app/forms"; + import { tick } from "svelte"; + import { browser } from "$app/environment"; + import { t } from "$lib/translations"; + import AppHeader from "$comp/AppHeader.svelte"; + import Avatar from "$comp/Avatar.svelte"; + import Icon from "$comp/Icon.svelte"; + import Spinner from "$comp/Spinner.svelte"; + import { back, fail, focus } from "$lib/utils"; + + export let data; + export let form; + + let { token } = data; + data.subject = data.user; + + let el, text, pasted, w; + + let keypress = (e) => e.key === "Enter" && (e.preventDefault() || el.click()); + + let paste = async () => { + text = await navigator.clipboard.readText(); + }; + + $: if (browser && pasted && text) el.click() && (pasted = false); +</script> + +<svelte:window bind:innerWidth={w} /> + +<AppHeader {data} /> +<div class="container px-4 max-w-lg mx-auto space-y-5 mt-20"> + <h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold"> + {$t("payments.voucher")} + </h1> + + <form method="POST" use:enhance class="space-y-2 text-xl"> + {#if form?.error} + <div class="mb-5"> + <div class="text-red-600"> + {form.error === "default" + ? $t("error.unrecognizedInput") + : form.error} + </div> + </div> + {/if} + + <div class="mb-2"> + <textarea + use:focus + name="text" + placeholder={$t("payments.voucherText")} + on:keypress={keypress} + class="w-full p-4 border rounded-xl h-48 text-xl" + bind:value={text} + on:paste={() => (pasted = true)} + autocapitalize="none" + /> + </div> + + <div class="flex gap-2"> + <a href="/scan" class="w-full"> + <button + type="button" + class="flex border rounded-2xl px-6 py-5 font-bold hover:opacity-80 w-full bg-primary justify-center" + > + <Icon icon="camera" style="mr-2 w-6 my-auto" /> + <div class="my-auto">{$t("user.send.scan")}</div> + </button> + </a> + + <button + type="button" + class="flex border rounded-2xl px-6 py-5 font-bold hover:opacity-80 w-full bg-primary justify-center" + on:click={paste} + > + <Icon icon="paste" style="mr-2 w-6 my-auto" /> + <div class="my-auto">{$t("user.send.paste")}</div> + </button> + </div> + + <button + bind:this={el} + type="submit" + class="bg-black text-white border rounded-2xl px-6 py-5 w-full font-bold" + > + {$t("user.send.next")} + </button> + </form> +</div> |
