Add equipment loan feature and USB bulk control

- Add emprestimos (equipment loan) module in Convex with queries/mutations
- Create emprestimos page with full CRUD and status tracking
- Add USB bulk control to admin devices overview
- Fix Portuguese accents in USB policy control component
- Fix dead code warnings in Rust agent
- Fix tiptap type error in rich text editor
This commit is contained in:
rever-tecnologia 2025-12-04 14:23:58 -03:00
parent 49aa143a80
commit 063c5dfde7
11 changed files with 1448 additions and 26 deletions

View file

@ -1,6 +1,6 @@
"use client"
import * as React from "react"
"use client"
import * as React from "react"
import {
AlertTriangle,
Building,
@ -15,6 +15,7 @@ import {
LayoutTemplate,
LifeBuoy,
MonitorCog,
Package,
PlayCircle,
ShieldAlert,
ShieldCheck,
@ -50,7 +51,7 @@ import { useAuth } from "@/lib/auth-client"
import { cn } from "@/lib/utils"
import type { LucideIcon } from "lucide-react"
type NavRoleRequirement = "staff" | "admin"
type NavigationItem = {
@ -87,6 +88,7 @@ const navigation: NavigationGroup[] = [
{ title: "Modo Play", url: "/play", icon: PlayCircle, requiredRole: "staff" },
{ title: "Agenda", url: "/agenda", icon: CalendarDays, requiredRole: "staff" },
{ title: "Dispositivos", url: "/admin/devices", icon: MonitorCog, requiredRole: "admin" },
{ title: "Emprestimos", url: "/emprestimos", icon: Package, requiredRole: "staff" },
],
},
{
@ -145,7 +147,7 @@ const navigation: NavigationGroup[] = [
],
},
]
export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
const pathname = usePathname()
const { session, isLoading, isAdmin, isStaff } = useAuth()
@ -188,18 +190,18 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
React.useEffect(() => {
setIsHydrated(true)
}, [])
function isActive(item: NavigationItem) {
const { url, exact } = item
if (!pathname) return false
if (!pathname) return false
if (url === "/dashboard" && pathname === "/") {
return true
}
return true
}
if (exact) {
return pathname === url
}
return pathname === url || pathname.startsWith(`${url}/`)
}
}
const toggleExpanded = React.useCallback((title: string) => {
setExpanded((prev) => {
@ -212,7 +214,7 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
return next
})
}, [])
if (!isHydrated) {
return (
<Sidebar {...props}>
@ -375,4 +377,4 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
</Sidebar>
)
}