Skip to content

Commit 6d62f5a

Browse files
committed
fix: responsive menu for lab edition
1 parent 8be7689 commit 6d62f5a

3 files changed

Lines changed: 42 additions & 43 deletions

File tree

src/components/react-catalyst-ui-kit/typescript/stacked-layout.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,28 @@ export function StackedLayout({
5252
navbar,
5353
sidebar,
5454
children,
55+
sidebarOnly = false,
5556
}: React.PropsWithChildren<{
5657
navbar: React.ReactNode;
5758
sidebar: React.ReactNode;
59+
sidebarOnly: Boolean;
5860
}>) {
5961
let [showSidebar, setShowSidebar] = useState(false);
62+
const containerClassname = sidebarOnly ? "lg:flex-row items-start" : "";
63+
const navbarClassname = sidebarOnly ? "hidden lg:flex" : "";
6064

6165
return (
62-
<div className="relative isolate flex min-h-svh w-full flex-col bg-white ">
66+
<div
67+
className={`relative isolate flex min-h-svh w-full flex-col bg-white ${containerClassname}`}
68+
>
6369
{/* Sidebar on mobile */}
6470
<MobileSidebar open={showSidebar} close={() => setShowSidebar(false)}>
6571
{sidebar}
6672
</MobileSidebar>
6773

6874
{/* Navbar */}
6975
<header className="flex items-center px-4 bg-white">
70-
<div className="min-w-0 flex-1">{navbar}</div>
76+
<div className={`min-w-0 flex-1 ${navbarClassname} `}>{navbar}</div>
7177
<div className="py-2.5 lg:hidden">
7278
<NavbarItem
7379
onClick={() => setShowSidebar(true)}

src/components/react/ui/SidebarMenu.tsx

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
SidebarLabel,
1414
SidebarSection,
1515
SidebarSpacer,
16+
StackedLayout,
1617
} from "../../react-catalyst-ui-kit";
1718
import {
1819
ChevronDownIcon,
@@ -34,20 +35,8 @@ import { UserIcon } from "@heroicons/react/24/solid";
3435
import { getUrl } from "../../../lib/helpers";
3536

3637
interface Props {
37-
menuItems?: Array<{
38-
label: string;
39-
icon: React.ReactNode;
40-
href: string;
41-
}>;
42-
dropdownHeader?: {
43-
label: string;
44-
icon: React.ReactNode;
45-
};
46-
dropdownHeaderItems?: Array<{
47-
label: string;
48-
icon: React.ReactNode;
49-
href: string;
50-
}>;
38+
children?: React.ReactNode;
39+
5140
userMenuItems?: Array<{
5241
label: string;
5342
icon: React.ReactNode;
@@ -119,42 +108,37 @@ const HELP_MENU_ITEMS = [
119108
},
120109
];
121110

122-
export function SidebarMenu({
123-
menuItems = DEFAULT_MENU_ITEMS,
124-
dropdownHeader = DEFAULT_DROPDOWN_HEADER,
125-
dropdownHeaderItems = DEFAULT_DROPDOWN_HEADER_ITEMS,
126-
userMenuItems,
127-
userInfo,
128-
}: Props) {
129-
return (
111+
export function SidebarMenu({ children, userMenuItems, userInfo }: Props) {
112+
const sidebarContent = (
130113
<Sidebar>
131114
<SidebarHeader>
132115
<img
133116
src={getUrl("/sum_logo.jpg")}
134117
alt="SUM Logo"
135118
className="w-40 my-4"
136119
/>
137-
{dropdownHeader && (
120+
{DEFAULT_DROPDOWN_HEADER && (
138121
<Dropdown>
139122
<DropdownButton as={SidebarItem} className="mb-2.5">
140-
{dropdownHeader.icon ? (
141-
dropdownHeader.icon
123+
{DEFAULT_DROPDOWN_HEADER.icon ? (
124+
DEFAULT_DROPDOWN_HEADER.icon
142125
) : (
143126
<Avatar src="/sum_logo.svg" />
144127
)}
145-
<SidebarLabel>{dropdownHeader.label}</SidebarLabel>
128+
<SidebarLabel>{DEFAULT_DROPDOWN_HEADER.label}</SidebarLabel>
146129
<ChevronDownIcon />
147130
</DropdownButton>
148-
{dropdownHeaderItems?.length && dropdownHeaderItems?.length > 0 && (
149-
<DropdownMenu className="min-w-64" anchor="bottom start">
150-
{dropdownHeaderItems.map((item) => (
151-
<DropdownItem key={item.label} href={item.href}>
152-
{item.icon}
153-
<DropdownLabel>{item.label}</DropdownLabel>
154-
</DropdownItem>
155-
))}
156-
</DropdownMenu>
157-
)}
131+
{DEFAULT_DROPDOWN_HEADER_ITEMS?.length &&
132+
DEFAULT_DROPDOWN_HEADER_ITEMS?.length > 0 && (
133+
<DropdownMenu className="min-w-64" anchor="bottom start">
134+
{DEFAULT_DROPDOWN_HEADER_ITEMS.map((item) => (
135+
<DropdownItem key={item.label} href={item.href}>
136+
{item.icon}
137+
<DropdownLabel>{item.label}</DropdownLabel>
138+
</DropdownItem>
139+
))}
140+
</DropdownMenu>
141+
)}
158142
</Dropdown>
159143
)}
160144
<SidebarItem key={HOME_ITEM.label} href={HOME_ITEM.href}>
@@ -163,9 +147,9 @@ export function SidebarMenu({
163147
</SidebarItem>
164148
</SidebarHeader>
165149
<SidebarBody>
166-
{menuItems?.length && menuItems?.length > 0 && (
150+
{DEFAULT_MENU_ITEMS?.length && DEFAULT_MENU_ITEMS?.length > 0 && (
167151
<SidebarSection>
168-
{menuItems.map((item) => (
152+
{DEFAULT_MENU_ITEMS.map((item) => (
169153
<SidebarItem key={item.label} href={item.href}>
170154
{item.icon}
171155
<SidebarLabel>{item.label}</SidebarLabel>
@@ -229,4 +213,14 @@ export function SidebarMenu({
229213
</SidebarFooter>
230214
</Sidebar>
231215
);
216+
217+
return (
218+
<StackedLayout
219+
navbar={sidebarContent}
220+
sidebar={sidebarContent}
221+
sidebarOnly={true}
222+
>
223+
{children}
224+
</StackedLayout>
225+
);
232226
}

src/layouts/Layout.astro

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,9 @@ const labsItems = labs.map((lab) => ({
5555
}
5656
{
5757
role === "editor" && (
58-
<div class="flex flex-row">
59-
<SidebarMenu client:load />
58+
<SidebarMenu client:load>
6059
<slot />
61-
</div>
60+
</SidebarMenu>
6261
)
6362
}
6463
</body>

0 commit comments

Comments
 (0)