feat: implement loadCurrentUserAccounts for user account management in SiteLayout
This commit is contained in:
@@ -1,25 +1,16 @@
|
|||||||
import { use } from 'react';
|
import { use } from 'react';
|
||||||
|
|
||||||
import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client';
|
|
||||||
|
|
||||||
import { SiteFooter } from '~/(marketing)/_components/site-footer';
|
import { SiteFooter } from '~/(marketing)/_components/site-footer';
|
||||||
import { SiteHeader } from '~/(marketing)/_components/site-header';
|
import { SiteHeader } from '~/(marketing)/_components/site-header';
|
||||||
import { withI18n } from '~/lib/i18n/with-i18n';
|
import { withI18n } from '~/lib/i18n/with-i18n';
|
||||||
|
|
||||||
import { loadUserWorkspace } from '../home/(user)/_lib/server/load-user-workspace';
|
import { loadCurrentUserAccounts } from '../home/(user)/_lib/server/load-accounts';
|
||||||
|
|
||||||
async function SiteLayout(props: React.PropsWithChildren) {
|
|
||||||
const client = getSupabaseServerClient();
|
|
||||||
|
|
||||||
const {
|
|
||||||
data: { user },
|
|
||||||
} = await client.auth.getUser();
|
|
||||||
|
|
||||||
const workspace = user ? use(loadUserWorkspace()) : { accounts: [] };
|
|
||||||
|
|
||||||
|
function SiteLayout(props: React.PropsWithChildren) {
|
||||||
|
const accounts = use(loadCurrentUserAccounts());
|
||||||
return (
|
return (
|
||||||
<div className={'flex min-h-[100vh] flex-col'}>
|
<div className={'flex min-h-[100vh] flex-col'}>
|
||||||
<SiteHeader accounts={workspace.accounts} />
|
<SiteHeader accounts={accounts} />
|
||||||
|
|
||||||
{props.children}
|
{props.children}
|
||||||
|
|
||||||
|
|||||||
31
app/home/(user)/_lib/server/load-accounts.ts
Normal file
31
app/home/(user)/_lib/server/load-accounts.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
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 Accounts = Awaited<ReturnType<typeof loadAccounts>>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 loadAccounts = cache(accountsLoader);
|
||||||
|
|
||||||
|
export async function loadCurrentUserAccounts() {
|
||||||
|
const client = getSupabaseServerClient();
|
||||||
|
const {
|
||||||
|
data: { user },
|
||||||
|
} = await client.auth.getUser();
|
||||||
|
return user?.identities?.[0]?.id ? await loadAccounts() : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
async function accountsLoader() {
|
||||||
|
const client = getSupabaseServerClient();
|
||||||
|
const api = createAccountsApi(client);
|
||||||
|
|
||||||
|
return api.loadUserAccounts();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user