feat(account): add team membership check and refactor user account loading in HomeLayout
This commit is contained in:
@@ -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<typeof hasAccountTeamMembershipLoader>
|
||||||
|
>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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<boolean> {
|
||||||
|
const client = getSupabaseServerClient();
|
||||||
|
const api = createAccountsApi(client);
|
||||||
|
|
||||||
|
return api.hasAccountTeamMembership(accountId);
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
import { requireUserInServerComponent } from '@/lib/server/require-user-in-server-component';
|
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 ConsentDialog from './(user)/_components/consent-dialog';
|
||||||
import { loadCurrentUserAccount } from './(user)/_lib/server/load-user-account';
|
import { loadCurrentUserAccount } from './(user)/_lib/server/load-user-account';
|
||||||
|
|
||||||
@@ -7,10 +10,21 @@ export default async function HomeLayout({
|
|||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
const user = await requireUserInServerComponent();
|
const client = getSupabaseServerClient();
|
||||||
const account = await loadCurrentUserAccount()
|
|
||||||
|
|
||||||
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 (
|
return (
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<ConsentDialog userId={user.id} />
|
<ConsentDialog userId={user.id} />
|
||||||
|
|||||||
Reference in New Issue
Block a user