B2B-31: refactor profile menu, header

This commit is contained in:
devmc-ee
2025-06-29 19:25:50 +03:00
parent a8dbc98b62
commit fbbc2f8760
14 changed files with 132 additions and 69 deletions

View File

@@ -6,16 +6,22 @@ import {
import { AppLogo } from '~/components/app-logo';
import { ProfileAccountDropdownContainer } from '~/components/personal-account-dropdown-container';
import { getTeamAccountSidebarConfig } from '~/config/team-account-navigation.config';
import { TeamAccountAccountsSelector } from '~/home/[account]/_components/team-account-accounts-selector';
// local imports
import { TeamAccountWorkspace } from '../_lib/server/team-account-workspace.loader';
import { TeamAccountNotifications } from './team-account-notifications';
import { useMemo } from 'react';
export function TeamAccountNavigationMenu(props: {
workspace: TeamAccountWorkspace;
}) {
const { account, user, accounts } = props.workspace;
const { account, user, accounts: rawAccounts } = props.workspace;
const accounts = useMemo(() => rawAccounts.map((account) => ({
label: account.name,
value: account.slug,
image: account.picture_url,
})),[rawAccounts])
const routes = getTeamAccountSidebarConfig(account.slug).routes.reduce<
Array<{
@@ -40,7 +46,6 @@ export function TeamAccountNavigationMenu(props: {
<div className={'flex w-full flex-1 justify-between'}>
<div className={'flex items-center space-x-8'}>
<AppLogo />
<BorderedNavigationMenu>
{routes.map((route) => (
<BorderedNavigationMenuItem {...route} key={route.path} />
@@ -48,26 +53,14 @@ export function TeamAccountNavigationMenu(props: {
</BorderedNavigationMenu>
</div>
<div className={'flex items-center justify-end space-x-2.5'}>
<div className={'flex items-center justify-end space-x-2.5 gap-2'}>
<TeamAccountNotifications accountId={account.id} userId={user.id} />
<TeamAccountAccountsSelector
userId={user.id}
selectedAccount={account.slug}
accounts={accounts.map((account) => ({
label: account.name,
value: account.slug,
image: account.picture_url,
}))}
<ProfileAccountDropdownContainer
user={user}
account={account}
showProfileName={true}
accounts={accounts}
/>
<div>
<ProfileAccountDropdownContainer
user={user}
account={account}
showProfileName={false}
/>
</div>
</div>
</div>
);

View File

@@ -28,12 +28,8 @@ export const loadTeamWorkspace = cache(workspaceLoader);
async function workspaceLoader(accountSlug: string) {
const client = getSupabaseServerClient();
const api = createTeamAccountsApi(client);
const [workspace, user] = await Promise.all([
api.getAccountWorkspace(accountSlug),
requireUserInServerComponent(),
]);
const user = await requireUserInServerComponent();
const workspace = await api.getAccountWorkspace(accountSlug, user.id);
// we cannot find any record for the selected account
// so we redirect the user to the home page
if (!workspace.data?.account) {
@@ -42,6 +38,7 @@ async function workspaceLoader(accountSlug: string) {
return {
...workspace.data,
accounts: workspace.data.accounts.map(({ user_accounts }) => ({...user_accounts})),
user,
};
}

View File

@@ -30,7 +30,7 @@ function TeamWorkspaceLayout({ children, params }: TeamWorkspaceLayoutProps) {
return <SidebarLayout account={account}>{children}</SidebarLayout>;
}
return <HeaderLayout account={account}>{children}</HeaderLayout>;
return <HeaderLayout account={account}>{children}</HeaderLayout>;
}
function SidebarLayout({