From 87363051cd448f6f1ca8fa1fd2386ba3929a8f50 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Thu, 24 Jul 2025 16:13:32 +0300 Subject: [PATCH] feat: implement loadCurrentUserAccounts for user account management in SiteLayout --- app/(marketing)/layout.tsx | 17 +++-------- app/home/(user)/_lib/server/load-accounts.ts | 31 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 app/home/(user)/_lib/server/load-accounts.ts 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(); +}