From b8c8ff503bcab98af24752c2f12683cc4f7b8233 Mon Sep 17 00:00:00 2001 From: fede Date: Tue, 2 Dec 2025 20:26:31 -0300 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20el=20editar=20usuarios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/TablaUsuarios.svelte | 17 ++- .../components/admin/ModificarUsuario.svelte | 101 ++++++++++++++++++ .../components/ui/checkbox/checkbox.svelte | 36 +++++++ src/lib/components/ui/checkbox/index.ts | 6 ++ src/lib/hooks/updateUsuario.ts | 44 ++++++++ src/routes/(privado)/admin/+page.svelte | 11 +- 6 files changed, 203 insertions(+), 12 deletions(-) create mode 100644 src/lib/components/admin/ModificarUsuario.svelte create mode 100644 src/lib/components/ui/checkbox/checkbox.svelte create mode 100644 src/lib/components/ui/checkbox/index.ts create mode 100644 src/lib/hooks/updateUsuario.ts diff --git a/src/lib/components/TablaUsuarios.svelte b/src/lib/components/TablaUsuarios.svelte index 1aa00ce..893c583 100644 --- a/src/lib/components/TablaUsuarios.svelte +++ b/src/lib/components/TablaUsuarios.svelte @@ -15,19 +15,23 @@ import RecuperarContraseña from './admin/RecuperarContraseña.svelte'; import { Dialog } from './ui/dialog'; import DialogContent from './ui/dialog/dialog-content.svelte'; + import ModificarUsuario from './admin/ModificarUsuario.svelte'; + import { fade } from 'svelte/transition'; interface Props { usuarios: UserResponseDto[]; } - let { usuarios }: Props = $props(); + let { usuarios = $bindable() }: Props = $props(); let open = $state(false); - const openModificarUsuario = $state(false); + let openModificarUsuario = $state(false); //si ponia contraseña en español quedaba muy largo el nombre let usuarioCambioPass: UserResponseDto | null = $state(null); + let usuarioModificar: UserResponseDto | null = $state(null); + $effect(() => { if (!open) { usuarioCambioPass = null; @@ -38,9 +42,13 @@ open = true; usuarioCambioPass = usuario; } + + function handleModificar(usuario: UserResponseDto) { + openModificarUsuario = true; + usuarioModificar = usuario; + } - @@ -73,7 +81,7 @@ - +

Modificar Usuario

@@ -86,3 +94,4 @@
+ diff --git a/src/lib/components/admin/ModificarUsuario.svelte b/src/lib/components/admin/ModificarUsuario.svelte new file mode 100644 index 0000000..bf5cfd4 --- /dev/null +++ b/src/lib/components/admin/ModificarUsuario.svelte @@ -0,0 +1,101 @@ + + +
+ { + open = !open; + }} + > + + + Modificar Usuario + +
+
+ + + Nombre + + + + Bio + +
+ + +
+
+
+ + +
+
+
+
+
+
+
+ (error = '')}> + + {error} + + +
diff --git a/src/lib/components/ui/checkbox/checkbox.svelte b/src/lib/components/ui/checkbox/checkbox.svelte new file mode 100644 index 0000000..1622e05 --- /dev/null +++ b/src/lib/components/ui/checkbox/checkbox.svelte @@ -0,0 +1,36 @@ + + + + {#snippet children({ checked, indeterminate })} +
+ {#if checked} + + {:else if indeterminate} + + {/if} +
+ {/snippet} +
diff --git a/src/lib/components/ui/checkbox/index.ts b/src/lib/components/ui/checkbox/index.ts new file mode 100644 index 0000000..6d92d94 --- /dev/null +++ b/src/lib/components/ui/checkbox/index.ts @@ -0,0 +1,6 @@ +import Root from "./checkbox.svelte"; +export { + Root, + // + Root as Checkbox, +}; diff --git a/src/lib/hooks/updateUsuario.ts b/src/lib/hooks/updateUsuario.ts new file mode 100644 index 0000000..2a2bfb3 --- /dev/null +++ b/src/lib/hooks/updateUsuario.ts @@ -0,0 +1,44 @@ +import { apiBase } from "@/stores/url" +import { sesionStore } from "@/stores/usuario" +import { get } from "svelte/store" + +export interface AdminUpdateUsuario { + id:string, + displayName: string, + bio: string, + profileImage:boolean, + oldImageUrl:string +} + +export async function updateUsuario(usuario: AdminUpdateUsuario) { + + const formData = new FormData(); + formData.append('displayName', usuario.displayName); + formData.append('bio', usuario.bio); + if (usuario.profileImage) { + formData.append('profileImageUrl', usuario.oldImageUrl); + } + + try { + const req = await fetch(get(apiBase) + "/api/users/"+usuario.id, { + method: "PUT", + headers: { + Authorization: `Bearer ${get(sesionStore)?.accessToken}` + }, + body: formData, + }); + if (req.status === 204) { + let ret = { + // bio: usuario.bio, + displayName: usuario.displayName, + // oldImageUrl: usuario.oldImageUrl, + } + return ret; + } + const dataa = await req.json(); + + return dataa.message; + } catch { + return "No se pudo alcanzar el servidor" + } +} diff --git a/src/routes/(privado)/admin/+page.svelte b/src/routes/(privado)/admin/+page.svelte index be4b79d..956243c 100644 --- a/src/routes/(privado)/admin/+page.svelte +++ b/src/routes/(privado)/admin/+page.svelte @@ -8,6 +8,7 @@ import CardHeader from '@/components/ui/card/card-header.svelte'; let cargando = $state(true); + let usuarios = $state(page.data.usuarios);
@@ -22,15 +23,9 @@ {#if page.data.usuarios.length === 0} - {#if page.data.error} - - Error al cargar usuarios. - - {:else} - No hay posts que mostar - {/if} + No hay posts que mostar {:else} - + {/if}