diff --git a/frontend/src/routes/dashboard/workspace/usuarios/+page.server.ts b/frontend/src/routes/dashboard/workspace/usuarios/+page.server.ts index 76f63be..4488b97 100644 --- a/frontend/src/routes/dashboard/workspace/usuarios/+page.server.ts +++ b/frontend/src/routes/dashboard/workspace/usuarios/+page.server.ts @@ -1,27 +1,24 @@ import { fail } from '@sveltejs/kit'; import type { PageServerLoad, Actions } from './$types'; -import { getKcAccessToken } from '$lib/server/api'; -import { listWorkspaceTenants, createWorkspaceInvite } from '$lib/server/workspace-provision'; +import { getUserCompanies } from '$lib/server/api'; +import { createWorkspaceInvite } from '$lib/server/workspace-provision'; import { WORKSPACE_INVITE_ROLES } from '$lib/server/workspace-provision.shared'; export const load: PageServerLoad = async ({ cookies, fetch }) => { - const accessToken = getKcAccessToken(cookies); - if (!accessToken) { - return { tenants: [], canListTenants: false, roles: WORKSPACE_INVITE_ROLES }; - } + // La organización destino sale de las compañías del usuario (mismo origen que + // el switcher, vía /v1/auth/my-companies). Así no se escribe el slug a mano ni + // se depende de listar todos los tenants del Hub con un token KC que caduca. + const companiesRaw = await getUserCompanies(cookies, fetch); + const companies = (companiesRaw ?? []) + .filter((c) => c && c.tenant_slug) + .map((c) => ({ + id: c.id as number, + name: c.name as string, + tenant_slug: c.tenant_slug as string, + tenant_name: (c.tenant_name as string) || (c.tenant_slug as string) + })); - // Los hub_admin pueden listar todos los tenants (dropdown). Un admin de tenant - // no puede listarlos (403) pero sí puede invitar a SU tenant escribiendo el slug. - const res = await listWorkspaceTenants(accessToken, fetch); - if (!res.ok) { - return { tenants: [], canListTenants: false, roles: WORKSPACE_INVITE_ROLES }; - } - - return { - tenants: res.data.map((t) => ({ slug: t.slug, name: t.display_name || t.name })), - canListTenants: true, - roles: WORKSPACE_INVITE_ROLES - }; + return { companies, roles: WORKSPACE_INVITE_ROLES }; }; export const actions: Actions = { @@ -42,7 +39,7 @@ export const actions: Actions = { return fail(422, { error: 'Ingresa un email válido para invitar.', values }); } if (!tenant_slug) { - return fail(422, { error: 'Selecciona (o escribe) el slug de la organización destino.', values }); + return fail(422, { error: 'Selecciona la compañía destino.', values }); } if (!WORKSPACE_INVITE_ROLES.includes(role as (typeof WORKSPACE_INVITE_ROLES)[number])) { return fail(422, { error: 'Rol inválido.', values }); diff --git a/frontend/src/routes/dashboard/workspace/usuarios/+page.svelte b/frontend/src/routes/dashboard/workspace/usuarios/+page.svelte index 4b156fd..0401ff3 100644 --- a/frontend/src/routes/dashboard/workspace/usuarios/+page.svelte +++ b/frontend/src/routes/dashboard/workspace/usuarios/+page.svelte @@ -75,13 +75,7 @@ Nueva invitación - - {#if data.canListTenants} - Elige la organización destino y el rol del usuario. - {:else} - Escribe el slug de tu organización y el rol del usuario. - {/if} - + Elige la compañía destino y el rol del usuario.
@@ -142,7 +131,7 @@
-