diff --git a/app/home/(user)/_lib/server/load-has-account-team-membership.ts b/app/home/(user)/_lib/server/load-has-account-team-membership.ts new file mode 100644 index 0000000..b879d89 --- /dev/null +++ b/app/home/(user)/_lib/server/load-has-account-team-membership.ts @@ -0,0 +1,34 @@ +import { cache } from 'react'; + +import { requireUserInServerComponent } from '@/lib/server/require-user-in-server-component'; + +import { createAccountsApi } from '@kit/accounts/api'; +import { getSupabaseServerClient } from '@kit/supabase/server-client'; + +export type UserAccount = Awaited< + ReturnType +>; + +/** + * @name loadUserAccount + * @description + * Load the user account. It's a cached per-request function that fetches the user workspace data. + * It can be used across the server components to load the user workspace data. + */ +export const loadHasTeamMembership = cache(hasAccountTeamMembershipLoader); + +export async function loadHasAccountTeamMembership() { + const user = await requireUserInServerComponent(); + return user?.identities?.[0]?.id + ? await loadHasTeamMembership(user?.identities?.[0]?.id) + : null; +} + +async function hasAccountTeamMembershipLoader( + accountId: string, +): Promise { + const client = getSupabaseServerClient(); + const api = createAccountsApi(client); + + return api.hasAccountTeamMembership(accountId); +} diff --git a/app/home/layout.tsx b/app/home/layout.tsx index 680b15d..c483aec 100644 --- a/app/home/layout.tsx +++ b/app/home/layout.tsx @@ -1,4 +1,7 @@ import { requireUserInServerComponent } from '@/lib/server/require-user-in-server-component'; +import { createAccountsApi } from '@/packages/features/accounts/src/server/api'; +import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client'; + import ConsentDialog from './(user)/_components/consent-dialog'; import { loadCurrentUserAccount } from './(user)/_lib/server/load-user-account'; @@ -7,10 +10,21 @@ export default async function HomeLayout({ }: { children: React.ReactNode; }) { - const user = await requireUserInServerComponent(); - const account = await loadCurrentUserAccount() + const client = getSupabaseServerClient(); - if (account && account?.has_consent_anonymized_company_statistics === null) { + const user = await requireUserInServerComponent(); + const account = await loadCurrentUserAccount(); + const api = createAccountsApi(client); + + const hasAccountTeamMembership = await api.hasAccountTeamMembership( + account?.id, + ); + + if ( + hasAccountTeamMembership && + account && + account?.has_consent_anonymized_company_statistics === null + ) { return (