Fixed sidenav rendering.

This commit is contained in:
Mike Cao 2025-08-09 02:06:54 -07:00
parent 8897c2508d
commit a97445fb82
9 changed files with 95 additions and 21 deletions

View file

@ -23,7 +23,7 @@ import { PanelButton } from '@/components/input/PanelButton';
export function SideNav(props: SidebarProps) {
const { formatMessage, labels } = useMessages();
const { pathname, renderUrl, websiteId } = useNavigation();
const [isCollapsed] = useGlobalState('sidenav-collapsed');
let [isCollapsed] = useGlobalState('sidenav-collapsed');
const hasNav = !!(
websiteId ||
@ -32,19 +32,23 @@ export function SideNav(props: SidebarProps) {
pathname.endsWith('/settings')
);
if (hasNav) {
isCollapsed = true;
}
const links = [
{
id: 'websites',
label: formatMessage(labels.websites),
path: '/websites',
icon: <Globe />,
},
{
id: 'boards',
label: formatMessage(labels.boards),
path: '/boards',
icon: <LayoutDashboard />,
},
{
id: 'websites',
label: formatMessage(labels.websites),
path: '/websites',
icon: <Globe />,
},
{
id: 'links',
label: formatMessage(labels.links),

View file

@ -0,0 +1,24 @@
'use client';
import { PageBody } from '@/components/common/PageBody';
import { Column } from '@umami/react-zen';
import { PageHeader } from '@/components/common/PageHeader';
import { BoardAddButton } from '@/app/(main)/boards/BoardAddButton';
import Link from 'next/link';
import { useMessages } from '@/components/hooks';
export function LinksPage() {
const { formatMessage, labels } = useMessages();
return (
<PageBody>
<Column>
<PageHeader title={formatMessage(labels.links)}>
<BoardAddButton />
</PageHeader>
<Link href="/teams/3a97e34a-7f9d-4de2-8754-ed81714b528d/boards/86d4095c-a2a8-4fc8-9521-103e858e2b41">
Board 1
</Link>
</Column>
</PageBody>
);
}

View file

@ -0,0 +1,10 @@
import { LinksPage } from './LinksPage';
import { Metadata } from 'next';
export default function () {
return <LinksPage />;
}
export const metadata: Metadata = {
title: 'Links',
};

View file

@ -0,0 +1,24 @@
'use client';
import { PageBody } from '@/components/common/PageBody';
import { Column } from '@umami/react-zen';
import { PageHeader } from '@/components/common/PageHeader';
import { BoardAddButton } from '@/app/(main)/boards/BoardAddButton';
import Link from 'next/link';
import { useMessages } from '@/components/hooks';
export function PixelsPage() {
const { formatMessage, labels } = useMessages();
return (
<PageBody>
<Column>
<PageHeader title={formatMessage(labels.pixels)}>
<BoardAddButton />
</PageHeader>
<Link href="/teams/3a97e34a-7f9d-4de2-8754-ed81714b528d/boards/86d4095c-a2a8-4fc8-9521-103e858e2b41">
Board 1
</Link>
</Column>
</PageBody>
);
}

View file

@ -0,0 +1,10 @@
import { PixelsPage } from './PixelsPage';
import { Metadata } from 'next';
export default function () {
return <PixelsPage />;
}
export const metadata: Metadata = {
title: 'Pixels',
};

View file

@ -28,9 +28,13 @@ export function LoadingPanel({
const empty = isEmpty ?? checkEmpty(data);
return (
<Column position="relative" flexGrow={1} overflow="hidden" {...props}>
<>
{/* Show loading spinner only if no data exists */}
{(isLoading || isFetching) && !data && <Loading icon={loadingIcon} position="page" />}
{(isLoading || isFetching) && !data && (
<Column position="relative" height="100%" {...props}>
<Loading icon={loadingIcon} position="page" />
</Column>
)}
{/* Show error */}
{error && <ErrorMessage />}
@ -40,7 +44,7 @@ export function LoadingPanel({
{/* Show main content when data exists */}
{!error && !empty && children}
</Column>
</>
);
}

View file

@ -25,6 +25,7 @@ export function TeamsButton({ showText = true }: { showText?: boolean }) {
const router = useRouter();
const team = data?.data?.find(({ id }) => id === teamId);
const selectedKeys = new Set([teamId || user.id]);
const label = teamId ? team?.name : user.username;
const handleSelect = (id: Key) => {
router.push(id === user.id ? '/websites' : `/teams/${id}/websites`);
@ -37,11 +38,8 @@ export function TeamsButton({ showText = true }: { showText?: boolean }) {
return (
<MenuTrigger>
<Pressable>
<Row alignItems="center" justifyContent="space-between" width="100%" gap>
<SidebarItem
label={teamId ? team?.name : user.username}
icon={teamId ? <Users /> : <User />}
>
<Row width="100%" backgroundColor="2" border borderRadius>
<SidebarItem label={label} icon={teamId ? <Users /> : <User />}>
{showText && (
<Icon rotate={90} size="sm">
<Chevron />