aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/receive
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-23 23:53:29 -0700
committerAdam Soltys <[email protected]>2024-08-23 23:53:29 -0700
commit243f2b2f0f2da9735885978a6773b77a7bd139eb (patch)
tree7ee9ed6e90dd1417cb87f091c03148b7eb06011f /src/routes/(app)/receive
parent8d3fb861ef2a9e56fee6a0ab9c4c0e3c935305dc (diff)
downloadcoinos-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.js17
-rw-r--r--src/routes/(app)/receive/[...token]/+page.svelte92
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>