diff options
| author | Adam Soltys <[email protected]> | 2022-12-27 13:45:55 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-12-27 13:45:55 -0800 |
| commit | 4b6883362463c3ddfb8c7a574b9beba5220d120b (patch) | |
| tree | ff7a6388f015c0f6bd33478b1f0f50000a172a73 /src/routes | |
| parent | 10c20c0c5b130c389680e37e4e4aba8e2abdbf1e (diff) | |
| download | coinos-ui-4b6883362463c3ddfb8c7a574b9beba5220d120b.tar.gz coinos-ui-4b6883362463c3ddfb8c7a574b9beba5220d120b.zip | |
broadcast profile settings to nostr
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/+page.svelte | 73 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/_account.svelte | 9 | ||||
| -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.js | 8 | ||||
| -rw-r--r-- | src/routes/(app)/password/+server.js | 1 |
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); } - |
