Browse Source

Fix login modal

master
Silberengel 10 months ago
parent
commit
624cd65f90
  1. 46
      src/lib/components/LoginModal.svelte

46
src/lib/components/LoginModal.svelte

@ -1,7 +1,6 @@
<script lang="ts"> <script lang="ts">
import { Button } from "flowbite-svelte"; import { Button } from "flowbite-svelte";
import Login from './Login.svelte'; import { loginWithExtension, ndkSignedIn } from '$lib/ndk';
import { ndkSignedIn } from '$lib/ndk';
const { show = false, onClose = () => {}, onLoginSuccess = () => {} } = $props<{ const { show = false, onClose = () => {}, onLoginSuccess = () => {} } = $props<{
show?: boolean; show?: boolean;
@ -9,36 +8,67 @@
onLoginSuccess?: () => void; onLoginSuccess?: () => void;
}>(); }>();
let signInFailed = $state<boolean>(false);
let errorMessage = $state<string>('');
$effect(() => { $effect(() => {
if ($ndkSignedIn && show) { if ($ndkSignedIn && show) {
onLoginSuccess(); onLoginSuccess();
onClose(new MouseEvent('click')); onClose(new MouseEvent('click'));
} }
}); });
async function handleSignInClick() {
try {
signInFailed = false;
errorMessage = '';
const user = await loginWithExtension();
if (!user) {
throw new Error('The NIP-07 extension did not return a user.');
}
} catch (e) {
console.error(e);
signInFailed = true;
errorMessage = e instanceof Error ? e.message : 'Failed to sign in. Please try again.';
}
}
</script> </script>
{#if show} {#if show}
<div class="fixed inset-0 z-50 flex items-center justify-center overflow-x-hidden overflow-y-auto outline-none focus:outline-none bg-gray-900 bg-opacity-50"> <div class="fixed inset-0 z-50 flex items-center justify-center overflow-x-hidden overflow-y-auto outline-none focus:outline-none bg-gray-900 bg-opacity-50">
<div class="relative w-auto my-6 mx-auto max-w-3xl"> <div class="relative w-auto my-6 mx-auto max-w-3xl">
<div class="border-0 rounded-lg shadow-lg relative flex flex-col w-full bg-white outline-none focus:outline-none"> <div class="border-0 rounded-lg shadow-lg relative flex flex-col w-full bg-white dark:bg-gray-800 outline-none focus:outline-none">
<!-- Header --> <!-- Header -->
<div class="flex items-start justify-between p-5 border-b border-solid border-gray-300 rounded-t"> <div class="flex items-start justify-between p-5 border-b border-solid border-gray-300 dark:border-gray-600 rounded-t">
<h3 class="text-xl font-medium text-gray-900">Login Required</h3> <h3 class="text-xl font-medium text-gray-900 dark:text-gray-100">Login Required</h3>
<button <button
class="ml-auto bg-transparent border-0 text-gray-400 float-right text-3xl leading-none font-semibold outline-none focus:outline-none" class="ml-auto bg-transparent border-0 text-gray-400 float-right text-3xl leading-none font-semibold outline-none focus:outline-none"
onclick={onClose} onclick={onClose}
> >
<span class="bg-transparent text-gray-500 h-6 w-6 text-2xl block outline-none focus:outline-none">×</span> <span class="bg-transparent text-gray-500 dark:text-gray-400 h-6 w-6 text-2xl block outline-none focus:outline-none">×</span>
</button> </button>
</div> </div>
<!-- Body --> <!-- Body -->
<div class="relative p-6 flex-auto"> <div class="relative p-6 flex-auto">
<p class="text-base leading-relaxed text-gray-500 mb-4"> <p class="text-base leading-relaxed text-gray-500 dark:text-gray-400 mb-6">
You need to be logged in to submit an issue. Your form data will be preserved. You need to be logged in to submit an issue. Your form data will be preserved.
</p> </p>
<div class="flex flex-col space-y-4">
<div class="flex justify-center"> <div class="flex justify-center">
<Login /> <Button
color="primary"
onclick={handleSignInClick}
>
Sign in with Extension
</Button>
</div>
{#if signInFailed}
<div class="p-3 text-sm text-red-600 dark:text-red-400 bg-red-100 dark:bg-red-900 rounded">
{errorMessage}
</div>
{/if}
</div> </div>
</div> </div>
</div> </div>

Loading…
Cancel
Save