import Link from 'next/link'; import { ChevronRightIcon } from 'lucide-react'; import getSupabaseServerComponentClient from '@packages/supabase/server-component-client'; import { Badge } from '@kit/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { Input } from '@kit/ui/input'; import { Label } from '@kit/ui/label'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@kit/ui/table'; import configuration from '@/config/app.config'; import type MembershipRole from '@/lib/organizations/types/membership-role'; import { PageBody } from '@/components/app/Page'; import RoleBadge from '../../../(app)/[account]/account/organization/components/RoleBadge'; import AdminGuard from '../../../../packages/admin/components/AdminGuard'; import AdminHeader from '../../../../packages/admin/components/AdminHeader'; import UserActionsDropdown from './components/UserActionsDropdown'; interface Params { params: { uid: string; }; } export const metadata = { title: `Manage User | ${configuration.name}`, }; async function AdminUserPage({ params }: Params) { const uid = params.uid; const data = await loadData(uid); const { auth, user } = data; const displayName = user?.displayName; const authUser = auth?.user; const email = authUser?.email; const phone = authUser?.phone; const organizations = data.organizations ?? []; const isBanned = Boolean( authUser && 'banned_until' in authUser && authUser.banned_until !== 'none', ); return (
Manage User
User Details
{isBanned ? ( Banned ) : ( Active )}
Organizations Organization ID UUID Organization Role {organizations.map((membership) => { const organization = membership.organization; const href = `/admin/organizations/${organization.uuid}/members`; return ( {organization.id} {organization.uuid} {organization.name}
); })}
); } export default AdminGuard(AdminUserPage); async function loadData(uid: string) { const client = getSupabaseServerComponentClient({ admin: true }); const authUser = client.auth.admin.getUserById(uid); const userData = client .from('users') .select( ` id, displayName: display_name, photoURL: photo_url, onboarded `, ) .eq('id', uid) .single(); const organizationsQuery = client .from('memberships') .select< string, { id: number; role: MembershipRole; organization: { id: number; uuid: string; name: string; }; } >( ` id, role, organization: organization_id !inner ( id, uuid, name ) `, ) .eq('user_id', uid); const [auth, user, organizations] = await Promise.all([ authUser, userData, organizationsQuery, ]); return { auth: auth.data, user: user.data, organizations: organizations.data, }; } function Breadcrumbs( props: React.PropsWithChildren<{ displayName: string; }>, ) { return (
Admin Users {props.displayName}
); }