import m, { ClosureComponent } from "mithril"; import drawerComponent from "./drawer-component.ts"; import * as overlay from "./overlay.ts"; import { version as VERSION } from "../package.json"; import datalist from "./datalist.ts"; import { transitionRoot, transitionChild, dialog, dialogOverlay, icon, } from "./tailwind-utility-components.ts"; import * as store from "./store.ts"; import * as notifications from "./notifications.ts"; import { LOGO_SVG } from "../build/assets.ts"; function tsxComponent( c: ClosureComponent, ): (attrs: T) => ReturnType { return c as any; } const TransitionRoot = tsxComponent(transitionRoot); const TransitionChild = tsxComponent(transitionChild); const Dialog = tsxComponent(dialog); const DialogOverlay = tsxComponent(dialogOverlay); const Icon = tsxComponent(icon); function classNames(...classes: string[]): string { return classes.filter(Boolean).join(" "); } interface Attrs { page: string; } const component: ClosureComponent = () => { let sidebarOpen = false; function setSidebarOpen(open: boolean): void { sidebarOpen = open; setTimeout(m.redraw); } return { view: (vnode) => { const navigation = [ { name: "Overview", href: "#!/overview", enabled: window.authorizer.hasAccess("devices", 1), }, { name: "Devices", href: "#!/devices", enabled: window.authorizer.hasAccess("devices", 2), }, { name: "Faults", href: "#!/faults", enabled: window.authorizer.hasAccess("faults", 2), }, { name: "Presets", href: "#!/presets", enabled: window.authorizer.hasAccess("presets", 2), }, { name: "Provisions", href: "#!/provisions", enabled: window.authorizer.hasAccess("provisions", 2), }, { name: "Virtual Parameters", href: "#!/virtualParameters", enabled: window.authorizer.hasAccess("virtualParameters", 2), }, { name: "Files", href: "#!/files", enabled: window.authorizer.hasAccess("files", 2), }, { name: "Config", href: "#!/config", enabled: window.authorizer.hasAccess("config", 2), }, { name: "Permissions", href: "#!/permissions", enabled: window.authorizer.hasAccess("permissions", 2), }, { name: "Users", href: "#!/users", enabled: window.authorizer.hasAccess("users", 2), }, ] .filter((item) => item.enabled) .map(({ name, href }) => { const n = href.slice(3); return { name, href, active: vnode.attrs["page"] === n }; }); return [
setSidebarOpen(false)} >
{window.username ? (
{window.username}
) : ( )}
v{VERSION}
{/* Force sidebar to shrink to fit close icon */}
{/* Static sidebar for desktop */}
{m(drawerComponent)} {vnode.children}
, overlay.render(), m(datalist), ]; }, }; }; export default component;