This commit introduces the Card Button component to the UI package and improves URL matching by allowing end to be a boolean or function. Navigation menu components now support both cases. Additionally, changes have been made to improve the visual and functional aspects of various components throughout the application. This includes changes in pricing display, route active checking, and the introduction of new files such as HomeAddAccountButton and HomeAccountsList.
73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import {
|
|
BorderedNavigationMenu,
|
|
BorderedNavigationMenuItem,
|
|
} from '@kit/ui/bordered-navigation-menu';
|
|
|
|
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';
|
|
|
|
export function TeamAccountNavigationMenu(props: {
|
|
workspace: TeamAccountWorkspace;
|
|
}) {
|
|
const { account, user, accounts } = props.workspace;
|
|
|
|
const routes = getTeamAccountSidebarConfig(account.slug).routes.reduce<
|
|
Array<{
|
|
path: string;
|
|
label: string;
|
|
Icon?: React.ReactNode;
|
|
end?: boolean | ((path: string) => boolean);
|
|
}>
|
|
>((acc, item) => {
|
|
if ('children' in item) {
|
|
return [...acc, ...item.children];
|
|
}
|
|
|
|
if ('divider' in item) {
|
|
return acc;
|
|
}
|
|
|
|
return [...acc, item];
|
|
}, []);
|
|
|
|
return (
|
|
<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} />
|
|
))}
|
|
</BorderedNavigationMenu>
|
|
</div>
|
|
|
|
<div className={'flex justify-end space-x-2.5'}>
|
|
<TeamAccountAccountsSelector
|
|
userId={user.id}
|
|
selectedAccount={account.slug}
|
|
accounts={accounts.map((account) => ({
|
|
label: account.name,
|
|
value: account.slug,
|
|
image: account.picture_url,
|
|
}))}
|
|
/>
|
|
|
|
<TeamAccountNotifications accountId={account.id} userId={user.id} />
|
|
|
|
<ProfileAccountDropdownContainer
|
|
collapsed={true}
|
|
user={user}
|
|
account={account}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|