aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-12-27 13:45:55 -0800
committerAdam Soltys <[email protected]>2022-12-27 13:45:55 -0800
commit4b6883362463c3ddfb8c7a574b9beba5220d120b (patch)
treeff7a6388f015c0f6bd33478b1f0f50000a172a73 /src/routes/(app)
parent10c20c0c5b130c389680e37e4e4aba8e2abdbf1e (diff)
downloadcoinos-ui-4b6883362463c3ddfb8c7a574b9beba5220d120b.tar.gz
coinos-ui-4b6883362463c3ddfb8c7a574b9beba5220d120b.zip
broadcast profile settings to nostr
Diffstat (limited to 'src/routes/(app)')
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.svelte73
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_account.svelte9
-rw-r--r--src/routes/(app)/events/+server.js (renamed from src/routes/(app)/[username]/+server.js)0
-rw-r--r--src/routes/(app)/login/+server.js8
-rw-r--r--src/routes/(app)/password/+server.js1
5 files changed, 77 insertions, 14 deletions
diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte
index 3b213a11..55963105 100644
--- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte
+++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte
@@ -1,23 +1,28 @@
<script>
import { onMount } from 'svelte';
import { fly } from 'svelte/transition';
- import { enhance } from '$app/forms';
+ import { applyAction, deserialize } from '$app/forms';
- import { Icon, Spinner, Pin } from '$comp';
+ import { Icon, Spinner, Pin, Password } from '$comp';
import { t } from '$lib/translations';
- import { failure, success } from '$lib/utils';
- import { avatarUpload, bannerUpload, pin } from '$lib/store';
+ import { failure, post, success } from '$lib/utils';
+ import { avatarUpload, bannerUpload, passwordPrompt, password, pin } from '$lib/store';
import { upload } from '$lib/upload';
import { page } from '$app/stores';
+ import { sign, send } from '$lib/nostr';
+ import { invalidateAll } from '$app/navigation';
import Account from './_account.svelte';
import Pos from './_pos.svelte';
import Security from './_security.svelte';
+ import { PUBLIC_COINOS_URL } from '$env/static/public';
+
export let data;
export let form;
let submit;
+ let formElement;
let { user, token, rates, tab } = data;
@@ -41,9 +46,12 @@
$: ({ comp } = tabs.find((t) => t.name === tab));
+ let { address, username } = user;
let loading;
- let save = async (msg) => {
+
+ async function handleSubmit() {
loading = true;
+ let data = new FormData(formElement);
try {
if ($avatarUpload) {
@@ -58,18 +66,69 @@
failure('Something went wrong');
}
+ if (!$password) {
+ $passwordPrompt = true;
+ return;
+ }
+
+ try {
+ await post('/password', { password: $password });
+ } catch (e) {
+ console.log(e);
+ $passwordPrompt = true;
+ return;
+ }
+
+ let event = {
+ pubkey: user.pubkey,
+ created_at: Math.floor(Date.now() / 1000),
+ kind: 0,
+ content: JSON.stringify({
+ name: user.username,
+ about: user.address,
+ picture: `${PUBLIC_COINOS_URL}/public/${user.username}-profile.webp`
+ }),
+ tags: []
+ };
+
+ await sign(event, user, $password);
+ await send(event);
+
+ const response = await fetch(formElement.action, {
+ method: 'POST',
+ body: data
+ });
+
+ const result = deserialize(await response.text());
+
+ if (result.type === 'success') {
+ await invalidateAll();
+ }
+
+ applyAction(result);
loading = false;
- };
+ }
let loaded;
onMount(() => setTimeout(() => (loaded = true), 50));
+
+ $: loading && $password && handleSubmit();
</script>
{#if loaded && user.haspin && $pin?.length !== 6}
<Pin />
{/if}
-<form method="POST" class="mb-[154px]" use:enhance on:submit={save}>
+{#if $passwordPrompt}
+ <Password {user} />
+{/if}
+
+<form
+ method="POST"
+ class="mb-[154px]"
+ on:submit|preventDefault={handleSubmit}
+ bind:this={formElement}
+>
<input type="hidden" name="pin" value={$pin} />
<div class="mt-24 mb-20 px-3 md:px-0 w-full md:w-[400px] mx-auto space-y-8">
diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte
index a60ab7a6..0359f074 100644
--- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte
+++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte
@@ -96,8 +96,13 @@
</div>
<div>
- <label for="address" class="font-bold mb-1 block">{$t('user.settings.businessAddress')}</label>
- <input type="text" name="address" bind:value={user.address} />
+ <label for="address" class="font-bold mb-1 block">{$t('user.settings.about')}</label>
+ <textarea
+ type="text"
+ name="address"
+ bind:value={user.address}
+ placeholder={$t('user.settings.aboutPlaceholder')}
+ />
</div>
<!-- TODO -->
diff --git a/src/routes/(app)/[username]/+server.js b/src/routes/(app)/events/+server.js
index d0b1242f..d0b1242f 100644
--- a/src/routes/(app)/[username]/+server.js
+++ b/src/routes/(app)/events/+server.js
diff --git a/src/routes/(app)/login/+server.js b/src/routes/(app)/login/+server.js
index e08356a0..32d2244d 100644
--- a/src/routes/(app)/login/+server.js
+++ b/src/routes/(app)/login/+server.js
@@ -1,6 +1,6 @@
-import { json } from "@sveltejs/kit";
-import { post } from "$lib/utils";
+import { json } from '@sveltejs/kit';
+import { post } from '$lib/utils';
export async function POST({ request }) {
- return json(await post('/checkPassword', await request.json()));
-}
+ return json(await post('/checkPassword', await request.json()));
+}
diff --git a/src/routes/(app)/password/+server.js b/src/routes/(app)/password/+server.js
index ed9b4dbb..9f2ab6b8 100644
--- a/src/routes/(app)/password/+server.js
+++ b/src/routes/(app)/password/+server.js
@@ -5,4 +5,3 @@ export async function POST({ cookies, request }) {
let result = await post('/checkPassword', await request.json(), auth(cookies));
return json(result);
}
-