From 022623e22cc925b98eea951c0af87761db1fed75 Mon Sep 17 00:00:00 2001 From: fede Date: Mon, 16 Feb 2026 18:41:21 -0300 Subject: [PATCH] fix: Arregladas updates del panel de admin --- src/lib/components/TablaUsuarios.svelte | 37 ++++++++++++++----- .../components/admin/ModificarUsuario.svelte | 2 + src/lib/hooks/busquedaAdminUsuarios.ts | 5 ++- src/routes/(privado)/admin/+page.svelte | 9 +---- src/routes/(privado)/admin/+page.ts | 16 ++++++-- 5 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/lib/components/TablaUsuarios.svelte b/src/lib/components/TablaUsuarios.svelte index 8638e29..5337b88 100644 --- a/src/lib/components/TablaUsuarios.svelte +++ b/src/lib/components/TablaUsuarios.svelte @@ -25,6 +25,7 @@ import AgregarUsuario from './admin/AgregarUsuario.svelte'; import DarAdmin from './admin/DarAdmin.svelte'; import { busquedaAdminUsuarios } from '@/hooks/busquedaAdminUsuarios'; + import { invalidate, replaceState } from '$app/navigation'; interface Props { usuarios: UserResponseDto[]; @@ -33,7 +34,17 @@ let { usuarios = $bindable(), hayMas }: Props = $props(); - let hayMass = $state(hayMas); + let paginaActual = $derived.by(() => { + const url = new URL(window.location.href); + return Number(url.searchParams.get('p')) || 1; + }); + let search = $derived.by(() => { + const url = new URL(window.location.href); + let ret = url.searchParams.get('q') || ''; + return ret; + }); + let hayMass = $derived(hayMas); + let open = $state(false); let openModificarUsuario = $state(false); let openDarAdmin = $state(false); @@ -45,13 +56,11 @@ let usuarioModificar: UserResponseDto | null = $state(null); let usuarioDarAdmin: UserResponseDto | null = $state(null); - let search = $state(''); - type SortKey = 'username' | 'displayName' | 'postsCount' | 'createdAt'; let sortBy = $state(null); let sortDirection = $state<'asc' | 'desc'>('asc'); - let usuariosFiltrados = $state(usuarios); + let usuariosFiltrados = $derived(usuarios); function ordenarPor(campo: SortKey) { if (sortBy === campo) { @@ -95,11 +104,17 @@ } timeoutId = setTimeout(async () => { - if (search === '') { - search = ''; + const url = new URL(window.location.href); + if (!search.trim()) { + url.searchParams.delete('q'); + } else { + url.searchParams.set('q', search); } + replaceState(url, {}); + let ret = await busquedaAdminUsuarios(search, ITEMS_POR_PAGINA, paginaActual); usuariosFiltrados = ret.usuarios; + // invalidate('admin:load'); hayMass = ret.hayMas; }, 200); @@ -109,8 +124,6 @@ } const ITEMS_POR_PAGINA = 5; - let paginaActual = $state(1); - // const usuariosPaginados = $derived( // usuariosFiltrados.slice((paginaActual - 1) * ITEMS_POR_PAGINA, paginaActual * ITEMS_POR_PAGINA) // ); @@ -245,7 +258,9 @@ import CardContent from '@/components/ui/card/card-content.svelte'; import Card from '@/components/ui/card/card.svelte'; - import CardDescription from '@/components/ui/card/card-description.svelte'; import TablaUsuarios from '@/components/TablaUsuarios.svelte'; import CardTitle from '@/components/ui/card/card-title.svelte'; import CardHeader from '@/components/ui/card/card-header.svelte'; @@ -9,7 +8,7 @@ interface Prop { data: { - usuarios?: UserResponseDto[]; + usuarios: UserResponseDto[]; hayMas: boolean; error: boolean; }; @@ -29,11 +28,7 @@ - {#if data.usuarios?.length === 0} - No hay usuarios que mostar - {:else} - - {/if} + diff --git a/src/routes/(privado)/admin/+page.ts b/src/routes/(privado)/admin/+page.ts index 17ad0f9..81316a9 100644 --- a/src/routes/(privado)/admin/+page.ts +++ b/src/routes/(privado)/admin/+page.ts @@ -1,19 +1,27 @@ +import { busquedaAdminUsuarios } from '@/hooks/busquedaAdminUsuarios.js'; import type { PageLoad } from './$types.js'; import { fetchUsuariosAdmin } from '@/hooks/UsuariosAdmin.js'; export const ssr = false; -export const load: PageLoad = async ({ depends }) => { +export const load: PageLoad = async ({ depends, fetch }) => { depends('admin:load'); - const result = await fetchUsuariosAdmin(1, 5); + let url = new URL(location.href); + let query = url.searchParams.get('q') ?? ''; + let page = Number(url.searchParams.get('p')); + if (isNaN(page) || page < 1) { + page = 1; + } + + const result = await busquedaAdminUsuarios(query, 5, page, fetch); if (result.error) { return { error: true }; } return { - usuarios: result.ret?.usuarios, - hayMas: result.ret?.hayMas, + usuarios: result.usuarios, + hayMas: result.hayMas, error: false }; };