aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-01-29 15:19:38 -0800
committerAdam Soltys <[email protected]>2024-01-29 15:19:38 -0800
commitb54d3afc6465acd5e518a8b4970be1ab75b361b1 (patch)
treec2ab7a8d91140ec6a60bd2b76e25c68a0355ee38 /src/routes/(app)
parenta7dd56863aada46964a4277f0a5940de68c332b5 (diff)
downloadcoinos-ui-b54d3afc6465acd5e518a8b4970be1ab75b361b1.tar.gz
coinos-ui-b54d3afc6465acd5e518a8b4970be1ab75b361b1.zip
autowithdrawals
Diffstat (limited to 'src/routes/(app)')
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.server.js2
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_pos.svelte150
-rw-r--r--src/routes/(app)/send/[...text]/+page.svelte11
-rw-r--r--src/routes/(app)/send/invoice/[id]/+page.server.js1
-rw-r--r--src/routes/(app)/send/invoice/[id]/+page.svelte11
5 files changed, 163 insertions, 12 deletions
diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js
index 8b44f452..23d2ba9b 100644
--- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js
+++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js
@@ -16,8 +16,10 @@ export const actions = {
form.notify = form.notify === "on";
form.nip5 = form.nip5 === "on";
form.prompt = form.prompt === "on";
+ form.autowithdraw = form.autowithdraw === "on";
}
+ console.log("FORM", form.reserve)
let user = { ...(await get("/me", auth(cookies))), ...form };
try {
diff --git a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte
index 4fd61918..4eca2979 100644
--- a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte
+++ b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte
@@ -1,5 +1,7 @@
<script>
+ import { tick } from "svelte";
import Icon from "$comp/Icon.svelte";
+ import Numpad from "$comp/Numpad.svelte";
import LocaleSelector from "$comp/LocaleSelector.svelte";
import Toggle from "$comp/Toggle.svelte";
import { locale, t } from "$lib/translations";
@@ -8,8 +10,34 @@
export let user, rates, submit;
+ let { currency } = user;
+ let rate = rates[currency];
+
let fiats = Object.keys(rates);
- $: user.language = $locale
+ $: user.language = $locale;
+ let keypress = (e) => e.key === "Enter" && (e.preventDefault() || el.click());
+
+ let editingReserve, editingThreshold, doneReserve, doneThreshold;
+ let doneEditing = () => {
+ editingReserve = false;
+ editingThreshold = false;
+ };
+
+ let editReserve = async () => {
+ editingReserve = true;
+ await tick();
+ reserveEl.focus();
+ };
+
+ let editThreshold = async () => {
+ editingThreshold = true;
+ await tick();
+ thresholdEl.focus();
+ };
+
+ if (!user.threshold) user.threshold = 1000000;
+ if (!user.reserve) user.reserve = 100000;
+ let reserveEl, thresholdEl;
</script>
<div>
@@ -66,6 +94,126 @@
</p>
</div>
+<div>
+ <div class="flex justify-between items-center">
+ <span class="font-bold">{$t("user.settings.autoWithdraw")}</span>
+ <Toggle id="autowithdraw" bind:value={user.autowithdraw} />
+ </div>
+ <p class="text-secondary mt-1 w-9/12">
+ {$t("user.settings.autoWithdrawDescription")}
+ </p>
+</div>
+
+{#if user.autowithdraw}
+ <div class="mb-2">
+ <label for="display" class="font-bold mb-1 block"
+ >{$t("user.settings.destination")}</label
+ >
+ <textarea
+ name="destination"
+ placeholder={$t("user.settings.destinationPlaceholder")}
+ on:keypress={keypress}
+ class="w-full p-4 border rounded-xl h-48"
+ bind:value={user.destination}
+ />
+ </div>
+
+ <div>
+ <label for="display" class="font-bold mb-1 block"
+ >{$t("user.settings.threshold")}</label
+ >
+ <button type="button" class="flex w-full" on:click={editThreshold}>
+ <div class="p-4 border rounded-2xl rounded-r-none border-r-0 bg-primary">
+ ⚡️
+ </div>
+ <div
+ class="border-l-0 rounded-l-none pl-2 w-full p-4 border rounded-2xl text-left"
+ >{user.threshold}</div>
+ <input type="hidden" name="reserve" bind:value={user.reserve} />
+ </button>
+ <p class="text-secondary mt-1">
+ {$t("user.settings.thresholdDesc")}
+ </p>
+ </div>
+
+ <div>
+ <label for="display" class="font-bold mb-1 block"
+ >{$t("user.settings.reserve")}</label
+ >
+ <button type="button" class="flex w-full" on:click={editReserve}>
+ <div class="p-4 border rounded-2xl rounded-r-none border-r-0 bg-primary">
+ ⚡️
+ </div>
+ <div
+ class="border-l-0 rounded-l-none pl-2 w-full p-4 border rounded-2xl text-left"
+ >
+ {user.reserve}
+ </div>
+ <input type="hidden" name="reserve" bind:value={user.reserve} />
+ </button>
+ <p class="text-secondary mt-1">
+ {$t("user.settings.reserveDesc")}
+ </p>
+ </div>
+{/if}
+
+{#if editingThreshold}
+ <div
+ class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full z-50"
+ >
+ <div
+ class="relative top-40 mx-auto p-5 border shadow-lg rounded-md bg-white space-y-5 w-lg max-w-lg"
+ >
+ <h1 class="text-center text-2xl font-semibold">
+ {$t("user.settings.threshold")}
+ </h1>
+ <Numpad
+ bind:amount={user.threshold}
+ bind:currency
+ bind:rate
+ bind:submit={doneReserve}
+ bind:element={thresholdEl}
+ />
+
+ <button
+ bind:this={doneReserve}
+ type="button"
+ on:click={doneEditing}
+ class="p-4 bg-black text-white rounded-2xl text-lg font-semibold w-full"
+ >Ok</button
+ >
+ </div>
+ </div>
+{/if}
+
+{#if editingReserve}
+ <div
+ class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full z-50"
+ >
+ <div
+ class="relative top-40 mx-auto p-5 border shadow-lg rounded-md bg-white space-y-5 w-lg max-w-lg text-center"
+ >
+ <h1 class="text-2xl font-semibold">
+ {$t("user.settings.reserve")}
+ </h1>
+ <Numpad
+ bind:amount={user.reserve}
+ bind:currency
+ bind:rate
+ bind:submit={doneReserve}
+ bind:element={reserveEl}
+ />
+ <button
+ bind:this={doneReserve}
+ type="button"
+ on:click={doneEditing}
+ class="p-4 bg-black text-white rounded-2xl text-lg font-semibold w-full"
+ >Ok</button
+ >
+ </div>
+ </div>
+{/if}
+
<a href="./shopify">
<button
type="button"
diff --git a/src/routes/(app)/send/[...text]/+page.svelte b/src/routes/(app)/send/[...text]/+page.svelte
index 41b58bfb..489650a5 100644
--- a/src/routes/(app)/send/[...text]/+page.svelte
+++ b/src/routes/(app)/send/[...text]/+page.svelte
@@ -9,7 +9,7 @@
import Avatar from "$comp/Avatar.svelte";
import Icon from "$comp/Icon.svelte";
import Spinner from "$comp/Spinner.svelte";
- import { back, fail } from "$lib/utils";
+ import { back, fail, focus } from "$lib/utils";
export let data;
export let form;
@@ -18,10 +18,9 @@
let { contacts } = data;
let w;
- let el, textarea, text;
- let placeholder = $t("user.send.placeholder");
+ let el, text;
+
- $: $page && setTimeout(() => w > 800 && textarea?.focus(), 0);
let keypress = (e) => e.key === "Enter" && (e.preventDefault() || el.click());
let paste = async () => {
@@ -48,12 +47,12 @@
<div class="mb-2">
<textarea
+ use:focus
name="text"
- {placeholder}
+ placeholder={$t("user.send.placeholder")}
on:keypress={keypress}
class="w-full p-4 border rounded-xl h-48"
bind:value={text}
- bind:this={textarea}
/>
</div>
diff --git a/src/routes/(app)/send/invoice/[id]/+page.server.js b/src/routes/(app)/send/invoice/[id]/+page.server.js
index 88017362..c6b0a9a4 100644
--- a/src/routes/(app)/send/invoice/[id]/+page.server.js
+++ b/src/routes/(app)/send/invoice/[id]/+page.server.js
@@ -41,6 +41,7 @@ export const actions = {
await post("/payments", body, auth(cookies));
} catch (e) {
+ console.log("payment failed", params, e);
return fail(400, { message: e.message });
}
diff --git a/src/routes/(app)/send/invoice/[id]/+page.svelte b/src/routes/(app)/send/invoice/[id]/+page.svelte
index e857f717..dd637d70 100644
--- a/src/routes/(app)/send/invoice/[id]/+page.svelte
+++ b/src/routes/(app)/send/invoice/[id]/+page.svelte
@@ -35,8 +35,8 @@
amountFiat = af;
};
- let loading;
- let submit = () => (loading = true);
+ let submitting;
+ let submit = () => (submitting = true);
let external = async () => {
let invoice = { type: "lightning", amount, currency };
@@ -52,8 +52,8 @@
$: update(form);
let update = () => {
- if (form?.message.includes("pin")) $pin = undefined;
- loading = false;
+ if (form?.message?.includes("pin")) $pin = undefined;
+ submitting = false;
};
// onMount(async () => {
@@ -152,8 +152,9 @@
use:focus
type="submit"
class="opacity-100 hover:opacity-80'} rounded-2xl border py-3 font-bold mx-auto mt-2 bg-black text-white px-4 w-24"
+ disabled={submitting}
>
- {#if loading}
+ {#if submitting}
<Spinner />
{:else}
{$t("payments.send")}