- MQTT nodes failed to build: the topic map was renamed to talk in ports, but __slots__ still declared the old name, so every MQTT node raised AttributeError. Building one of each node type is now a test, since __slots__ makes this failure invisible until someone places the node. - Port names offer the messages already in play: everything published is worth reading, and an input nobody provides yet is worth publishing. A message only connects when both ends spell it the same way, so choosing beats typing. - Adding a port focuses its name field. - Dragging onto an input that already reads something offers the extra port as well as the replacement — an MQTT or InfluxDB node usually wants both. - The template's Item model, its routes, screens and table are gone.
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { Home, Users, Workflow } from "lucide-react"
|
|
|
|
import { SidebarAppearance } from "@/components/Common/Appearance"
|
|
import { Logo } from "@/components/Common/Logo"
|
|
import {
|
|
Sidebar,
|
|
SidebarContent,
|
|
SidebarFooter,
|
|
SidebarHeader,
|
|
} from "@/components/ui/sidebar"
|
|
import useAuth from "@/hooks/useAuth"
|
|
import { type Item, Main } from "./Main"
|
|
import { User } from "./User"
|
|
|
|
const baseItems: Item[] = [
|
|
{ icon: Home, title: "Dashboard", path: "/" },
|
|
{ icon: Workflow, title: "Flows", path: "/flows" },
|
|
]
|
|
|
|
export function AppSidebar() {
|
|
const { user: currentUser } = useAuth()
|
|
|
|
const items = currentUser?.is_superuser
|
|
? [...baseItems, { icon: Users, title: "Admin", path: "/admin" }]
|
|
: baseItems
|
|
|
|
return (
|
|
// Floating frosted chrome over the bg-card content region; see the root
|
|
// DESIGN-GUIDELINES.md → Shells and → Overlay surfaces & content chips.
|
|
<Sidebar
|
|
collapsible="icon"
|
|
variant="floating"
|
|
className="[&>[data-sidebar=sidebar]]:bg-card/80 [&>[data-sidebar=sidebar]]:backdrop-blur-md [&>[data-sidebar=sidebar]]:shadow-e2"
|
|
>
|
|
<SidebarHeader className="px-4 py-6 group-data-[collapsible=icon]:px-0 group-data-[collapsible=icon]:items-center">
|
|
<Logo variant="responsive" />
|
|
</SidebarHeader>
|
|
<SidebarContent>
|
|
<Main items={items} />
|
|
</SidebarContent>
|
|
<SidebarFooter>
|
|
<SidebarAppearance />
|
|
<User user={currentUser} />
|
|
</SidebarFooter>
|
|
</Sidebar>
|
|
)
|
|
}
|
|
|
|
export default AppSidebar
|