diff --git a/app/(marketing)/layout.tsx b/app/(marketing)/layout.tsx index c9dcae3..d285e1c 100644 --- a/app/(marketing)/layout.tsx +++ b/app/(marketing)/layout.tsx @@ -1,25 +1,16 @@ import { use } from 'react'; -import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client'; - import { SiteFooter } from '~/(marketing)/_components/site-footer'; import { SiteHeader } from '~/(marketing)/_components/site-header'; import { withI18n } from '~/lib/i18n/with-i18n'; -import { loadUserWorkspace } from '../home/(user)/_lib/server/load-user-workspace'; - -async function SiteLayout(props: React.PropsWithChildren) { - const client = getSupabaseServerClient(); - - const { - data: { user }, - } = await client.auth.getUser(); - - const workspace = user ? use(loadUserWorkspace()) : { accounts: [] }; +import { loadCurrentUserAccounts } from '../home/(user)/_lib/server/load-accounts'; +function SiteLayout(props: React.PropsWithChildren) { + const accounts = use(loadCurrentUserAccounts()); return (
- + {props.children} diff --git a/app/home/(user)/_lib/server/load-accounts.ts b/app/home/(user)/_lib/server/load-accounts.ts new file mode 100644 index 0000000..d4d4ec6 --- /dev/null +++ b/app/home/(user)/_lib/server/load-accounts.ts @@ -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>; + +/** + * @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(); +}