diff --git a/src/lib/components/signup-form.svelte b/src/lib/components/signup-form.svelte index f9e529c..2b102af 100644 --- a/src/lib/components/signup-form.svelte +++ b/src/lib/components/signup-form.svelte @@ -6,11 +6,25 @@ import type { RegisterDto } from '../../types'; import { register } from '@/hooks/register'; import Loader2Icon from '@lucide/svelte/icons/loader-2'; + import Check from '@lucide/svelte/icons/check'; + import Cross from '@lucide/svelte/icons/x'; + + import Spinner from './ui/spinner/spinner.svelte'; + import { checkUsername } from '@/hooks/checkUsername'; let { showAlert = $bindable() } = $props(); let cargando = $state(false); + let checkeandoUsuario: boolean | null = $state(null); + let esUsuarioValido = $state(false); + + async function checkUsuario() { + checkeandoUsuario = true; + esUsuarioValido = await checkUsername(dto.username); + checkeandoUsuario = false; + } + const setAlert = () => (showAlert = true); let dto: RegisterDto = $state({ password: '', username: '', email: '', displayName: '' }); @@ -31,8 +45,26 @@
- Nombre de Usuario - +
+ Nombre de Usuario + {#if checkeandoUsuario == null} + + {:else if checkeandoUsuario == true} + + {:else if esUsuarioValido} + + {:else} + + {/if} +
+
diff --git a/src/lib/hooks/checkUsername.ts b/src/lib/hooks/checkUsername.ts new file mode 100644 index 0000000..2d82818 --- /dev/null +++ b/src/lib/hooks/checkUsername.ts @@ -0,0 +1,16 @@ +import { apiBase } from "@/stores/url"; +import { get } from "svelte/store"; + +export async function checkUsername(username: string) { + try { + const req = await fetch(`${get(apiBase)}/api/users/check-username/${username}`, { + method: "GET" + }); + if (req.ok){ + return (await req.json()).available; + } + return false; + } catch { + return false; + } +} diff --git a/src/types.d.ts b/src/types.d.ts index a134d27..c7749ce 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -47,10 +47,10 @@ export interface LoginDto { } export interface RegisterDto { - username: string?; - email: string?; + username: string; + email: string; password: string?; - displayName: string?; + displayName: string; } export interface CreatePostDto {