cocinada interfaz del dar admin

This commit is contained in:
2026-01-10 18:06:25 -03:00
parent df7a24fde9
commit 2d8a03fc4e
3 changed files with 75 additions and 6 deletions

View File

@@ -9,6 +9,7 @@
import Button from './ui/button/button.svelte'; import Button from './ui/button/button.svelte';
import KeyIcon from '@lucide/svelte/icons/key'; import KeyIcon from '@lucide/svelte/icons/key';
import UserPen from '@lucide/svelte/icons/user-pen'; import UserPen from '@lucide/svelte/icons/user-pen';
import Shield from '@lucide/svelte/icons/shield';
import Search from '@lucide/svelte/icons/search'; import Search from '@lucide/svelte/icons/search';
import Plus from '@lucide/svelte/icons/plus'; import Plus from '@lucide/svelte/icons/plus';
import { Tooltip } from './ui/tooltip'; import { Tooltip } from './ui/tooltip';
@@ -27,6 +28,7 @@
import InputGroupAddon from './ui/input-group/input-group-addon.svelte'; import InputGroupAddon from './ui/input-group/input-group-addon.svelte';
import InputGroupInput from './ui/input-group/input-group-input.svelte'; import InputGroupInput from './ui/input-group/input-group-input.svelte';
import AgregarUsuario from './admin/AgregarUsuario.svelte'; import AgregarUsuario from './admin/AgregarUsuario.svelte';
import DarAdmin from './admin/DarAdmin.svelte';
interface Props { interface Props {
usuarios: UserResponseDto[]; usuarios: UserResponseDto[];
@@ -36,8 +38,10 @@
let open = $state(false); let open = $state(false);
let openModificarUsuario = $state(false); let openModificarUsuario = $state(false);
let openDarAdmin = $state(false);
let openBorrar = $state(false); let openBorrar = $state(false);
let opencrearUsuario = $state(false);
let usuarioBorrar: UserResponseDto | null = $state(null); let usuarioBorrar: UserResponseDto | null = $state(null);
//si ponia contraseña en español quedaba muy largo el nombre //si ponia contraseña en español quedaba muy largo el nombre
@@ -45,6 +49,8 @@
let usuarioModificar: UserResponseDto | null = $state(null); let usuarioModificar: UserResponseDto | null = $state(null);
let usuarioDarAdmin: UserResponseDto | null = $state(null);
let search = $state(''); let search = $state('');
type SortKey = 'username' | 'displayName' | 'postsCount' | 'createdAt'; type SortKey = 'username' | 'displayName' | 'postsCount' | 'createdAt';
@@ -110,7 +116,11 @@
usuarioBorrar = usuario; usuarioBorrar = usuario;
} }
let opencrearUsuario = $state(false); function handleDarAdmin(usuario: UserResponseDto) {
openDarAdmin = true;
usuarioDarAdmin = usuario;
}
// $inspect(usuarios); // $inspect(usuarios);
</script> </script>
@@ -119,7 +129,11 @@ let opencrearUsuario = $state(false);
<InputGroupAddon align="inline-start"><Search></Search></InputGroupAddon> <InputGroupAddon align="inline-start"><Search></Search></InputGroupAddon>
<InputGroupInput type="text" placeholder="Buscar usuario..." bind:value={search} /> <InputGroupInput type="text" placeholder="Buscar usuario..." bind:value={search} />
</InputGroup> </InputGroup>
<Button onclick={() =>opencrearUsuario = !opencrearUsuario} variant="secondary" class="bg-blue-500/20"><Plus /></Button> <Button
onclick={() => (opencrearUsuario = !opencrearUsuario)}
variant="secondary"
class="bg-blue-500/20"><Plus /></Button
>
</div> </div>
<Table> <Table>
@@ -191,6 +205,24 @@ let opencrearUsuario = $state(false);
{/if} {/if}
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
<Tooltip>
<TooltipTrigger>
<Button
onclick={() => handleDarAdmin(usuario)}
variant={usuario.isAdmin ? 'destructive' : 'default'}
>
<Shield />
</Button>
</TooltipTrigger>
<TooltipContent>
{#if usuario.isAdmin}
Sacar admin
{:else}
Dar Admin
{/if}
</TooltipContent>
</Tooltip>
</TableCell> </TableCell>
</TableRow> </TableRow>
{/each} {/each}
@@ -201,3 +233,4 @@ let opencrearUsuario = $state(false);
<RecuperarContraseña bind:open usuario={usuarioCambioPass} /> <RecuperarContraseña bind:open usuario={usuarioCambioPass} />
<ModificarUsuario bind:open={openModificarUsuario} bind:usuario={usuarioModificar} /> <ModificarUsuario bind:open={openModificarUsuario} bind:usuario={usuarioModificar} />
<AgregarUsuario bind:open={opencrearUsuario} /> <AgregarUsuario bind:open={opencrearUsuario} />
<DarAdmin bind:open={openDarAdmin} usuario={usuarioDarAdmin} />

View File

@@ -0,0 +1,37 @@
<script>
import Button from '../ui/button/button.svelte';
import DialogContent from '../ui/dialog/dialog-content.svelte';
import DialogHeader from '../ui/dialog/dialog-header.svelte';
import DialogTitle from '../ui/dialog/dialog-title.svelte';
import Dialog from '../ui/dialog/dialog.svelte';
let { open = $bindable(), usuario } = $props();
</script>
<Dialog {open} onOpenChange={() => (open = false)}>
<DialogContent>
<DialogHeader>
<DialogTitle>Confirmar Admin</DialogTitle>
</DialogHeader>
<form
onsubmit={(e) => {
e.preventDefault();
}}
>
{#if usuario}
<p>
{usuario.isAdmin
? '¿Estás seguro que quieres sacarle acceso de administrador al usuario '
: '¿Estás seguro que quieres dar acceso de administrador al usuario '}
<strong>{usuario.displayName}</strong>
(@{usuario.username})?
</p>
{/if}
<div class="mt-4 flex justify-between gap-2">
<Button type="submit">Confirmar</Button>
<Button variant="secondary" onclick={() => (open = false)}>Cancelar</Button>
</div>
</form>
</DialogContent>
</Dialog>

View File

@@ -78,7 +78,6 @@
{/if} {/if}
</Label> </Label>
</div> </div>
<hr class="my-2" />
<div class="flex justify-between"> <div class="flex justify-between">
<Button type="submit" disabled={cargando}> <Button type="submit" disabled={cargando}>
{#if cargando} {#if cargando}