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 { 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 (
|
||||
<div className="container">
|
||||
<ConsentDialog userId={user.id} />
|
||||
|
||||
Reference in New Issue
Block a user