import { SupabaseClient } from '@supabase/supabase-js'; import { PlusCircle } from 'lucide-react'; import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client'; import { AccountInvitationsTable, AccountMembersTable, InviteMembersDialogContainer, } from '@kit/team-accounts/components'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@kit/ui/card'; import { If } from '@kit/ui/if'; import { PageBody, PageHeader } from '@kit/ui/page'; import { Trans } from '@kit/ui/trans'; import { Database } from '~/lib/database.types'; import { createI18nServerInstance } from '~/lib/i18n/i18n.server'; import { withI18n } from '~/lib/i18n/with-i18n'; import { loadTeamWorkspace } from '../_lib/server/team-account-workspace.loader'; interface Params { params: { account: string; }; } async function loadUser(client: SupabaseClient) { const { data, error } = await client.auth.getUser(); if (error) { throw error; } return data.user; } async function loadAccountMembers( client: SupabaseClient, account: string, ) { const { data, error } = await client.rpc('get_account_members', { account_slug: account, }); if (error) { console.error(error); throw error; } return data ?? []; } async function loadInvitations( client: SupabaseClient, account: string, ) { const { data, error } = await client.rpc('get_account_invitations', { account_slug: account, }); if (error) { console.error(error); throw error; } return data ?? []; } async function loadData(client: SupabaseClient, slug: string) { return Promise.all([ loadTeamWorkspace(slug), loadAccountMembers(client, slug), loadInvitations(client, slug), loadUser(client), ]); } export const generateMetadata = async () => { const i18n = await createI18nServerInstance(); const title = i18n.t('teams:members.pageTitle'); return { title, }; }; async function TeamAccountMembersPage({ params }: Params) { const client = getSupabaseServerComponentClient(); const [{ account }, members, invitations, user] = await loadData( client, params.account, ); const canManageRoles = account.permissions.includes('roles.manage'); const canManageInvitations = account.permissions.includes('invites.manage'); const isPrimaryOwner = account.primary_owner_user_id === user.id; const currentUserRoleHierarchy = account.role_hierarchy_level; return ( <> } description={} />
); } export default withI18n(TeamAccountMembersPage);