Skip to content

Commit 3aa2886

Browse files
committed
feat(webapp): pin the project and environment selectors above the scroll area
Move the Project header, project picker, and environment selector into a fixed region so they stay put while the nav list scrolls, and shift the scroll divider down to the top of the scrollable section.
1 parent d7c6af0 commit 3aa2886

1 file changed

Lines changed: 59 additions & 58 deletions

File tree

apps/webapp/app/components/navigation/SideMenu.tsx

Lines changed: 59 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,8 @@ export function SideMenu({
314314
)}
315315
>
316316
<CollapseToggle isCollapsed={isCollapsed} onToggle={handleToggleCollapsed} />
317-
<div className="absolute inset-0 grid grid-cols-[100%] grid-rows-[2.5rem_1fr_auto] overflow-hidden">
318-
<div
319-
className={cn(
320-
"flex min-w-0 items-center overflow-hidden border-b px-1 py-1 transition duration-300",
321-
showHeaderDivider || isCollapsed ? "border-grid-bright" : "border-transparent"
322-
)}
323-
>
317+
<div className="absolute inset-0 grid grid-cols-[100%] grid-rows-[2.5rem_auto_1fr_auto] overflow-hidden">
318+
<div className="flex min-w-0 items-center overflow-hidden border-b border-transparent px-1 py-1">
324319
<div className={cn("min-w-0", !isCollapsed && "flex-1")}>
325320
<OrgSelector
326321
organizations={organizations}
@@ -355,65 +350,71 @@ export function SideMenu({
355350
</div>
356351
<div
357352
className={cn(
358-
"min-h-0 overflow-y-auto pt-2",
359-
isCollapsed
360-
? "scrollbar-none"
361-
: "scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600"
353+
"border-b px-1 pb-2 pt-2 transition duration-300",
354+
showHeaderDivider || isCollapsed ? "border-grid-bright" : "border-transparent"
362355
)}
363-
ref={borderRef}
364356
>
365-
<div className="mb-6 flex w-full flex-col gap-4 overflow-hidden px-1">
366-
<div className="w-full space-y-1">
367-
<SideMenuHeader title={"Project"} isCollapsed={isCollapsed} collapsedTitle="Proj" />
368-
<div>
369-
<ProjectSelector
357+
<div className="w-full space-y-1">
358+
<SideMenuHeader title={"Project"} isCollapsed={isCollapsed} collapsedTitle="Proj" />
359+
<div>
360+
<ProjectSelector
361+
organization={organization}
362+
project={project}
363+
isCollapsed={isCollapsed}
364+
className="w-full"
365+
/>
366+
<div className="flex items-center">
367+
<EnvironmentSelector
370368
organization={organization}
371369
project={project}
372-
isCollapsed={isCollapsed}
370+
environment={environment}
373371
className="w-full"
372+
isCollapsed={isCollapsed}
373+
showConnector
374374
/>
375-
<div className="flex items-center">
376-
<EnvironmentSelector
377-
organization={organization}
378-
project={project}
379-
environment={environment}
380-
className="w-full"
381-
isCollapsed={isCollapsed}
382-
showConnector
383-
/>
384-
{environment.type === "DEVELOPMENT" && project.engine === "V2" && (
385-
<CollapsibleElement isCollapsed={isCollapsed}>
386-
<Dialog>
387-
<TooltipProvider disableHoverableContent={true}>
388-
<Tooltip>
389-
<TooltipTrigger asChild>
390-
<div className="inline-flex">
391-
<DialogTrigger asChild>
392-
<Button
393-
variant="minimal/small"
394-
className="aspect-square h-7 p-1"
395-
LeadingIcon={<ConnectionIcon isConnected={isConnected} />}
396-
/>
397-
</DialogTrigger>
398-
</div>
399-
</TooltipTrigger>
400-
<TooltipContent side="right" className={"text-xs"}>
401-
{isConnected === undefined
402-
? "Checking connection…"
403-
: isConnected
404-
? "Your dev server is connected"
405-
: "Your dev server is not connected"}
406-
</TooltipContent>
407-
</Tooltip>
408-
</TooltipProvider>
409-
<DevPresencePanel isConnected={isConnected} />
410-
</Dialog>
411-
</CollapsibleElement>
412-
)}
413-
</div>
375+
{environment.type === "DEVELOPMENT" && project.engine === "V2" && (
376+
<CollapsibleElement isCollapsed={isCollapsed}>
377+
<Dialog>
378+
<TooltipProvider disableHoverableContent={true}>
379+
<Tooltip>
380+
<TooltipTrigger asChild>
381+
<div className="inline-flex">
382+
<DialogTrigger asChild>
383+
<Button
384+
variant="minimal/small"
385+
className="aspect-square h-7 p-1"
386+
LeadingIcon={<ConnectionIcon isConnected={isConnected} />}
387+
/>
388+
</DialogTrigger>
389+
</div>
390+
</TooltipTrigger>
391+
<TooltipContent side="right" className={"text-xs"}>
392+
{isConnected === undefined
393+
? "Checking connection…"
394+
: isConnected
395+
? "Your dev server is connected"
396+
: "Your dev server is not connected"}
397+
</TooltipContent>
398+
</Tooltip>
399+
</TooltipProvider>
400+
<DevPresencePanel isConnected={isConnected} />
401+
</Dialog>
402+
</CollapsibleElement>
403+
)}
414404
</div>
415405
</div>
416-
406+
</div>
407+
</div>
408+
<div
409+
className={cn(
410+
"min-h-0 overflow-y-auto pt-2",
411+
isCollapsed
412+
? "scrollbar-none"
413+
: "scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600"
414+
)}
415+
ref={borderRef}
416+
>
417+
<div className="mb-6 flex w-full flex-col gap-4 overflow-hidden px-1">
417418
<div className="w-full space-y-0">
418419
<SideMenuItem
419420
name="Tasks"

0 commit comments

Comments
 (0)